OpenCV学习MediaPipe 人脸网格检测前言前面我们学习了 MediaPipe 的手部关键点检测、手势数字识别和人体姿态检测。本篇我们将进入 MediaPipe 的另一个强大模块——Face Mesh人脸网格。它能识别人脸上的478 个关键点比 dlib 的 68 个关键点更精细能覆盖五官轮廓、眼部细节、嘴唇边缘、甚至眼球等部位。这个技术可以用于虚拟试妆、面部表情分析、人脸驱动虚拟形象等场景。目录一、Face Mesh 简介二、核心参数详解三、478 个人脸关键点四、完整代码五、结果说明六、总结一、Face Mesh 简介1.1 什么是 Face MeshFace Mesh人脸网格是 MediaPipe 提供的人脸关键点检测模块能从一张人脸图片中提取478 个 3D 关键点并以网格Mesh的方式绘制出来。1.2 与 dlib 68 点的对比对比维度dlib 68 点MediaPipe Face Mesh关键点数量68 个478 个是否有眼球否有虹膜是否有 3D 坐标否有x/y/z处理速度快较快精度一般高安装依赖需要编译pip 直接安装MediaPipe Face Mesh 在关键点数量、精度、易用性上都优于 dlib 68 点。1.3 应用场景场景说明虚拟试妆精确定位嘴唇、眼影、腮红位置表情分析通过面部关键点分析情绪人脸驱动虚拟形象用真人面部动作驱动虚拟角色AR 滤镜在脸上叠加面具、贴纸等面部按摩定位穴位指导按摩位置面部识别辅助提取面部特征进行身份识别二、核心参数详解2.1 FaceMesh() 核心参数face_meshmp_face_mesh.FaceMesh(static_image_modeFalse,max_num_faces2,refine_landmarksTrue,min_detection_confidence0.5,min_tracking_confidence0.5)参数说明static_image_mode静态图像还是连续帧视频max_num_faces最多检测几个人脸refine_landmarks是否精细检测嘴唇和眼球min_detection_confidence最小检测置信度min_tracking_confidence最小跟踪置信度2.2 static_image_mode取值说明True适用于静态图片每帧独立检测False适用于视频流利用前一帧信息追踪推荐2.3 max_num_faces取值说明int最多检测的人脸数量默认为 1提示数量越大计算量越大。一般设为 1~5 即可。2.4 refine_landmarks取值说明True精细检测嘴唇和眼球关键点从 468 增至478False只检测 468 个基础关键点开启后的效果嘴唇边缘更精细增加虹膜眼球关键点更精确的眼部追踪注意refine_landmarksTrue时关键点数量是 478否则是 468。2.5 置信度参数参数说明取值范围min_detection_confidence最小检测置信度0.0 ~ 1.0min_tracking_confidence最小跟踪置信度0.0 ~ 1.0影响值越大检测越精准但响应时间越长值越小越容易检出但误检也更多。三、478 个人脸关键点3.1 关键点分布MediaPipe Face Mesh 的 478 个关键点覆盖了面部的各个部位部位关键点范围说明脸部轮廓0~16脸部外轮廓左眉17~21左眼上方右眉22~26右眼上方鼻子27~35鼻梁、鼻翼左眼36~41左眼周围右眼42~47右眼周围嘴巴外轮廓48~59嘴唇外边缘嘴巴内轮廓60~67嘴唇内边缘虹膜468~477左右眼球需开启 refine_landmarks3.2 关键点数量说明refine_landmarks关键点总数False468 个True478 个增加虹膜关键点3.3 关键点连接关系MediaPipe 提供了多种连接方式用于绘制不同风格的人脸网格连接说明FACEMESH_TESSELATION完整网格最密集FACEMESH_CONTOURS五官轮廓FACEMESH_IRISES虹膜轮廓FACEMESH_LEFT_EYE左眼轮廓FACEMESH_RIGHT_EYE右眼轮廓四、完整代码importcv2importmediapipeasmp# 初始化 MediaPipe 模块 mp_face_meshmp.solutions.face_mesh# 人脸网格模块mp_drawingmp.solutions.drawing_utils# 绘图工具mp_drawing_stylesmp.solutions.drawing_styles# 绘图风格# 设置 Face Mesh 参数face_meshmp_face_mesh.FaceMesh(static_image_modeFalse,# False 适用于视频流max_num_faces2,# 最多检测 2 张人脸refine_landmarksTrue,# 精细检测嘴唇和眼球478 个关键点min_detection_confidence0.5,# 最小检测置信度min_tracking_confidence0.5)# 最小跟踪置信度# 打开摄像头 capcv2.VideoCapture(0,cv2.CAP_DSHOW)whilecap.isOpened():success,framecap.read()ifnotsuccess:print(无法读取摄像头画面)breakh,wframe.shape[:2]# 获取图像高度和宽度# 人脸网格检测 # MediaPipe 需要 RGB 输入OpenCV 默认是 BGRframe_rgbcv2.cvtColor(frame,cv2.COLOR_BGR2RGB)# 执行检测resultsface_mesh.process(frame_rgb)# 绘制关键点 ifresults.multi_face_landmarks:forface_landmarksinresults.multi_face_landmarks:# print(len(face_landmarks.landmark)) # 478# 遍历所有关键点绘制编号foriinrange(len(face_landmarks.landmark)):xface_landmarks.landmark[i].x# 归一化 x 坐标0~1yface_landmarks.landmark[i].y# 归一化 y 坐标0~1# z face_landmarks.landmark[i].z # 深度信息# 将归一化坐标乘以图像宽高转为像素坐标cv2.putText(frame,str(i),(int(x*w),int(y*h)),cv2.FONT_HERSHEY_SIMPLEX,0.3,(0,255,0),2)# 绘制人脸网格连接线TESSELATION完整三角网格mp_drawing.draw_landmarks(imageframe,landmark_listface_landmarks,connectionsmp_face_mesh.FACEMESH_TESSELATION,landmark_drawing_specNone,connection_drawing_specmp_drawing_styles.get_default_face_mesh_tesselation_style())# 显示结果 cv2.imshow(Face Mesh,frame)# 按 ESC 键退出ifcv2.waitKey(1)27:breakcap.release()cv2.destroyAllWindows()五、结果说明5.1 关键步骤步骤说明1. 初始化模型用mp_face_mesh.FaceMesh()创建人脸网格检测器2. 打开摄像头用cv2.VideoCapture()读取视频流3. 转换格式BGR → RGBMediaPipe 要求4. 执行检测face_mesh.process()返回关键点结果5. 绘制关键点遍历 478 个关键点绘制编号6. 绘制网格用draw_landmarks()绘制三角网格5.2 三种绘制风格mp_drawing_styles提供了三种绘制风格风格说明视觉效果TESSELATION完整三角网格最密集视觉效果最好CONTOURS五官轮廓简洁突出面部轮廓IRISES虹膜轮廓突出眼球位置5.3 关键点数量说明参数关键点数量refine_landmarksFalse468 个refine_landmarksTrue478 个增加眼球关键点5.4 应用场景场景说明虚拟试妆精确定位嘴唇、眼影、腮红位置表情分析通过面部关键点分析情绪人脸驱动虚拟形象用真人面部动作驱动虚拟角色AR 滤镜在脸上叠加面具、贴纸等眼球追踪通过虹膜关键点分析视线方向六、总结核心函数速查函数用途mp.solutions.face_mesh.FaceMesh(...)初始化人脸网格检测器face_mesh.process(frame)处理图像返回关键点结果results.multi_face_landmarks获取多张人脸的关键点mp_drawing.draw_landmarks()绘制关键点和网格连接线mp_drawing_styles.get_default_face_mesh_tesselation_style()获取网格绘制风格核心参数速查参数默认值说明static_image_modeFalseTrue 适合图片False 适合视频max_num_faces1最大检测人脸数refine_landmarksFalseTrue 时关键点从 468 增至 478min_detection_confidence0.5最小检测置信度min_tracking_confidence0.5最小跟踪置信度关键点连接类型速查连接类型说明FACEMESH_TESSELATION完整三角网格FACEMESH_CONTOURS五官轮廓FACEMESH_IRISES虹膜轮廓FACEMESH_LEFT_EYE左眼轮廓FACEMESH_RIGHT_EYE右眼轮廓注意事项要点说明图像格式MediaPipe 需要 RGB 输入OpenCV 默认 BGR需要转换坐标归一化关键点坐标是 0~1 的归一化值需乘以图像宽高关键点数量refine_landmarksTrue时是 478否则是 468处理速度478 个关键点计算量较大可考虑降低分辨率绘制风格不同连接类型对应不同绘制风格注意匹配系列直达上篇OpenCV学习MediaPipe 人体姿态检测本篇OpenCV学习MediaPipe 人脸网格检测本文下篇敬请期待