MediaPipe是一个机器学习(MachineLearning)视觉算法工具库,我们已经体验过它的手势识别与跟踪功能,它的“面部网格”(FaceMesh)识别应用可以快速地从图像或视频画面中进行人脸的3D网格重建,实时检测人脸的468个关键点以及10个瞳孔关键点。
你可以对比GitHub中这张标注有478个关键点的人脸模型网格可视化示意图(https://github.com/google/mediapipe/blob/master/mediapipe/modules/face_geometry/data/canonical_face_model_uv_visualization.png),了解面部各个关键点,比如上嘴唇的中上为0、鼻子的中间为2、眉心处为8,脸的正中顶端是10、底端下巴尖为152,左右两侧则分别为234和454……每一组相邻的三个标注点均通过连线构成一个三角形,因此被称为“面部网格”(如图1)。
下面我们分别测试对静态图像文件和摄像头监控画面中的人脸进行“面部网格”识别的效果。

1.识别图像文件的人脸
首先,导入OpenCV和MediaPipe库模块:“importcv2”、“importmediapipeasmp”;接着,调用与配置人脸关键点的检测模型,建立变量mp_face_mesh,赋值为“mp.solutions.face_mesh”;再建立变量model,赋值为“mp_face_mesh.FaceMesh(static_image_mode=True,refine_landmarks=True,max_num_faces=5,min_detection_confidence=0.5,min_tracking_confidence=0.5,)”;其中的“static_image_mode”参数的值为True表示检测模式为静态图像(检测视频时应该设置为False),“refine_landmarks”参数的值为True表示对嘴唇、眼睛和瞳孔等关键点进行精细定位,“max_num_faces”参数表示每次最多检测的人脸数目为5;“min_detection_confidence”和“min_tracking_confidence”参数的值均为0.5,分别表示置信度和追踪的阈值(越接近1越精准)。

