Ubuntu下配置Android MediaPipe
- Ubuntu下配置Android MediaPipe
- 环境说明
- 显卡驱动
- 安装魔法
- 安装git
- 安装python环境
- MediaPipe安装
- Android配置
- Android Studio,启动!
Ubuntu下配置Android MediaPipe
环境说明
安装在Ubuntu20.04双系统上,CPU型号为12400,显卡型号为4060ti 16g,目前很多相关教程有些老旧,实际安装过程中会出现很多报错,版主在配置过程中也是吃尽了苦头,现在总算是安装好了,与大家分享一下经验
显卡驱动
通常在安装完系统后,我们需要在终端里运行以下这两个命令进行更新
sudo apt update
sudo apt upgrade
部分用户在安装ubuntu20.02后可能会出现掉驱动的情况,通常来讲只需在软件和更新-附加驱动里选择需要的驱动版本,我这里选择是535驱动,大家按各自需求安装即可
如果上述方法安装不成功,可参考这篇文章
https://blog.csdn.net/Perfect886/article/details/119109380?spm=1001.2014.3001.5506
安装魔法
八仙过海,各显神通
安装git
sudo apt install git
通常需要为git设置代理,版主这里走的是2341端口,所以设置如下,大家按自己实际情况修改
git config --global http.proxy socks5://127.0.0.1:2341
git config --global https.proxy socks5://127.0.0.1:2341
安装python环境
只想简单安个python的,在终端中运行
sudo apt install python
sudo apt install python3-pip
pip install numpy
想管理环境的选择conda,从官网下载linux版本的anaconda安装包,楼主下的是Anaconda3-2023.07-2-Linux-x86_64.sh,在终端里打开
sh Anaconda3-2023.07-2-Linux-x86_64.sh
一路enter下去,最后在你选择的环境中装个numpy即可
MediaPipe安装
楼主安装时的版本是MediaPipe v0.10.8
终端打开
git clone https://github.com/google/mediapipe.git
cd mediapipe
安装bazel,这个版本MediaPipe对应的bazel版本是6.1.1,不知道版本也没关系,装错了error有提示
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
sudo apt update && sudo apt install bazel-6.1.1
安装OpenCV和FFmpeg
sudo apt-get install libopencv-core-dev libopencv-highgui-dev \
libopencv-calib3d-dev libopencv-features2d-dev \
libopencv-imgproc-dev libopencv-video-dev
安装GPU库
sudo apt-get install mesa-common-dev libegl1-mesa-dev libgles2-mesa-dev
下来测试一下是否安装成功,如果成功会输出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
到这一步,MediaPipe告一段落,下来是安卓编译环境配置
Android配置
安装jdk
# 查看适用的jdk版本
apt-cache search openjdk
# 版主选择了常见的openjdk8
sudo apt-get install openjdk-8-jdk
添加系统变量
gedit ~/.bashrc
在最后加上
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
测试,无问题会输出版本信息
java -version
返回到MediaPipe根目录安装SDK和NDK
打开终端,请注意NDK版本按照setup_android_sdk_and_ndk.sh中注释推荐的来,否则大概率报错
chmod +x ./setup_android_sdk_and_ndk.sh
bash ./setup_android_sdk_and_ndk.sh ~/Android/Sdk ~/Android/Ndk r21
添加环境变量
gedit ~/.bashrc
在最后加上,注意这里用户名填自己的
export ANDROID_HOME=$PATH:/home/用户名/Android/Sdk
export ANDROID_NDK_HOME=$PATH:/home/用户名/Android/Ndk/android-ndk-r21
下来编译aar文件
cd mediapipe/examples/android/src/java/com/google/mediapipe/apps/
mkdir buid_aar && cd buid_aar
touch BUILD
gedit 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"],
)
回到MediaPipe根目录,终端打开
chmod -R 755 mediapipe/
bazel build -c opt --fat_apk_cpu=arm64-v8a,armeabi-v7a \
//mediapipe/examples/android/src/java/com/google/mediapipe/apps/buid_aar:mediapipe_hand_tracking
等上几分钟,大概5,6000项编译完,你就能得到这个aar文件。不过版主后来也没用到这个aar文件,之后直接用官方自带的examples编译输出apk了
Android Studio,启动!
打开官网https://developer.android.com/studio,下载需要的版本,我这里下的是android-studio-2022.3.1.21-linux.tar.gz,下载完后打开终端
tar -zxvf android-studio-2022.3.1.21-linux.tar.gz
sudo mv android-studio /opt/
cd /opt/android-studio/bin
sh ./studio.sh
进入studio会要求你设置代理,你可以在自动代理那里设置镜像源,我在这里开始是手动走的的socks端口2341,但是连不上,改成http走2340就好了。这个代理是必须设置的,因为之后要下google的依赖
把mediapipe/mediapipe/examples/android/solutions作为project打开,我只需要hands所以把另外两个例子删除了,自动配置环境,这里可能会出现报错
最后在solutions底下的gradle/wrapper/gradle-wrapper.properties找到
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4.0-bin.zip
这一行,将8.4.0改成一个较低的版本号,我这里改成了
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.1-bin.zip
就不再报错直接生成项目了
随后进行apk的编译,参考这篇文章
https://blog.csdn.net/ss_0507/article/details/121713523?spm=1001.2014.3001.5506
按这个走完可能还是会报错,不要着急
在hands中的build.gradle里的android{}中添加
lintOptions{
checkReleaseBuilds false
abortOnError false
}
添加完后就可以正常编译输出了apk了