用Python写一个人脸识别
时间: 2024-03-06 09:24:22 浏览: 60
要实现人脸识别,我们可以使用Python中的OpenCV库和face_recognition库。
首先需要安装这两个库,可以通过以下命令安装:
```
pip install opencv-python
pip install face_recognition
```
然后,我们需要准备一些人脸图像作为数据集。将这些图像放在一个文件夹中,并在该文件夹中创建一个CSV文件,该文件应该包含每个图像的标签和文件名。
接下来,我们可以使用face_recognition库来处理这些图像,并将它们转换为128维的面部特征向量。我们可以将这些向量存储在一个NumPy数组中,以便稍后进行比较。
最后,我们可以使用OpenCV库来捕获视频流,检测每个帧中的人脸,并将其与我们的数据集中的面部特征向量进行比较,以识别人脸。
示例代码如下:
```python
import cv2
import face_recognition
import numpy as np
# 加载数据集
def load_dataset():
dataset = []
labels = []
with open('dataset.csv', 'r') as f:
lines = f.readlines()
for line in lines:
parts = line.strip().split(',')
labels.append(parts[0])
image = face_recognition.load_image_file(parts[1])
face_encoding = face_recognition.face_encodings(image)[0]
dataset.append(face_encoding)
return dataset, labels
# 初始化摄像头
def init_camera():
video_capture = cv2.VideoCapture(0)
return video_capture
# 识别人脸
def recognize_faces(video_capture, dataset, labels):
while True:
# 获取当前帧
ret, frame = video_capture.read()
# 转换为RGB格式
rgb_frame = frame[:, :, ::-1]
# 检测人脸
face_locations = face_recognition.face_locations(rgb_frame)
# 获取每个人脸的特征向量
face_encodings = face_recognition.face_encodings(rgb_frame, face_locations)
# 遍历每个人脸
for face_encoding, face_location in zip(face_encodings, face_locations):
# 对比数据集中的特征向量
matches = face_recognition.compare_faces(dataset, face_encoding)
# 获取匹配的标签
match_labels = [label for label, match in zip(labels, matches) if match]
# 显示人脸和标签
top, right, bottom, left = face_location
cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)
cv2.putText(frame, ', '.join(match_labels), (left, top - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2)
# 显示当前帧
cv2.imshow('Video', frame)
# 按Q键退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放摄像头
video_capture.release()
cv2.destroyAllWindows()
# 加载数据集
dataset, labels = load_dataset()
# 初始化摄像头
video_capture = init_camera()
# 识别人脸
recognize_faces(video_capture, dataset, labels)
```
在运行代码之前,需要将数据集中的图像文件和标签添加到“dataset.csv”文件中。CSV文件的格式如下:
```
label1,image1.jpg
label2,image2.jpg
label3,image3.jpg
```
然后,运行上述代码,程序将会打开摄像头并开始识别人脸。
阅读全文