python代码实现使用开源的人脸检测库,对采集的图像进行68点人脸检测,并使用方位检测算法检测人脸角度,并将角度显示在人脸上
时间: 2024-06-11 16:05:05 浏览: 151
Python+OpenCV 实现的人脸检测并打马赛克源码
5星 · 资源好评率100%
由于涉及到人脸检测库,需要安装对应的库,这里以dlib库为例,安装命令为:
```
pip install dlib
```
代码实现如下:
```python
import cv2
import dlib
# 加载人脸检测器
detector = dlib.get_frontal_face_detector()
# 加载68点人脸关键点检测器
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")
# 加载方位检测器
face_pose_detector = dlib.get_frontal_face_detector()
# 加载图像
img = cv2.imread("test.jpg")
# 将图像转为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 人脸检测
faces = detector(gray)
for face in faces:
# 检测68个关键点
landmarks = predictor(gray, face)
# 获取人脸角度
pose_landmarks = face_pose_detector(gray, face)
pose = face_pose_predictor(gray, pose_landmarks[0])
pitch = pose.pitch
yaw = pose.yaw
roll = pose.roll
# 在图像上显示角度信息
cv2.putText(img, f"pitch: {pitch:.1f} yaw: {yaw:.1f} roll: {roll:.1f}", (face.left(), face.top() - 20), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 1, cv2.LINE_AA)
# 在图像上绘制68个关键点
for n in range(68):
x = landmarks.part(n).x
y = landmarks.part(n).y
cv2.circle(img, (x, y), 2, (0, 255, 0), -1)
# 显示图像
cv2.imshow("img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
需要注意的是,方位检测器需要使用对应的模型文件,由于文件比较大,这里没有提供,可以在[dlib官网](http://dlib.net/files/)下载。另外,方位检测算法只是一种简单的估计,有一定误差,需要根据具体场景进行调整。
阅读全文