用python写一个人脸识别功能
时间: 2024-06-12 19:08:22 浏览: 16
由于人脸识别需要用到深度学习等比较复杂的技术,需要涉及到大量的数据集和模型训练等步骤,因此,需要使用一些开源的人脸识别库来实现此功能,以下是一个基于OpenCV和Dlib库实现的人脸识别程序。
首先,需要安装OpenCV和Dlib库,可以使用pip命令进行安装:
pip install opencv-python
pip install dlib
然后,需要准备一些人脸图像作为训练数据,可以从开源数据集中下载,例如LFW、CASIA-WebFace等。
下面是一个简单的人脸识别程序,在程序中,我们使用Dlib库提供的人脸检测和特征点定位功能,将检测到的人脸图像进行预处理,然后使用OpenCV库提供的图像处理功能进行显示和保存。
import cv2
import dlib
# 加载人脸检测器
detector = dlib.get_frontal_face_detector()
# 加载特征点定位器
predictor = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat')
# 加载人脸识别模型
facerec = dlib.face_recognition_model_v1('dlib_face_recognition_resnet_model_v1.dat')
# 加载训练数据
faces = []
labels = []
for i in range(1, 5):
img = cv2.imread('train/{}.jpg'.format(i))
# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 检测人脸
rects = detector(gray, 1)
# 获取特征点
shape = predictor(gray, rects[0])
# 获取人脸特征
face_descriptor = facerec.compute_face_descriptor(img, shape)
# 添加到训练数据中
faces.append(face_descriptor)
labels.append(i)
# 创建一个KNN分类器
knn = cv2.ml.KNearest_create()
knn.train(faces, cv2.ml.ROW_SAMPLE, labels)
# 加载测试图像
img = cv2.imread('test/1.jpg')
# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 检测人脸
rects = detector(gray, 1)
for rect in rects:
# 获取特征点
shape = predictor(gray, rect)
# 获取人脸特征
face_descriptor = facerec.compute_face_descriptor(img, shape)
# 使用KNN分类器进行识别
ret, result, neighbours, dist = knn.findNearest([face_descriptor], k=1)
# 绘制人脸框
cv2.rectangle(img, (rect.left(), rect.top()), (rect.right(), rect.bottom()), (0, 255, 0), 2)
# 显示识别结果
cv2.putText(img, str(int(result)), (rect.left(), rect.top() - 10), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
# 显示图像
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行程序后,会显示测试图像中检测到的人脸框和对应的识别结果。这个程序只是一个简单的示例,实际应用中需要根据具体需求进行改进和优化。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)