MediaPipe 是一款由 Google 开发并开源的数据流处理机器学习应用开发框架. 它是一个基于图的数据处理管线 , 用于构建使用了多种形式的数据源 , 如视频、音频、传感器数据以及任何时间序列数据. MediaPipe 是跨平台的 , 可以运行在嵌入式平台(树莓派等) , 移动设备( iOS 和 Android ) , 工作站和服务器上 , 并支持移动端 GPU 加速 . 使用 MediaPipe ,可以将机器学习任务构建为一个图形的模块表示的数据流管道 , 可以包括推理模型和流媒体处理功能.
本篇文章记录下从零搭建 Mediapipe 环境以及构建 Android AAR 的过程
首先当然是阅读 官方文档 , 需要注意的是在环境选择上 , 最好阅读完相关文章后再进行选择和行动 .
这里本人就吃了个大亏 , 没有仔细看完文档再行动 . 因为本人电脑是 Win11 , 因此就想当然对着 Windows 版本的安装教程进行 , 当整体进行完了 , Hello World Demo 可以运行成功 , 构建 AAR 时却会得到一个错误 , 后面看回文档才知道 , __Windows__原生系统不支持构建 AAR 包!!!
官方截图 :
接下来改用 Docker 进行构建
Docker 安装 Mediapipe
步骤为
在系统上安装 Docker
构建 mediapipe
镜像
运行 Hello World C++ 示例项目 (可选)
自定义构建 AAR
1. 在系统上安装 Docker (略) 步骤 1 略 , 可参考对应系统的相关教程
clone mediapipe仓库
1 2 git clone https://github.com/google/mediapipe.git $ cd mediapipe
若直接构建 Image , 不出意外会有很多报错 , 大多是由于网络环境引起的.
我们需要先做的几个操作是
a. 关闭本机代理 (有Issue反馈代理会影响部分拉取包的过程 , 也可先不关闭 , 影响到再关闭)
b. 修改 Docker 镜像源 -> 国内镜像
1 2 3 4 5 "registry-mirrors": [ "https://registry.docker-cn.com", "http://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn" ]
c. 修改 mediapipe 根目录 Dockerfile
首先增加 ubuntu 阿里云镜像 , 在 ENV DEBIAN_FRONTEND=noninteractive
后加上
1 2 3 4 5 6 ENV DEBIAN_FRONTEND=noninteractive # 更新镜像 RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list RUN sed -i s@/security.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list RUN apt-get clean RUN apt-get update
再给 Python 安装 Tensorflow 指定国内镜像仓库 , 在 RUN ln -s /usr/bin/python3 /usr/bin/python
这行前插入以下配置
1 2 3 4 # 更新镜像 RUN pip3 install --upgrade pip RUN pip3 install tensorflow==1.14.0 -i https://pypi.tuna.tsinghua.edu.cn/simple RUN pip3 install tf_slim -i https://pypi.tuna.tsinghua.edu.cn/simple
然后再进行构建
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 $ docker build --tag=mediapipe . # 不出意外 , 将会打印一下内容 , 构建成功 # Sending build context to Docker daemon 147.8MB # Step 1/9 : FROM ubuntu:latest # latest: Pulling from library/ubuntu # 6abc03819f3e: Pull complete # 05731e63f211: Pull complete # ........ # See http://bazel.build/docs/getting-started.html to start a new project! # Removing intermediate container 82901b5e79fa # ---> f5d5f402071b # Step 9/9 : COPY . /mediapipe/ # ---> a95c212089c5 # Successfully built a95c212089c5 # Successfully tagged mediapipe:latest
3. 运行 Hello World C++ 示例项目 (可选) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 docker run -it --name mediapipe mediapipe:latest GLOG_logtostderr=1 bazel run --define MEDIAPIPE_DISABLE_GPU=1 mediapipe/examples/desktop/hello_world # Should print: # Hello World! # Hello World! # Hello World! # Hello World! # Hello World! # Hello World! # Hello World! # Hello World! # Hello World! # Hello World!
4. 自定义构建 AAR 这里首先要给容器中环境安装 vim
zip
等工具
1 2 3 4 5 apt-get update apt-get install -y vim apt-get install zip unzip
然后修改项目根目录 WORKSPACE 文件 , 增加 Android 依赖仓库镜像
1 2 3 4 5 6 7 8 9 10 # 更新镜像 (大约在第358行) repositories = [ "https://maven.aliyun.com/repository/google", "https://maven.aliyun.com/repository/central", "https://maven.aliyun.com/repository/public", "https://maven.google.com", "https://dl.google.com/dl/android/maven2", "https://repo1.maven.org/maven2", "https://jcenter.bintray.com", ],
再在目录下新建目标 AAR 文件对应 BUILD
文件
1 2 mkdir mediapipe/examples/android/src/java/com/google/mediapipe/apps/aar_example vim mediapipe/examples/android/src/java/com/google/mediapipe/apps/aar_example/BUILD
BUILD
文件内容:
1 2 3 4 5 6 load("//mediapipe/java/com/google/mediapipe:mediapipe_aar.bzl", "mediapipe_aar") mediapipe_aar( name = "mediapipe_holistic_tracking", calculators = ["//mediapipe/graphs/holistic_tracking:holistic_tracking_gpu_deps"], )
然后编译 AAR
1 2 3 4 bazel build -c opt --strip=ALWAYS \ --host_crosstool_top=@bazel_tools//tools/cpp:toolchain \ --fat_apk_cpu=arm64-v8a,armeabi-v7a \ mediapipe/examples/android/src/java/com/google/mediapipe/apps/aar_example:mediapipe_holistic_tracking.aar
成功后再构建对应 binarypb
文件
1 2 bazel build -c opt \ mediapipe/graphs/holistic_tracking:holistic_tracking_gpu
然后将上面得到的 aar
文件和 binarypb
从容器中拷贝出来即可