【深度学习】dlib 人脸关键点检测

📅 2026/7/12 8:00:52 👤 编程新知 🏷️ 技术资讯
【深度学习】dlib 人脸关键点检测 文章目录完整代码一览安装 dlib 与下载模型安装 dlib下载 68 点关键点模型导入库读取图像创建人脸检测器执行人脸检测加载关键点预测器遍历每个人脸并提取关键点绘制关键点并标注序号显示结果68 个关键点的编号与分布完整代码一览import numpy as np import cv2 import dlib imgcv2.imread(pyy.png)detectordlib.get_frontal_face_detector()facesdetector(img,0)predictordlib.shape_predictor(shape_predictor_68_face_landmarks.dat)forface in faces:shapepredictor(img,face)landmarknp.array([[p.x,p.y]forp in shape.parts()])foridx,point inenumerate(landmark):pos[point[0],point[1]]cv2.circle(img,pos,2,(0,255,0),1)cv2.putText(img,str(idx),pos,cv2.FONT_HERSHEY_SIMPLEX,0.4,(255,255,255),1,cv2.LINE_AA)cv2.imshow(img,img)cv2.waitKey(0)cv2.destroyAllWindows()安装 dlib 与下载模型安装 dlibdlib各版本下载地址Links for dlib进入下载文件的存放位置比如D:\Edge\在搜索栏输入cmd输入命令pip install dlib-19.6.0-cp36-cp36m-win_amd64.whl下载完成。cp36是python3.6版本的cp35是python3.5版本的。下载完成后调用运行命令 pip install dlib19.6.1下载 68 点关键点模型代码需要加载 shape_predictor_68_face_landmarks.dat这是 dlib 官方预训练好的模型。下载地址68 点关键点模型下载后解压将 .dat 文件放在与 Python 脚本相同的文件夹中。导入库import numpy as np import cv2 import dlib #提供人脸检测和关键点预测功能读取图像imgcv2.imread(pyy.png)创建人脸检测器detectordlib.get_frontal_face_detector()该函数返回一个基于 HOG方向梯度直方图和线性 SVM 的人脸检测器它对正面和侧面人脸都有较好的检测效果且速度较快。执行人脸检测facesdetector(img,0)detector(img, 0) 对图像进行人脸检测。第二个参数 0 表示不进行图像上采样upsample即使用原始尺寸进行检测。如果你想检测更小的人脸可以增加这个值如 1 表示上采样一次但会降低速度。加载关键点预测器predictordlib.shape_predictor(shape_predictor_68_face_landmarks.dat)加载预训练模型能够输出稳定、精准的 68 个关键点坐标。遍历每个人脸并提取关键点forface in faces:shapepredictor(img,face)landmarknp.array([[p.x,p.y]forp in shape.parts()])对于每个人脸调用 predictor(img, face) 得到 shape 对象它包含 parts() 方法返回一个包含 68 个点的列表。列表推导式 [p.x, p.y] for p in shape.parts() 将每个点转换为 (x, y) 元组再转换成 NumPy 数组便于后续遍历。绘制关键点并标注序号foridx,point inenumerate(landmark):pos[point[0],point[1]]cv2.circle(img,pos,2,(0,255,0),1)cv2.putText(img,str(idx),pos,cv2.FONT_HERSHEY_SIMPLEX,0.4,(255,255,255),1,cv2.LINE_AA)enumerate 遍历每个点idx 是索引0~67point 是坐标数组。cv2.circle 在点位置画一个绿色小圆点(0,255,0)半径 2线宽 1。cv2.putText 在点旁边显示索引数字字体大小 0.4白色抗锯齿渲染。显示结果cv2.imshow(img,img)cv2.waitKey(0)cv2.destroyAllWindows()显示标注后的图像按任意键关闭窗口。运行结果68 个关键点的编号与分布了解每个编号对应的部位能帮你更好地利用这些点编号 部位描述0 ~ 16 下巴轮廓从右到左环绕17 ~ 21 左眼眉毛22 ~ 26 右眼眉毛27 ~ 30 鼻梁从眉心到鼻尖31 ~ 35 鼻翼和鼻孔36 ~ 41 左眼6 个点42 ~ 47 右眼6 个点48 ~ 59 外嘴唇轮廓60 ~ 67 内嘴唇嘴巴张开时可见你可以根据这些编号提取特定部位例如计算眼睛的宽高比EAR来判断眨眼或计算嘴巴的张开程度。后续可以通过计算眼睛的宽高比对人脸进行疲劳检测。