【问题标题】:How about use Face Recognition?使用人脸识别怎么样?
【发布时间】:2021-12-25 11:26:53
【问题描述】:

我正在使用人脸识别。当我加载文件夹并选择该人的图像时,脚本将找到与该人关联的所有图像并将其删除。但是当我运行代码时,它会删除所有带有面孔的图片。

代码 1:

def load_file(self):
    filename = askopenfilename()
    self._file_field.delete(0, tk.END)  # deletes the current value
    self._file_field.insert(0, filename)
    for widget in self._image_panel.winfo_children():
        widget.destroy()

    img = ImageTk.PhotoImage(Image.open(filename))
    panel = tk.Label(self._image_panel, image=img)
    panel.img = img
    panel.pack(side="bottom", fill="both", expand="yes")

代码 2:

def load_folder(self):
    filename = askdirectory()
    self._folder_field.delete(0, tk.END)  # deletes the current value
    self._folder_field.insert(0, filename)

代码 3:

def start_process(self):
    ref_path = self._file_field.get()
    folder_path = self._folder_field.get()
    self.find_and_delete(folder_path, ref_path)

代码 4:

def run_process(self):
    self._run_task = True
    t = Thread(target=self.start_process)
    t.start()

代码 5:

def find_and_delete(self, directory, ref_image_path):
    ref_face = self.get_ref_face(ref_image_path)
    if ref_face is None:
        messagebox.showinfo("Error", "Can't find a face. Reference Image quality is not enough")
        return
    files = os.listdir(directory)
    i = 1
    for filename in files:
        try:
            percentage = int((i / len(files)) * 100)
            self._progress['value'] = percentage
            self.update_idletasks()
            i += 1
            file_path = os.path.join(directory, filename)
            if self.is_user_in_image(ref_face, file_path):
                os.remove(file_path)
                print(filename, 'deleted.')
        except:
            print('Error reading file', filename)
    messagebox.showinfo("Information", "Process Finished")

代码 6

def get_ref_face(self, ref_image_path):
    try:
        ref_image = face_recognition.load_image_file(ref_image_path)
        ref_face = face_recognition.face_encodings(ref_image)[0]
        return ref_face
    except:
        return None

代码 7:

def is_user_in_image(self, ref_face, image_path):
    unknown_picture = face_recognition.load_image_file(image_path)
    unknown_faces = face_recognition.face_encodings(unknown_picture)

    for unknown_face in unknown_faces:
        results = face_recognition.compare_faces([ref_face], unknown_face)
        if results[0]:
            return True

    return False

【问题讨论】:

  • 你不能仅仅发布一堆如果代码 sn-ps,说他们做错了什么,并期望任何人能够帮助你。您需要发布一个可运行的minimal reproducible example 并准确说明它有什么问题,显示任何错误消息等。

标签: python face-recognition


【解决方案1】:

很难理解您的代码片段在做什么以及何时执行,但您的 CODE 7 可能会将每个人都识别为具有默认容差的相似的人。 试试类似的东西

results = face_recognition.compare_faces([ref_face], unknown_face, tolerance=0.15)

【讨论】:

  • 问题已解决。太感谢你了兄弟!但是当我使用 tkiner 时,读取文件时出错!
  • 文件读取错误肯定与人脸识别管道无关。观察您的应用在每一步都在做什么。
  • 我想把我的代码发给你。你能帮我修一下吗?
猜你喜欢
  • 2013-12-22
  • 2011-12-14
  • 1970-01-01
  • 2014-02-04
  • 2017-12-01
  • 2018-06-14
  • 2015-10-13
  • 2018-06-28
  • 2023-03-06
相关资源
最近更新 更多