MediaPipe是一款由Google开发并开源的数据流处理机器学习应用开发框架。它是一个基于图的数据处理管线,用于构建使用了多种形式的数据源,如视频、音频、传感器数据以及任何时间序列数据。 MediaPipe是跨平台的,可以运行在嵌入式平台(树莓派等),移动设备(iOS和Android),工作站和服务器上,并支持移动端GPU加速。 使用MediaPipe,可以将机器学习任务构建为一个图形的模块表示的数据流管道,可以包括推理模型和流媒体处理功能。
构建包含推理的应用程序所涉及的不仅仅是运行机器学习推理模型。开发者还需要做到以下几点:
- 利用各种设备的功能
- 平衡设备资源使用和推理结果的质量
- 通过流水线并行运行多个操作
- 确保时间序列数据同步正确
MediaPipe框架解决了这些挑战,开发者可以使用它轻松快速地将现有的或新的机器学习模型组合到以图表示的原型中,并将其跨平台实现。开发人员可以配置使用MediaPipe创建的应用程序做到如下几点:
- 有效管理资源(CPU和GPU)达到低延迟性能
- 处理诸如音频和视频帧之类的时间序列数据的同步
- 并测量性能和资源消耗
如在增强现实(AR)的应用程序中为了增强用户体验,程序会以高帧频处理诸如视频和音频之类的感官数据。 由于处理过程的的过度耦合和低延时要求,很难按照常规应用程序开发方式协调数据处理步骤和推理模型。 此外,为不同平台开发同样的应用程序也非常耗时,它通常涉及优化推理和处理步骤以便在目标设备上正确高效地运行。
MediaPipe通过将各个感知模型抽象为模块并将其连接到可维护的图中来解决这些问题。借助MediaPipe,可以将数据流处理管道构建为模块化组件图,包括推理处理模型和媒体处理功能。将视频和音频流数据输入到图中,通过各个功能模块构建的图模型管道处理这些数据,如物体检测或人脸点标注等最后结果数据从图输出。
这些功能使开发者可以专注于算法或模型开发,并使用MediaPipe作为迭代改进其应用程序的环境,其结果可在不同的设备和平台上重现。除了上述的特性,MediaPipe还支持TensorFlow和TF Lite的推理引擎,任何TensorFlow和TF Lite的模型都可以在MediaPipe上使用。同时在移动端和嵌入式平台,MediaPipe也支持设备本身的GPU加速。
安装步骤如下:
安装Homebrew和Xcode
Homebrewke可以用官方和国内两个地址下载:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
或
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
Xcode通过App Store
xcode-select --install.
Bazelisk
brew install bazelisk
下载mediapipe
git clone https://github.com/google/mediapipe.git
cd mediapipe
安装 OpenCV 和 FFmpeg
brew install opencv@3
brew uninstall --ignore-dependencies glog
安装Python 3
brew install python
sudo ln -s -f /usr/local/bin/python3.7 /usr/local/bin/python
python --version
---> Python 3.7.4
pip3 install --user six
下载Android SDK和NDK
用自带的脚本运行十分好用,xxx我用的是mediapipe的根目录,放在一起好管理;
chmod 777 ./setup_android_sdk_and_ndk.sh
bash ./setup_android_sdk_and_ndk.sh xxx/Android/Sdk xxx/Android/Ndk r21
打包apk
我需要用人像分离所以,打的人像分离的包
bazel build -c opt --config=android_arm64 mediapipe/examples/android/src/java/com/google/mediapipe/apps/selfiesegmentationgpu:selfiesegmentationgpu
打包aar给项目用
新建打包目录
1. mkdir mediapipe/examples/android/src/java/com/google/mediapipe/apps/build_aar
2. vim mediapipe/examples/android/src/java/com/google/mediapipe/apps/build_aar/BUILD
粘贴下面内容(还是用selfiesegmentation):
load("//mediapipe/java/com/google/mediapipe:mediapipe_aar.bzl", "mediapipe_aar")
mediapipe_aar(
name = "mp_mediapipe_selfie_segmentation",
calculators = ["//mediapipe/graphs/selfie_segmentation:selfie_segmentation_gpu_deps"]
)
执行
bazel build -c opt --strip=ALWAYS \
--host_crosstool_top=@bazel_tools//tools/cpp:toolchain \
--fat_apk_cpu=arm64-v8a,armeabi-v7a \
--legacy_whole_archive=0 \
--features=-legacy_whole_archive \
--copt=-fvisibility=hidden \
--copt=-ffunction-sections \
--copt=-fdata-sections \
--copt=-fstack-protector \
--copt=-Oz \
--copt=-fomit-frame-pointer \
--copt=-DABSL_MIN_LOG_LEVEL=2 \
--linkopt=-Wl,--gc-sections,--strip-all \
//mediapipe/examples/android/src/java/com/google/mediapipe/apps/build_aar:mp_mediapipe_selfie_segmentation