MediaPipe开发
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
1.简介
MediaPipe是一款由Google开发并开源的数据流处理机器学习应用开发框架。它是一个基于图的数据处理管线,用于构建使用了多种形式的数据源,如视频、音频、传感器数据以及任何时间序列数据。 MediaPipe是跨平台的,可以运行在嵌入式平台(树莓派等),移动设备(iOS和Android),工作站和服务器上,并支持移动端GPU加速。 MediaPipe为实时和流媒体提供跨平台、可定制的ML解决方案。
MediaPipe 的核心框架由 C++ 实现,并提供 Java 以及 Objective C 等语言的支持。MediaPipe 的主要概念包括数据包(Packet)、数据流(Stream)、计算单元(Calculator)、图(Graph)以及子图(Subgraph)。
MediaPipe的特点:
端到端加速:内置的快速ML推理和处理即使在普通硬件上也能加速。
一次构建,随时随地部署:统一解决方案适用于Android、iOS、桌面/云、web和物联网。
即用解决方案:展示框架全部功能的尖端ML解决方案。
免费开源:Apache2.0下的框架和解决方案,完全可扩展和定制。
MediaPipe中的深度学习解决方案
2.使用
这里只示范py文件的案例。
cd ~/med_test/scripts (此文件在附件里面提供)
python3 01_FaceLandmarks.py # 人脸特效
python3 02_FaceDetection.py # 人脸检测
python3 03_Objectron.py # 三维物体识别
python3 04_VirtualPaint.py # 画笔
python3 05_HandCtrl.py # 手指控制
python3 06_GestureRecognition.py # 手势识别
在使用过程中,需要把附件中的module下的文件复制到/home/nvidia/.local/lib/python3.8/site-packages/mediapipe/modules/objectron
手部检测、姿态检测、整体检测、面部检测均具备点云查看功能,以面部检测为例。
所有功能按”ctrl+c””为退出。
整体检测:包括手部、脸部、身体姿态检测。
三维物体识别:可识别的物体有:【'Shoe', 'Chair', 'Cup', 'Camera'】,一共4类;点击【f键】切换识别物体;jetson系列不可用键盘按键,切换识别物体需改源码中的【self.index】参数。
画笔:右手食指和中指合并时是选择状态,同时弹出颜色选框,两指尖移动到对应颜色位置时,选中该颜色(黑色为橡皮擦);食指和中指分开始是绘画状态,可在画板上任意绘制。
手指控制:点击【f键】切换识别效果。
手指识别:以右手为准设计的手势识别,满足特定条件时,均可以准确识别。可识别的手势有:【Zero、One、Two、Three、Four、Five、Six、Seven、Eight、Ok、Rock、Thumb_up(点赞)、Thumb_down(拇指向下)、Heart_single(单手比心)】,一共14类。
注意:这几个案例都是在CSI板载摄像头上使用的,要是想用usb摄像头可以修改程序里面的capture改成下图这样。
3.MediaPipe Hands
MediaPipe Hands是一款高保真的手和手指跟踪解决方案。它利用机器学习(ML)从一帧中推断出21个手的3D坐标。
在对整个图像进行手掌检测后,根据手部标记模型通过回归对检测到的手区域内的21个3D手关节坐标进行精确的关键点定位,即直接坐标预测。该模型学习一致的内部手姿势表示,甚至对部分可见的手和自我遮挡也具有鲁棒性。
为了获得地面真实数据,用了21个3D坐标手动注释了约30K幅真实世界的图像,如下所示(从图像深度图中获取Z值,如果每个对应坐标都有Z值)。为了更好地覆盖可能的手部姿势,并对手部几何体的性质提供额外的监督,还绘制了各种背景下的高质量合成手部模型,并将其映射到相应的3D坐标。
4.MediaPipe Pose
MediaPipe Pose是一个用于高保真身体姿势跟踪的ML解决方案,利用BlazePose研究,从RGB视频帧推断出33个3D坐标和全身背景分割遮罩,该研究也为ML Kit姿势检测API提供了动力。
MediaPipe姿势中的地标模型预测了33个姿势坐标的位置(参见下图)。
5.dlib
对应的案例是人脸特效。
DLIB是一个现代C++工具包,包含机器学习算法和工具,用于在C++中创建复杂的软件来解决现实世界问题。它被工业界和学术界广泛应用于机器人、嵌入式设备、移动电话和大型高性能计算环境等领域。
dlib库采用68点位置标志人脸重要部位,比如18-22点标志右眉毛,51-68标志嘴巴。使用dlib库的get_frontal_face_detector模块探测出人脸,使用shape_predictor_68_face_landmarks.dat特征数据预测人脸特征数值