摄像头人脸识别和对比代码
时间: 2023-10-30 11:06:12 浏览: 71
这里提供一个Python的示例代码,用于使用OpenCV库进行摄像头人脸识别和对比。代码中使用了Haar级联分类器来检测人脸,使用LBPH算法进行人脸识别和对比。
```python
import cv2
import os
# 加载人脸识别模型
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
recognizer = cv2.face.LBPHFaceRecognizer_create()
# 加载训练好的人脸数据
face_data_dir = 'face_data'
face_images = []
face_labels = []
for dir_name in os.listdir(face_data_dir):
if dir_name.startswith('.'):
continue
label = int(dir_name)
for image_name in os.listdir(os.path.join(face_data_dir, dir_name)):
if image_name.startswith('.'):
continue
image_path = os.path.join(face_data_dir, dir_name, image_name)
image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
face_images.append(image)
face_labels.append(label)
recognizer.train(face_images, np.array(face_labels))
# 打开摄像头
cap = cv2.VideoCapture(0)
while True:
# 读取摄像头的一帧
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 检测人脸
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
# 对每个检测到的人脸进行识别
for (x, y, w, h) in faces:
# 绘制人脸框
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
# 对人脸进行识别
roi_gray = gray[y:y+h, x:x+w]
label, confidence = recognizer.predict(roi_gray)
# 显示识别结果
if confidence < 100:
name = 'person ' + str(label)
else:
name = 'unknown'
cv2.putText(frame, name, (x, y-20), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2, cv2.LINE_AA)
cv2.putText(frame, str(round(confidence, 2)), (x, y+h+20), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2, cv2.LINE_AA)
# 显示帧
cv2.imshow('Face Recognition', frame)
# 按下Esc键退出
if cv2.waitKey(1) == 27:
break
# 释放摄像头和窗口
cap.release()
cv2.destroyAllWindows()
```
在这个示例代码中,我们首先加载了Haar级联分类器用于检测人脸,以及使用LBPH算法训练好的人脸数据。然后我们打开摄像头,读取一帧图像,检测其中的人脸,并对每个人脸进行识别和对比,最后显示识别结果。注意,在这个示例代码中的人脸数据是事先准备好的,如果你需要进行实时的人脸采集和训练,你需要另外编写代码来完成这个任务。
阅读全文