python代码实现对图像进行68点人脸检测,通过计算每只眼睛的中心以及眼睛质心之间的角度来计算人脸倾斜角度并显示在图像上
时间: 2023-09-16 22:10:24 浏览: 66
以下是使用dlib库实现的Python代码:
```python
import cv2
import dlib
import math
# 加载人脸检测器和关键点检测器
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat')
# 加载图像
img = cv2.imread('test.jpg')
# 将图像转换为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 检测人脸
faces = detector(gray)
# 遍历每个人脸
for face in faces:
# 获取关键点
landmarks = predictor(gray, face)
# 获取左眼中心
left_eye_x = (landmarks.part(36).x + landmarks.part(39).x) // 2
left_eye_y = (landmarks.part(36).y + landmarks.part(39).y) // 2
# 获取右眼中心
right_eye_x = (landmarks.part(42).x + landmarks.part(45).x) // 2
right_eye_y = (landmarks.part(42).y + landmarks.part(45).y) // 2
# 计算眼睛质心
eye_center_x = (left_eye_x + right_eye_x) // 2
eye_center_y = (left_eye_y + right_eye_y) // 2
# 计算眼睛质心与左眼中心之间的角度
angle = math.atan2(left_eye_y - eye_center_y, left_eye_x - eye_center_x) * 180 / math.pi
# 在图像上标出眼睛中心和眼睛质心
cv2.circle(img, (left_eye_x, left_eye_y), 2, (0, 255, 0), -1)
cv2.circle(img, (right_eye_x, right_eye_y), 2, (0, 255, 0), -1)
cv2.circle(img, (eye_center_x, eye_center_y), 2, (0, 0, 255), -1)
# 在图像上显示人脸倾斜角度
cv2.putText(img, 'Angle: {:.2f}'.format(angle), (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)
# 显示图像
cv2.imshow('Image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
其中,`shape_predictor_68_face_landmarks.dat`是dlib库预训练好的68点人脸关键点检测模型,可以从dlib官网下载。`left_eye_x`和`left_eye_y`是左眼中心的坐标,`right_eye_x`和`right_eye_y`是右眼中心的坐标,`eye_center_x`和`eye_center_y`是眼睛质心的坐标。`angle`是眼睛质心与左眼中心之间的角度,可以用来计算人脸的倾斜角度。最后,使用`cv2.putText()`函数将人脸倾斜角度显示在图像上。
阅读全文