【发布时间】: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 并准确说明它有什么问题,显示任何错误消息等。