手把手教你利用opencv实现人脸识别功能(附源码+文档)

下面是关于“手把手教你利用opencv实现人脸识别功能(附源码+文档)”的完整攻略。

问题描述

在进行人脸识别时,有时需要使用opencv库实现人脸识别功能。那么,如何使用opencv库实现人脸识别功能?

解决方法

以下是使用opencv库实现人脸识别功能的方法:

  1. 首先,导入必要的库:

python
import cv2
import numpy as np
import os

  1. 然后,加载人脸检测器:

python
face_cascade = cv2.CascadeClassifier('path/to/haarcascade_frontalface_default.xml')

在上面的代码中,'path/to/haarcascade_frontalface_default.xml'是人脸检测器的XML文件路径。

  1. 接着,加载人脸识别器:

python
recognizer = cv2.face.LBPHFaceRecognizer_create()
recognizer.read('path/to/trainer.yml')

在上面的代码中,'path/to/trainer.yml'是人脸识别器的训练模型路径。

  1. 最后,实现人脸识别功能:

```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键退出程序。

以下是两个示例说明:

  1. 实现人脸识别功能

首先,加载人脸检测器:

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()
```

  1. 实现人脸识别功能(带保存视频)

首先,加载人脸检测器:

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技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

合作推广
合作推广
分享本页
返回顶部