1.介绍
MediaPipe是一款由Google开发并开源的数据流处理机器学习应用开发框架。它是一个基于图的数据处理管线,用于构建使用了多种形式的数据源,如视频、音频、传感器数据以及任何时间序列数据。MediaPipe通过将各个感知模型抽象为模块并将其连接到可维护的图中来解决这些问题。
优点:
- 有效管理资源(CPU和GPU)达到低延迟性能
- 处理诸如音频和视频帧之类的时间序列数据的同步
- 并测量性能和资源消耗(目前Google正在开发,尚未开源)
官网上给出的Demo:
MediaPipe的主要组件包括:
- (1) 图(Graph)-有向图
- (2) 数据包(Packet)
- (3) 节点(Node)
- (4) 数据流(Stream)
- (5) 图配置(GraphConfig)
- (6) 计算单元(Caculator)
- (7) 子图(Subgraph)
2.安装
2.1 下载MediaPipe源码
git clone https://github.com/google/mediapipe.git
cd mediapipe
2.2 安装bazel
- 添加Bazel分发URI作为包源
sudo apt install curl gnupg
curl -f https://bazel.build/bazel-release.pub.gpg | sudo apt-key add -
echo "deb [arch=amd64] https://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list
- 安装和更新bazel
sudo apt update && sudo apt install bazel
sudo apt update && sudo apt full-upgrade
注意:后续编译中会下载大量依赖库,由于总所周知的原因,需要在终端进行全局代理,不然编译报错或者直接无法编译。
2.3 安装OpenCV和FFmpeg
sudo apt-get install libopencv-core-dev libopencv-highgui-dev
libopencv-calib3d-dev libopencv-features2d-dev
libopencv-imgproc-dev libopencv-video-dev
2.4 安装GPU库
sudo apt-get install mesa-common-dev libegl1-mesa-dev libgles2-mesa-dev
2.5 运行hello world
export GLOG_logtostderr=1
# 不启用GPU
bazel run --define MEDIAPIPE_DISABLE_GPU=1 mediapipe/examples/desktop/hello_world:hello_world
# 启用GPU
bazel run --copt -DMESA_EGL_NO_X11_HEADERS --copt -DEGL_NO_X11 mediapipe/examples/desktop/hello_world:hello_world
运行结果打印10次Hello World:
# Hello World!
# Hello World!
# Hello World!
# Hello World!
# Hello World!
# Hello World!
# Hello World!
# Hello World!
# Hello World!
# Hello World!
3.编译MediaPipe官方应用
3.1 桌面版的人手姿态追踪Hand Tracking
- 编译(CPU版本)
bazel build -c opt --define MEDIAPIPE_DISABLE_GPU=1 mediapipe/examples/desktop/hand_tracking:hand_tracking_cpu
- 运行(CPU版本)
GLOG_logtostderr=1 bazel-bin/mediapipe/examples/desktop/hand_tracking/hand_tracking_cpu
--calculator_graph_config_file=mediapipe/graphs/hand_tracking/hand_tracking_desktop_live.pbtxt
- 编译(GPU版本)
bazel build -c opt --copt -DMESA_EGL_NO_X11_HEADERS --copt -DEGL_NO_X11
mediapipe/examples/desktop/hand_tracking:hand_tracking_gpu
- 运行(GPU版本)
GLOG_logtostderr=1 bazel-bin/mediapipe/examples/desktop/hand_tracking/hand_tracking_gpu
--calculator_graph_config_file=mediapipe/graphs/hand_tracking/hand_tracking_mobile.pbtxt
3.2 安卓版本的人手姿态追踪Hand Tracking
需要安装的环境:
- JAVA Runtime (14.0.2)
- Android SDK release 28.0.3 and above
- Android NDK r18b and above.
建议采用Android Studio安装Android SDK NDK,在.bashrc
中添加里面路径,采用source .bashrc
配置生效:
export ANDROID_HOME=<path to the Android SDK>
export ANDROID_NDK_HOME=<path to the Android NDK>
在命令行中使用Bazel构建Hand Tracking
bazel build -c opt --config=android_arm64 mediapipe/examples/android/src/java/com/google/mediapipe/apps/handtrackinggpu:handtrackinggpu
安装在指定Android平台上:
adb install bazel-bin/mediapipe/examples/android/src/java/com/google/mediapipe/apps/handtrackinggpu/handtrackinggpu.apk
也可以通过adb
指令安装apk。
附:本人移植在MTK安卓平台上的构建命令和上诉有所不同:
bazel build -c opt --fat_apk_cpu=arm64-v8a,armeabi-v7a mediapipe/examples/android/src/java/com/google/mediapipe/apps/handtrackinggpu:handtrackinggpu