mediapipe 编译用于android的aar包

Posted lin-0410

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mediapipe 编译用于android的aar包相关的知识,希望对你有一定的参考价值。

简要记录下,怎么编译mediapipe用于android aar包。
一,mediapipe的介绍:
参考博客 https://www.it610.com/article/1290670846662221824.htm
参考官网,https://google.github.io/mediapipe/
本篇笔记以运动检测的使用为例:https://google.github.io/mediapipe/solutions/instant_motion_tracking
二,我尝试了在windows环境下编译,在环境都配置好之后(我以为都是OK的),编译桌面程序没有问题,就是执行命令:bazel build -c opt --define MEDIAPIPE_DISABLE_GPU=1 --action_env PYTHON_BIN_PATH="C://Python//Python38//python.exe" mediapipe/examples/desktop/hello_world
没有问题,但是编译android的aar包出错,错误提示:isystemexternal/androidndk/ndk/sysroot/usr/include -c external/org_tensorflow/tensorflow/lite/kernels/internal/spectrogram.cc -o bazel-out/android-armeabi-v7a-opt/bin/external/org_tensorflow/tensorflow/lite/kernels/internal/_objs/audio_utils/spectrogram.pic.o Execution platform: @local_execution_config_platform//:platform clang: error: no such file or directory: '/w' clang: error: no such file or directory: '/D_USE_MATH_DEFINES' clang: error: no such file or directory: '/std:c++14'

跟github issue列表中1287错误是一样的,
https://github.com/google/mediapipe/issues/1287
,参考1287问题的建议:“Note: building MediaPipe Android apps is still not possible on native Windows. Please do this in WSL instead and see the WSL setup instruction in the next section.”.
放弃了windows下的编译,尝试linux下去编译aar。
这里是借助在windows系统下安装的ubuntu系统。
三,记录下mediapipe的编译需要的环境配置步骤:
主要参考https://google.github.io/mediapipe/getting_started/android.html
配置ubuntu环境,https://google.github.io/mediapipe/getting_started/install.html#installing-on-windows-subsystem-for-linux-wsl
1,安装windows下ubuntu,可以参考:https://blog.csdn.net/lin20044140410/article/details/111996675?spm=1001.2014.3001.5501
2,Install Windows ADB and start the ADB server in Windows.,windows下的adb,这个就不细说了,在windows做android开发,windows上android的环境肯定是OK的。
3,Launch WSL.就是打开ubuntu终端,可以从start 菜单启动。
4,Install the needed packages.,

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

还有要安装numpy,如果是python3.8,执行:

sudo apt-get install python3-numpy

5,Install Bazelisk.
去Bazel的github https://github.com/bazelbuild/bazel/releases上下载安装包,我一开始下载的最新版,但是运行时提示我需要3.7.2的版,所以我安装的是bazel-3.7.2-installer-linux-x86_64.sh
安装后,根据提示设置环境变量,vim .bashrc,最后一行添加:
source /usr/local/lib/bazel/bin/bazel-complete.bash
6,Checkout MediaPipe repository.
git clone https://github.com/google/mediapipe.git 然后,进入mediapipe目录,
执行 setup_opencv.sh 安装opencv,
执行 setup_android_sdk_and_ndk.sh,安装andorid sdk, ndk,并做好环境变量的配置,
vim .bashrc 最后添加:
export ANDROID_HOME= P A T H : / r o o t / A n d r o i d / S d k e x p o r t A N D R O I D N D K H O M E = PATH:/root/Android/Sdk export ANDROID_NDK_HOME= PATH:/root/Android/SdkexportANDROIDNDKHOME=PATH:/root/Android/Sdk/ndk-bundle/android-ndk-r19c
这里依据你的andorid sdk安装目录做调整,我是用sudo 安装的,默认安装到了root账号下,

以上环境配置好,可以尝试编译,android aar包,
首先,mediapipe\\mediapipe\\examples\\android\\src\\java\\com\\google\\mediapipe\\apps目录下,创建build_aar文件夹,里面新建文件BUILD,文件内容:

load("//mediapipe/java/com/google/mediapipe:mediapipe_aar.bzl", "mediapipe_aar")

mediapipe_aar(
    name = "mediapipe_hand_tracking",
    calculators = ["//mediapipe/graphs/hand_tracking:mobile_calculators"],
)


#load("//mediapipe/java/com/google/mediapipe:mediapipe_aar.bzl", "mediapipe_aar")
#
#mediapipe_aar(
#    name = "mediapipe_instant_motion_tracking",
#    calculators = ["//mediapipe/graphs/instant_motion_tracking:instant_motion_tracking_deps"],
#)

这里是编手势检测的aar包,使用的模型是mediapipe\\mediapipe\\graphs\\hand_tracking,
如果要编译别的,参考mediapipe\\mediapipe\\graphs\\下的模型,修改BUILD文件,
然后,执行命令:

bazel build -c opt --strip=ALWAYS --host_crosstool_top=@bazel_tools//tools/cpp:toolchain --fat_apk_cpu=arm64-v8a,armeabi-v7a --action_env PYTHON_BIN_PATH="usr/bin/python3" mediapipe/examples/android/src/java/com/google/mediapipe/apps/build_aar:mediapipe_hand_tracking.aar

需要提示的是,这里要指定python的路径, --action_env PYTHON_BIN_PATH=“usr/bin/python3” 不然编译会报Repository command failed。
编译成功,你将看到如下输出信息:
在这里插入图片描述

OK,祝你好运。

以上是关于mediapipe 编译用于android的aar包的主要内容,如果未能解决你的问题,请参考以下文章

mediapipe 编译用于android的aar包

Mediapipe 跟踪 AAR 构建失败:按架构过滤 AAR 本机库失败

Android 库 (jar/aar) 可以用于 Xamarin 中的 iOS

Go语言编译成aar并调试

Android Studio找不到module里的aar

用于 Android 库 (aar) 的 assets/ 目录中的资产