if __name__ == '__main__': cascade_path = "cascade_files/haarcascade_frontalface_alt.xml" path_train = 'faces_dataset/train' path_test = 'faces_dataset/test' # 人脸检测训练结果读取 face_cascade = cv2.CascadeClassifier(cascade_path) # 人脸识别方法初始化 recognizer = cv2.face.LBPHFaceRecognizer_create() # 获取训练数据集 images, labels, le = get_images_and_labels(path_train) # 读取训练模型 print('\n读取模型...') recognizer.read('my_LBPHFaceRecognizer.xml') # 识别测试数据集 print('\n识别视频中的人脸...') cap = cv2.VideoCapture(0) scaling_factor = 0.8 # 点击ESC退出 while True: ret, frame = cap.read() frame = cv2.resize(frame, None, fx=scaling_factor, fy=scaling_factor, interpolation=cv2.INTER_AREA) gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) face_rects = face_cascade.detectMultiScale(gray, 1.3, 5) predicted_person = '' for (x, y, w, h) in face_rects: cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2) predicted_index, conf = recognizer.predict( gray[y:y + h, x:x + w]) # 文字到数字的转换 predicted_person = le.num_to_word(predicted_index) cv2.putText(frame[y:y + h, x:x + w], predicted_person, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 255), 2) # 显示结果 cv2.imshow("result", frame) c = cv2.waitKey(1) if c == 27: break cap.release() cv2.destroyAllWindows() |