目录
本代码将使用dlib库检测图像中的人脸,并标出人脸上的68个关键点(如眼角、鼻尖等)。
1.读取图片
import numpy as np
import cv2
import dlib
img = cv2.imread("woman.png")
2.创建并使用检测器
detector = dlib.get_frontal_face_detector()
# 创建一个dlib的人脸检测器
faces = detector(img, 0)
# 使用人脸检测器检测img中的所有人脸,并将检测到的人脸矩形框存储在变量faces中
# 参数0表示不进行上采样
3.加载预测器
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")
# 加载一个预先训练好的形状预测器模型,该模型能够预测人脸关键点的位置
4.获取并绘制关键点
for face in faces: #获取每张脸的关键点(实现检测)
shape = predictor(img, face) # 获取关键点
landmarks = np.matrix([[p.x, p.y] for p in shape.parts()]) # 将关键点转换为坐标(x, y)的形式
# 绘制shape中的每个点
for idx, point in enumerate(landmarks): # 枚举
pos = (point[0, 0], point[0, 1]) # 当前关键的坐标
cv2.circle(img, pos, 2, color = (0, 255, 0))
# 在图像img上,以关键点坐标为中心画一个半径为2的圆,颜色为绿色
font = cv2.FONT_HERSHEY_SIMPLEX # 字体
cv2.putText(img, str(idx), pos, font, 0.4, (255, 255, 255), 1, cv2.LINE_AA)
# 在关键点旁边绘制文本,文本内容是关键点的索引idx,使用白色,大小为0.4倍字体大小
5.绘制图像
cv2.imshow("img", img)
cv2.waitKey()
cv2.destroyAllWindows()