人脸识别 (训练数据集类别大于50,测试数据集类别大于5,每类至少3张,能实现实时识别)代码
时间: 2024-03-05 12:50:03 浏览: 13
这是一份基于Python和OpenCV库实现的人脸识别代码,可以满足你的需求。该代码使用了LBPH算法进行特征提取和识别,并且支持实时识别。
```python
import cv2
import os
import numpy as np
# 定义训练数据集路径和测试数据集路径
train_path = 'path/to/train/dataset'
test_path = 'path/to/test/dataset'
# 定义图像大小和人脸识别器
img_size = 100
recognizer = cv2.face.LBPHFaceRecognizer_create()
# 函数:读取图像和标签
def get_images_and_labels(path):
image_paths = [os.path.join(path, f) for f in os.listdir(path)]
images = []
labels = []
for image_path in image_paths:
image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
label = int(os.path.split(image_path)[1].split(".")[0].replace("subject", ""))
images.append(cv2.resize(image, (img_size, img_size)))
labels.append(label)
return images, labels
# 读取训练数据集
train_images, train_labels = get_images_and_labels(train_path)
# 训练人脸识别器
recognizer.train(train_images, np.array(train_labels))
# 读取测试数据集
test_images, test_labels = get_images_and_labels(test_path)
# 函数:实时识别人脸并显示标签
def recognize_face():
# 打开摄像头
cap = cv2.VideoCapture(0)
while True:
# 读取图像
ret, img = cap.read()
# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 识别人脸
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=5, minSize=(30, 30))
for (x, y, w, h) in faces:
# 调整人脸大小
face = cv2.resize(gray[y:y+h, x:x+w], (img_size, img_size))
# 预测人脸标签
label, confidence = recognizer.predict(face)
# 显示标签
cv2.putText(img, "Label: {}, Confidence: {:.2f}".format(label, confidence), (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 255, 0), 2)
# 绘制人脸矩形框
cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)
# 显示图像
cv2.imshow('Face Recognition', img)
# 按下'q'键退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放摄像头
cap.release()
cv2.destroyAllWindows()
# 运行实时人脸识别程序
recognize_face()
```
需要注意的是,该代码假设训练数据集和测试数据集都是以`subjectX.Y.jpg`的格式命名的,其中X表示人物编号,Y表示图像编号。例如,第1个人物的第2张图像应该命名为`subject1.2.jpg`。因此,你需要根据实际情况修改`get_images_and_labels()`函数中的代码,以适应你的数据集命名规则。此外,你还需要安装OpenCV库,并根据你的摄像头设置视频捕获设备。