5、MediaPipe开发

mediapipe github:https://github.com/google/mediapipe

mediapipe 官网:https://google.github.io/mediapipe/

dlib 官网:http://dlib.net/

dlib github:https://github.com/davisking/dlib

5.1、简介

MediaPipe是一款由Google开发并开源的数据流处理机器学习应用开发框架。它是一个基于图的数据处理管线,用于构建使用了多种形式的数据源,如视频、音频、传感器数据以及任何时间序列数据。 MediaPipe是跨平台的,可以运行在嵌入式平台(树莓派等),移动设备(iOS和Android),工作站和服务器上,并支持移动端GPU加速。 MediaPipe为实时和流媒体提供跨平台、可定制的ML解决方案。

MediaPipe 的核心框架由 C++ 实现,并提供 Java 以及 Objective C 等语言的支持。MediaPipe 的主要概念包括数据包(Packet)、数据流(Stream)、计算单元(Calculator)、图(Graph)以及子图(Subgraph)。

MediaPipe的特点:

MediaPipe中的深度学习解决方案

Face DetectionFace MeshIrisHandsPoseHolistic
face_detectionface_meshirishandposehair_segmentation
Hair SegmentationObject DetectionBox TrackingInstant Motion TrackingObjectronKNIFT
hair_segmentationobject_detectionbox_trackinginstant_motion_trackingobjectronknift
 AndroidiOSC++PythonJSCoral
Face Detection
Face Mesh 
Iris   
Hands 
Pose 
Holistic 
Selfie Segmentation 
Hair Segmentation    
Object Detection  
Box Tracking   
Instant Motion Tracking     
Objectron  
KNIFT     
AutoFlip     
MediaSequence     
YouTube 8M     

5.2、使用

如果使用的是单目相机或者树莓派CSI相机则分别需要将

01_HandDetector_usb.py、02_PoseDetector_usb.py、03_Holistic_usb.py、04_FaceMesh_usb.py、05_FaceEyeDetection_usb.py名称改成01_HandDetector.py、02_PoseDetector.py、03_Holistic.py、04_FaceMesh.py、05_FaceEyeDetection.py

如果使用的是jetson CSI相机则分别需要将

01_HandDetector_csi.py、02_PoseDetector_csi.py、03_Holistic_csi.py、04_FaceMesh_csi.py、05_FaceEyeDetection_csi.py名称改成01_HandDetector.py、02_PoseDetector.py、03_Holistic.py、04_FaceMesh.py、05_FaceEyeDetection.py

在使用过程中,需注意的有

01、手部检测image-20220302141320102
02、姿态检测image-20220302142121625
03、整体检测image-20220302142355218
04、面部检测image-20220302143734631
05、人脸识别06、人脸特效07、人脸检测
image-20220302143242074image-20220302144840935image-20220302145204848
08、三维物体识别 09、画笔
image-20220302145503026 image-20220302145800776
10、手指控制image-20220302145908363
11、手势识别image-20220302150312408

5.3、MediaPipe Hands

MediaPipe Hands是一款高保真的手和手指跟踪解决方案。它利用机器学习(ML)从一帧中推断出21个手的3D坐标。

在对整个图像进行手掌检测后,根据手部标记模型通过回归对检测到的手区域内的21个3D手关节坐标进行精确的关键点定位,即直接坐标预测。该模型学习一致的内部手姿势表示,甚至对部分可见的手和自我遮挡也具有鲁棒性。

为了获得地面真实数据,用了21个3D坐标手动注释了约30K幅真实世界的图像,如下所示(从图像深度图中获取Z值,如果每个对应坐标都有Z值)。为了更好地覆盖可能的手部姿势,并对手部几何体的性质提供额外的监督,还绘制了各种背景下的高质量合成手部模型,并将其映射到相应的3D坐标。

hand_landmarks

5.4、MediaPipe Pose

MediaPipe Pose是一个用于高保真身体姿势跟踪的ML解决方案,利用BlazePose研究,从RGB视频帧推断出33个3D坐标和全身背景分割遮罩,该研究也为ML Kit姿势检测API提供了动力。

MediaPipe姿势中的地标模型预测了33个姿势坐标的位置(参见下图)。

pose_tracking_full_body_landmarks

5.5、dlib

对应的案例是人脸特效。

DLIB是一个现代C++工具包,包含机器学习算法和工具,用于在C++中创建复杂的软件来解决现实世界问题。它被工业界和学术界广泛应用于机器人、嵌入式设备、移动电话和大型高性能计算环境等领域。

dlib库采用68点位置标志人脸重要部位,比如18-22点标志右眉毛,51-68标志嘴巴。使用dlib库的get_frontal_face_detector模块探测出人脸,使用shape_predictor_68_face_landmarks.dat特征数据预测人脸特征数值

face_landmarks