基于 dlib68 点人脸关键点检测绘制人脸轮廓与五官凸包(完整代码 + 详解)
目录一、项目介绍二、环境安装三、完整可运行代码四、代码核心模块详解1. drawline 连续连线函数2. drawConvexHull 凸包绘制函数3. dlib 68 关键点分区对照表代码用到部分五、运行常见报错解决报错 1找不到 shape_predictor_68_face_landmarks.dat报错 2图片读取为空 (imageNone)报错 3dlib 安装失败六、拓展优化方向七、效果说明一、项目介绍本文使用dlib68 个人脸特征点检测器 OpenCV 实现人脸关键点可视化绘制脸部外轮廓、左右眉毛、鼻梁轮廓连线对左右眼睛、外嘴唇、内嘴唇求取凸包并绘制闭合轮廓依赖numpy、dlib、opencv-python需提前下载 68 点特征预测模型文件二、环境安装pip install numpy dlib opencv-python注意dlib 安装失败可先安装 cmake、vs 编译工具 模型文件下载shape_predictor_68_face_landmarks.dat解压后和代码放同一目录三、完整可运行代码import numpy as np import dlib import cv2 def drawline(start, end): 绘制连续关键点连线 :param start: 起始关键点索引 :param end: 结束关键点索引 # 截取对应区间关键点 pts shape[start:end] # 依次连接相邻点 for l in range(1, len(pts)): ptA tuple(pts[l - 1]) ptB tuple(pts[l]) # 绿色线条线宽2 cv2.line(image, ptA, ptB, (0, 255, 0), 2) def drawConvexHull(start, end): 对指定区间关键点绘制凸包闭合轮廓眼/嘴使用 :param start: 起始关键点索引 :param end: 结束关键点索引 # 截取五官关键点 Facial shape[start:end 1] # 计算凸包 mouthHull cv2.convexHull(Facial) # 绘制凸包轮廓-1表示填充所有轮廓 cv2.drawContours(image, [mouthHull], -1, (0, 255, 0), 2) # 1. 读取图片 image cv2.imread(zjj1.jpg) # 2. 初始化dlib人脸检测器 detector dlib.get_frontal_face_detector() # 第二个参数0代表不做图像上采样速度更快设1精度更高速度慢 faces detector(image, 0) # 3. 加载68点关键点预测器 predictor dlib.shape_predictor(shape_predictor_68_face_landmarks.dat) # 遍历检测到的所有人脸 for face in faces: # 获取当前人脸68个关键点 shape predictor(image, face) # 将dlib关键点对象转为numpy数组 [[x1,y1],[x2,y2]...] shape np.array([[p.x, p.y] for p in shape.parts()]) # 绘制五官凸包 drawConvexHull(36, 41) # 左眼凸包 drawConvexHull(42, 47) # 右眼凸包 drawConvexHull(48, 59) # 外嘴唇凸包 drawConvexHull(60, 67) # 内嘴唇凸包 # 绘制人脸连续轮廓线 drawline(0, 17) # 下颌轮廓下巴脸颊下半部分 drawline(17, 22) # 右眉毛 drawline(22, 27) # 左眉毛 drawline(27, 36) # 鼻梁鼻底轮廓 # 窗口展示结果 cv2.imshow(frame, image) # 等待任意按键退出 cv2.waitKey() # 销毁所有窗口 cv2.destroyAllWindows()四、代码核心模块详解1. drawline 连续连线函数功能把一段连续的 68 点依次用直线连接用于脸部、眉毛、鼻梁这类长条连续区域。 逻辑切片取出start~end所有关键点循环相邻两个点调用cv2.line绘制绿色线段2. drawConvexHull 凸包绘制函数眼睛、嘴唇是闭合环形区域单纯连线会有凹陷使用凸包包裹整个五官区域cv2.convexHull计算点集最小凸多边形cv2.drawContours画出闭合凸包轮廓3. dlib 68 关键点分区对照表代码用到部分表格索引区间对应部位绘制方式0~17下颌脸颊直线连线17~22右眉直线连线22~27左眉直线连线27~36鼻子轮廓直线连线36~41左眼凸包42~47右眼凸包48~59外唇凸包60~67内唇凸包五、运行常见报错解决报错 1找不到 shape_predictor_68_face_landmarks.dat解决下载官方 68 点模型将 dat 文件和.py代码放在同一个文件夹或传入绝对路径如predictor dlib.shape_predictor(C:/xxx/shape_predictor_68_face_landmarks.dat)报错 2图片读取为空 (imageNone)图片文件名写错区分大小写图片和代码不在同一目录使用绝对路径读取图片损坏更换 jpg/png 图片测试报错 3dlib 安装失败Windows先安装 VS2019/2022 C 开发组件、cmakepip install cmake pip install dlib六、拓展优化方向更换线条颜色、粗细区分五官眼睛蓝色、嘴唇红色循环遍历摄像头实时人脸关键点检测cv2.VideoCapture提取眼 / 嘴关键点坐标做疲劳检测、表情识别增加关键点圆点绘制直观看到 68 个点位七、效果说明运行后弹出窗口人脸区域会用绿色线条画出脸部、眉毛、鼻梁双眼、嘴唇会自动生成闭合凸包轮廓完整勾勒人脸五官结构。