用python做人脸识别的程序怎么做_手把手教你用Python实现人脸识别
时间: 2023-10-20 17:07:37 浏览: 122
基于python的神经网络识别人脸性别
人脸识别是一种非常实用的技术,可以广泛应用于安防、门禁、签到等领域。在Python中,我们可以使用OpenCV库来实现人脸识别。
以下是一个简单的手把手教程,帮助您使用Python和OpenCV实现人脸识别:
1. 安装OpenCV库
在命令行中输入以下命令来安装OpenCV库:
```
pip install opencv-python
```
2. 收集人脸数据
首先,我们需要收集一些人脸数据,用于训练我们的人脸识别模型。可以使用OpenCV中内置的`cv2.face.createFisherFaceRecognizer()`方法来训练模型。以下是一个收集人脸数据的代码示例:
```python
import cv2
import os
# 创建一个人脸识别器
recognizer = cv2.face.createFisherFaceRecognizer()
# 收集人脸数据
def collect_faces():
# 从摄像头中捕捉图像
camera = cv2.VideoCapture(0)
# 循环收集人脸数据
count = 0
while True:
# 读取一帧图像
ret, image = camera.read()
# 转换为灰度图像
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 检测人脸
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=5)
# 在图像中标记人脸
for (x, y, w, h) in faces:
cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
# 保存人脸数据
count += 1
cv2.imwrite("image%d.jpg" % count, gray[y:y+h,x:x+w])
# 显示图像
cv2.imshow("Collecting Faces", image)
# 按下ESC键退出
if cv2.waitKey(1) == 27:
break
# 清理资源
camera.release()
cv2.destroyAllWindows()
# 训练人脸识别模型
def train_model():
# 加载人脸数据
images = []
labels = []
for filename in os.listdir("."):
if filename.startswith("image"):
label = int(filename.split(".")[0].replace("image", ""))
image = cv2.imread(filename, cv2.IMREAD_GRAYSCALE)
images.append(image)
labels.append(label)
# 训练人脸识别器
recognizer.train(images, np.array(labels))
# 收集人脸数据
collect_faces()
# 训练人脸识别模型
train_model()
```
3. 进行人脸识别
现在,我们已经训练好了一个人脸识别模型,可以使用它来进行人脸识别了。以下是一个简单的人脸识别代码示例:
```python
import cv2
# 加载人脸识别器
recognizer = cv2.face.createFisherFaceRecognizer()
recognizer.load("model.xml")
# 进行人脸识别
def recognize_face():
# 从摄像头中捕捉图像
camera = cv2.VideoCapture(0)
# 循环进行人脸识别
while True:
# 读取一帧图像
ret, image = camera.read()
# 转换为灰度图像
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 检测人脸
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=5)
# 对每个人脸进行识别
for (x, y, w, h) in faces:
# 标记人脸
cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
# 进行人脸识别
label, confidence = recognizer.predict(gray[y:y+h,x:x+w])
print("Label: %d, Confidence: %.2f" % (label, confidence))
# 显示图像
cv2.imshow("Recognizing Faces", image)
# 按下ESC键退出
if cv2.waitKey(1) == 27:
break
# 清理资源
camera.release()
cv2.destroyAllWindows()
# 进行人脸识别
recognize_face()
```
以上代码示例仅仅只是一个简单的例子,实际应用中还需要进行更多的优化和改进。
阅读全文