我们把这个程序作为学校的人脸识别项目,我们是 python 的新手,我们做了很多研究,我们想出了这个。它可以工作,但运行速度很慢,如果有人能帮助我们提高程序速度,我们将非常感激!
这是代码:
import cv2
import os
import face_recognition
import glob
known_faces = []
known_names = []
known_faces_paths = []
registered_faces_path = 'C:\\Users\\DELL\\Documents\\AttProj\\registered\\'
for name in os.listdir(registered_faces_path):
images_mask = '%s%s\\*.jpg' % (registered_faces_path, name)
images_paths = glob.glob(images_mask)
known_faces_paths += images_paths
known_names += [name for x in images_paths]
def get_encodings(img_path):
image = face_recognition.load_image_file(img_path)
encoding = face_recognition.face_encodings(image)
if len(encoding) > 0:
return encoding[0]
else:
return None
known_faces = [get_encodings(img_path) for img_path in known_faces_paths if get_encodings(img_path) is not None]
vc = cv2.VideoCapture(0)
while True:
ret, frame = vc.read()
if not ret:
break
frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
faces = face_recognition.face_locations(frame_rgb)
for face in faces:
top, right, bottom, left = face
cv2.rectangle(frame, (left, top), (right, bottom), (0,0,255), 2)
encoding = face_recognition.face_encodings(frame_rgb, [face])[0]
results = face_recognition.compare_faces(known_faces, encoding)
if any(results):
name = known_names[results.index(True)]
else:
name = 'unknown'
cv2.putText(frame, name, (left, bottom + 20), cv2.FONT_HERSHEY_PLAIN, 2, (0,0,255), 2)
cv2.imshow('win', frame)
k = cv2.waitKey(1)
if ord('q') == k:
break
cv2.destroyAllWindows()
vc.release()
我们已经尝试了很多,但没有成功。