下面是关于“手把手教你利用opencv实现人脸识别功能(附源码+文档)”的完整攻略。
问题描述
在进行人脸识别时,有时需要使用opencv库实现人脸识别功能。那么,如何使用opencv库实现人脸识别功能?
解决方法
以下是使用opencv库实现人脸识别功能的方法:
- 首先,导入必要的库:
python
import cv2
import numpy as np
import os
- 然后,加载人脸检测器:
python
face_cascade = cv2.CascadeClassifier('path/to/haarcascade_frontalface_default.xml')
在上面的代码中,'path/to/haarcascade_frontalface_default.xml'是人脸检测器的XML文件路径。
- 接着,加载人脸识别器:
python
recognizer = cv2.face.LBPHFaceRecognizer_create()
recognizer.read('path/to/trainer.yml')
在上面的代码中,'path/to/trainer.yml'是人脸识别器的训练模型路径。
- 最后,实现人脸识别功能:
```python
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)
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
id_, confidence = recognizer.predict(gray[y:y + h, x:x + w])
if confidence >= 45:
font = cv2.FONT_HERSHEY_SIMPLEX
name = "Unknown"
else:
font = cv2.FONT_HERSHEY_SIMPLEX
name = "Person " + str(id_)
cv2.putText(img, name, (x, y + h), font, 1, (0, 255, 0), 2, cv2.LINE_AA)
cv2.imshow('img', img)
if cv2.waitKey(1) == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
```
在上面的代码中,我们使用while循环读取摄像头中的每一帧,并使用人脸检测器检测人脸出现的位置。如果检测到人脸,就使用人脸识别器识别人脸,并在视频帧中绘制一个矩形框和人脸识别结果。最后,使用imshow函数显示视频帧,并使用waitKey函数等待用户按下键盘上的q键退出程序。
以下是两个示例说明:
- 实现人脸识别功能
首先,加载人脸检测器:
python
face_cascade = cv2.CascadeClassifier('path/to/haarcascade_frontalface_default.xml')
然后,加载人脸识别器:
python
recognizer = cv2.face.LBPHFaceRecognizer_create()
recognizer.read('path/to/trainer.yml')
最后,实现人脸识别功能:
```python
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)
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
id_, confidence = recognizer.predict(gray[y:y + h, x:x + w])
if confidence >= 45:
font = cv2.FONT_HERSHEY_SIMPLEX
name = "Unknown"
else:
font = cv2.FONT_HERSHEY_SIMPLEX
name = "Person " + str(id_)
cv2.putText(img, name, (x, y + h), font, 1, (0, 255, 0), 2, cv2.LINE_AA)
cv2.imshow('img', img)
if cv2.waitKey(1) == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
```
- 实现人脸识别功能(带保存视频)
首先,加载人脸检测器:
python
face_cascade = cv2.CascadeClassifier('path/to/haarcascade_frontalface_default.xml')
然后,加载人脸识别器:
python
recognizer = cv2.face.LBPHFaceRecognizer_create()
recognizer.read('path/to/trainer.yml')
接着,创建视频写入对象:
python
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi', fourcc, 20.0, (640, 480))
最后,实现人脸识别功能:
```python
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)
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
id_, confidence = recognizer.predict(gray[y:y + h, x:x + w])
if confidence >= 45:
font = cv2.FONT_HERSHEY_SIMPLEX
name = "Unknown"
else:
font = cv2.FONT_HERSHEY_SIMPLEX
name = "Person " + str(id_)
cv2.putText(img, name, (x, y + h), font, 1, (0, 255, 0), 2, cv2.LINE_AA)
out.write(img)
cv2.imshow('img', img)
if cv2.waitKey(1) == ord('q'):
break
cap.release()
out.release()
cv2.destroyAllWindows()
```
在上面的代码中,我们创建了一个名为output.avi的视频文件,并使用VideoWriter对象将每一帧写入该文件中。
结论
在本攻中,我们介绍了使用opencv库实现人脸识别功能的方法,并提供了两个示例说明。可以根据具体的需求选择不同的人脸检测器XML文件路径、人脸识别器训练模型路径、视频帧大小等参数。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:手把手教你利用opencv实现人脸识别功能(附源码+文档) - Python技术站