root_face目录结构:
人名:
人脸照片
import face_recognition
import cv2
import os
import numpy as npdef face_encode(img, model='large'):points = face_recognition.face_locations(img, model='cnn')encodeing = face_recognition.face_encodings(img, points, model=model)return points, encodeingpath = r'./root_face'
dirs = os.listdir(path)
face_dict = {}
root_face = []
index = 0
for dir in dirs:dir_path = os.path.join(path, dir)files = os.listdir(dir_path)for file in files:file_path = os.path.join(dir_path, file)img = cv2.imread(file_path)w, h = img.shape[1::-1]ratio = w / hh = 400img = cv2.resize(img, (int(h * ratio), h))_, encodeing = face_encode(img)face_dict['{}'.format(index)] = '{}'.format(dir)root_face.append(encodeing[0])index += 1def gstreamer_pipeline(capture_width=1280,capture_height=720,display_width=1280,display_height=720,framerate=24,flip_method=0,
):return ("nvarguscamerasrc ! ""video/x-raw(memory:NVMM), ""width&#61;(int)%d, height&#61;(int)%d, ""format&#61;(string)NV12, framerate&#61;(fraction)%d/1 ! ""nvvidconv flip-method&#61;%d ! ""video/x-raw, width&#61;(int)%d, height&#61;(int)%d, format&#61;(string)BGRx ! ""videoconvert ! ""video/x-raw, format&#61;(string)BGR ! appsink"% (capture_width,capture_height,framerate,flip_method,display_width,display_height,))def show_camera():cap &#61; cv2.VideoCapture(gstreamer_pipeline(flip_method&#61;0), cv2.CAP_GSTREAMER)while cap.isOpened():flag, frame &#61; cap.read()frame_count &#61; cap.get(cv2.CAP_PROP_FPS)print(frame_count)w, h &#61; frame.shape[1::-1]ratio &#61; w / hh &#61; 150frame &#61; cv2.resize(frame, (int(h * ratio), h))points, encodeings &#61; face_encode(frame)frame_count &#61; cap.get(cv2.CAP_PROP_FPS)print(frame_count)for pts, encodeing in zip(points, encodeings):cv2.rectangle(frame, tuple((pts[1], pts[0])), tuple((pts[3], pts[2])), (0, 255, 0))face_distances &#61; face_recognition.face_distance(root_face, encodeing)if np.min(face_distances) <0.4:continuebest_match_index &#61; np.argmin(face_distances)str1 &#61; face_dict[&#39;{}&#39;.format(best_match_index)]cv2.putText(frame, str1, tuple((pts[1], pts[0])), cv2.FONT_HERSHEY_SIMPLEX, 1.2, (255, 255, 255), 2)cv2.imshow("windowName", frame)if cv2.waitKey(1) & 0xFF &#61;&#61; ord(&#39;q&#39;):breakk &#61; cv2.waitKey()if k &#61;&#61; 27:breakif cv2.getWindowProperty(&#39;windowName&#39;, cv2.WND_PROP_AUTOSIZE) <1:breakcap.release()cv2.destroyAllWindows()if __name__ &#61;&#61; "__main__":show_camera()