利用 MediaPipe 实现运动识别及计数

利用 MediaPipe 实现运动识别及计数

写于 2023.04

相关版本如下:

Ubuntu 22.04(虚拟机)
adb 
	Android Debug Bridge version 1.0.41
	Version 33.0.3-8952118
SDK 30.0.3
NDK 21.4.7075529
bazel 5.2.0
Android Studio Electric Eel | 2022.1.1 Patch 1(win10)

安装 Mediapipe 框架

安装依赖环境

sudo apt-get update && sudo apt-get install -y build-essential git python zip adb openjdk-8-jdk

安装 bazel 编译环境

下载二进制安装包:bazel-5.2.0-installer-linux-x86_64.sh
有的版本可能会报错,可以根据报错提示下载所要求的版本(修改上方链接的版本号可找到其他版本的 bazel)

sudo apt install g++ unzip zip
# chmod +x bazel-<version>-installer-linux-x86_64.sh
chmod +x bazel-5.2.0-installer-linux-x86_64.sh
sudo ./bazel-5.2.0-installer-linux-x86_64.sh

安装 adb 命令

要与 windows 安装的 adb 版本一致

apt install adb
adb version

但是此方法安装的adb版本可能并不与windows下的abd版本一致,可通过如下命令下载指定版本的adb:

# wget https://dl.google.com/android/repository/platform-tools_r<specific-version>-linux.zip
# 下载最新版adb
wget https://dl.google.com/android/repository/platform-tools-latest-linux.zip
unzip platform-tools-latest-linux.zip
sudo cp platform-tools/adb /usr/bin/adb

克隆 Mediapipe 源码

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

安装 OpenCV 环境

sudo apt install libopencv-core-dev libopencv-highgui-dev \
libopencv-calib3d-dev libopencv-features2d-dev \
libopencv-imgproc-dev libopencv-video-dev

编译 MediaPipe 的 Android aar 包

安装 SDK 环境和 NDK 环境

通过 Linux 环境工具 Command-line tools 进行安装

注意:SDK版本要求 28.0.3 版本及以上,NDK版本要求介于 1821 之间,版本不符合要求后续编译会报错

在官网的最底下有下载地址 https://developer.android.google.cn/studio
找到 Command line tools only

wget -P /home/android-sdk/ https://dl.google.com/android/repository/commandlinetools-linux-7583922_latest.zip
unzip commandlinetools-linux-7583922_latest.zip

需要执行的相关命令在/home/android-sdk/cmdline-tools/bin下
cd /home/android-sdk/cmdline-tools/bin
执行 ./sdkmanager --list --channel=0 可查看所有版本

./sdkmanager "build-tools;30.0.3" "platforms;android-30" "ndk;21.4.7075529"

配置到环境变量

export ANDROID_HOME=/home/android-sdk/
export ANDROID_NDK_HOME=$PATH:$ANDROID_HOME/ndk/21.4.7075529

创建 Mediapipe 生成 Android aar 的编译文件

在路径 mediapipe/examples/android/src/java/com/google/mediapipe/apps 下新建文件

cd mediapipe/examples/android/src/java/com/google/mediapipe/apps/
mkdir buid_aar && cd buid_aar
vim BUILD

BUILD 文件内容如下:

load("//mediapipe/java/com/google/mediapipe:mediapipe_aar.bzl", "mediapipe_aar")
mediapipe_aar(
	name = "mediapipe_pose_tracking",
	calculators = ["//mediapipe/graphs/pose_tracking:pose_tracking_gpu_deps"],
)

1、生成安卓aar文件(注意在 mediapipe 根目录下执行命令)

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/build_aar:mediapipe_pose_tracking

生成的文件在 bazel-bin/mediapipe/examples/android/src/java/com/google/mediapipe/apps/build_aar/ 目录下

2、生成Mediapipe的二进制图

bazel build -c opt mediapipe/graphs/pose_tracking:pose_tracking_gpu_binary_graph

生成文件路径为 bazel-bin/mediapipe/graphs/pose_tracking/pose_tracking_gpu.binarypb

构建Android项目

  • 在 Windows10 下使用 Android Studio 创建一个空项目

  • 将编译生成的 aar 文件到 Android Stdio 工程的 app/libs/ 目录下

  • 复制以下文件到Android Stdio工程的app/src/main/assets/目录下

      bazel-bin/mediapipe/graphs/pose_tracking/pose_tracking_gpu.binarypb
      mediapipe/modules/pose_detection/pose_detection.tflite
      mediapipe/modules/pose_landmark/pose_landmark_full.tflite
    

    目前 MediaPipe 中没有后两个文件,官方文档也还在更新
    可以到 https://storage.googleapis.com/mediapipe-assets/ 查询

    pose_detection.tflite

    pose_landmark_full.tflite

项目代码可参考 https://gitee.com/luo_zhi_chengMediapipe_pose_Tracking_AAR_example

计数逻辑可参考
https://mc.dfrobot.com.cn/thread-311550-1-1.html?fromuid=827784

GitHub:https://github.com/Tooy1011/mediapipe-pose-detection

参考

mediapipe教程6:在安卓上运行mediapipe的poseTracking

Linux安装Android Sdk「建议收藏」

Linux 环境下 搭建Android SDK 和Android NDK

Ubuntu20.04部署android版mediapipe踩坑记录(持续更新。。。)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值