写一个基于Python_opencv人脸录入、识别系统
时间: 2024-01-16 17:03:20 浏览: 85
好的,我可以为您提供一个基于Python和OpenCV的人脸录入、识别系统的简单实现。
首先,需要安装OpenCV库和Python的相关库。可以使用以下命令安装:
```
pip install opencv-python
pip install numpy
pip install Pillow
```
接下来,我们需要进行人脸录入。实现方法如下:
1. 创建一个名为“dataset”文件夹,用于存储我们录入的人脸数据。
2. 运行以下代码:
```
import cv2
import os
# 定义一个函数来录入人脸数据
def face_dataset():
# 使用OpenCV中的Haar级联分类器来检测人脸
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# 打开摄像头
cap = cv2.VideoCapture(0)
# 输入姓名
name = input("请输入你的名字:")
# 创建一个文件夹,用于存储当前用户的人脸数据
folder_name = 'dataset/' + name
if not os.path.exists(folder_name):
os.makedirs(folder_name)
# 计数器,用于给保存的图片命名
count = 0
while True:
# 读取摄像头中的画面
ret, frame = cap.read()
# 转换为灰度图像
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 检测人脸
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
# 对每一张检测到的人脸进行处理
for (x, y, w, h) in faces:
# 截取人脸区域
roi_gray = gray[y:y+h, x:x+w]
# 将人脸保存到文件夹中
cv2.imwrite(folder_name + '/' + str(count) + '.jpg', roi_gray)
# 在摄像头画面中框出人脸
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
# 计数器加一
count += 1
# 在摄像头画面中显示人脸
cv2.imshow('frame', frame)
# 按'q'键退出循环
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放摄像头资源
cap.release()
# 关闭所有窗口
cv2.destroyAllWindows()
```
运行上述代码后,会打开摄像头,要求输入姓名,并将录入的人脸数据保存在“dataset”文件夹中。
接下来,我们需要进行人脸识别。实现方法如下:
1. 创建一个名为“trainer.yml”的文件,用于存储训练模型。
2. 运行以下代码:
```
import cv2
import numpy as np
import os
# 定义一个函数来训练人脸识别模型
def face_training():
# 使用OpenCV中的LBPH算法来训练人脸识别模型
recognizer = cv2.face_LBPHFaceRecognizer.create()
# 获取数据集中的人脸数据和标签
faces = []
labels = []
for folder_name in os.listdir('dataset'):
label = int(folder_name.split('_')[0])
for filename in os.listdir('dataset/' + folder_name):
img = cv2.imread('dataset/' + folder_name + '/' + filename, cv2.IMREAD_GRAYSCALE)
faces.append(img)
labels.append(label)
# 训练人脸识别模型
recognizer.train(faces, np.array(labels))
# 将训练好的模型保存到文件中
recognizer.save('trainer.yml')
```
运行上述代码后,会从“dataset”文件夹中读取人脸数据并训练人脸识别模型,并将模型保存到“trainer.yml”文件中。
最后,我们来进行人脸识别。实现方法如下:
```
import cv2
import numpy as np
# 定义一个函数来进行人脸识别
def face_recognition():
# 使用OpenCV中的Haar级联分类器来检测人脸
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# 加载训练好的人脸识别模型
recognizer = cv2.face.LBPHFaceRecognizer_create()
recognizer.read('trainer.yml')
# 创建一个字典,用于将标签转换为姓名
names = {
0: '张三',
1: '李四',
2: '王五',
# 依次类推
}
# 打开摄像头
cap = cv2.VideoCapture(0)
while True:
# 读取摄像头中的画面
ret, frame = cap.read()
# 转换为灰度图像
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 检测人脸
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
# 对每一张检测到的人脸进行处理
for
阅读全文