谷歌Mediapipe运行环境配置

  • Post author:
  • Post category:其他


因为公司有Android项目需要卡片识别,想用谷歌的mediapipe的例子。

谷歌的

Mediapipe官网



Mediapipe的github地址

本人下载好Github的项目下来之后,人都傻了,除了facedetection、facemesh和hands的demo代码之外,没有我想要的卡片识别的demo代码,然后相应的文件夹全是BUILD文件。一脸懵逼,再看Mediapipe官网,看不懂,一脸懵逼。

后面百度到了这个老哥的

博客

,一顿整,反正他博客有些是对的,有些地方是巨坑,解决他埋的坑花了一天时间,特别特别注意他的bazel版本和配置sdk、ndk那里,巨坑来着,不要用他的方式,因为bazel目前最新都到4.2.2了,用他的0.24.0简直要死。

本篇博客只保证到能成功运行Hello world这里,后面打包那里不保证,因为,因为我自己也卡住了,有些资源是下载国外的,下载不动,死活过不去,所以,所以只保证到Hello World。

本人电脑是windows 10专业版,别的环境不保证跟我一样能成功,只能做参考。

本人linux小白,仅仅只会一点点命令操作,所以,同样小白的,应该看得懂操作,大佬勿鄙视。

本人一开始就是按他的博客一步步执行到Hello world,所以下面环境配置不能保证百分百成功,还是需要根据报错来百度解决


linux命令操作窗口,用鼠标按住左键选完需要的字符串之后,再按右键就是复制选中的内容


在其他地方复制内容之后,比如在我博客复制命令之后,到linux命令操作窗口粘贴是按一下鼠标右键,千万千万不要ctr + v!!!


vim命令是编辑文本工具,一般Ubuntu自带,下面执行vim命令报错没有安装的话,百度一下安装vim,很简单的。


1.WSL环境

去MicroStore那里,搜索wsl–>应用,我选的Ubuntu20.04 LTS这个(ps:我本人linux小白,不知道选哪个,看到Ubuntu这个应用的评价里有“解决C盘占用过大”,然后傻傻的跑去手动下载安装一顿操作,反正安装成功后是20.04lts版)

安装完之后,关机开机进入BOIS开启虚拟化,百度上搜自己电脑是怎么进入BOIS和开启虚拟化的,这个不难吧。

打开刚安装的ubuntu,创建你用户名和密码,最好保持跟你自己电脑的用户名和密码一样,怕你自己记不住(ps:用户名全小写,最好不要有特殊字符)

2.jdk环境

我用他博客里的命令配置的jdk环境,反正linux自己一顿操作,不会有什么错误

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

3.下载Mediapipe库到本地

这个要先下载下来(我之前是全程按他博客操作,结果运行hello world各种奇葩问题,还百度不到解法,因为他的博客太老旧了,时代变了,大人),因为后面的操作跟他博客不一样,要相信谷歌没那么SB的操作了。

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

输入以上两条命令之后,就进入到mediapipe目录了,输入ls命令之后可以看到目录结构,看到下面截图,说明你已经进入到这个目录了,进到这个目录结构很重要,影响到你运行Hello world(因为本人是linux小白啊,运行博主和Mediapipe官网的命令,老是说找不到该路径)

4.配置sdk和ndk环境

看到上面截图目录没?人家谷歌帮你指定好并自动配环境变量了,对运行.sh脚本就好了

sudo ./setup_android_sdk_and_ndk.sh

这个sudo不一定要写的啊,有些环境可以直接运行,反正我的电脑需要sudo

然后会提示两次(Y/N),都是输入y再回车就行

只要没报错,顺利安装就行了。在下载ndk的时候会比较慢,因为是外网的,有可能会失败。

成功的话,直接继续下面第5步,失败的话,有点麻烦,我同事说下载失败要删掉刚才下载的文件夹。

vim WORKSPACE

进入编辑,滚动到最下面,输入

A

进入编辑状态,删掉

android_sdk_repository(name = “androidsdk”, path = “/root/Android/Sdk”)

android_ndk_repository(name = “androidndk”, path = “/root/Android/Sdk/ndk-bundle/android-ndk-r21”)

这两行,按

Esc

键,再按输入

:wq

退出保存

再输入下面查看命令看看有没有删除成功

cat WORKSPACE

再删掉刚才下了sdk和ndk的文件

sudo rm -rf /roor/Android

再来一遍运行

sudo ./setup_android_sdk_and_ndk.sh

直到成功安装不报错

输入adb能出现一大堆东西就是成功了


不用按他的安装adb那样子,我就是完全按他的来,运行了报错没有安装Android的sdk和ndk,搞得我各种百度,各种配环境变量都不行,时代变了,大人。

5.安装opencv

也是不要按他博客来,看到上面第3步截图没?有个setup_opencv.sh又是个安装脚本,运行它

sudo ./setup_opencv.sh

6.安装python环境

这个我是跟他一样的,输入下面命令

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

这个一般不会有错误

7.安装Bazel

这一步你要是复制他的命令安装,那就成功不了。

我是安装最新的Bazel最新的4.2.2之后运行Hello world,提示Mediapipe执行的4.2.1版本不一致,

所以我有卸载重新安装了4.2.1版本。

安装命令(把下面的命令字符串都复制了,再粘贴运行,每行的\是连接符,其实,删掉每行\连接符,变成一行命令,效果是一样的)

curl -sLO --retry 5 --retry-max-time 10 \
https://storage.googleapis.com/bazel/4.2.1/release/bazel-4.2.1-installer-linux-x86_64.sh && \
sudo mkdir -p /usr/local/bazel/4.2.1 && \
chmod 755 bazel-4.2.1-installer-linux-x86_64.sh && \
sudo ./bazel-4.2.1-installer-linux-x86_64.sh --prefix=/usr/local/bazel/4.2.1 && \
source /usr/local/bazel/4.2.1/lib/bazel/bin/bazel-complete.bash

再执行下面命令(把下面的命令字符串都复制了,再粘贴运行,每行的\是连接符,其实,删掉每行\连接符,变成一行命令,效果是一样的)

/usr/local/bazel/4.2.1/lib/bazel/bin/bazel version && \
alias bazel='/usr/local/bazel/4.2.1/lib/bazel/bin/bazel'

开始配置bazel环境变量

sudo vim /etc/profile



a

,进去编辑模式,复制

alias bazel='/usr/local/bazel/4.2.1/lib/bazel/bin/bazel'

粘贴在最后面(

鼠标右键就是粘贴,别按Ctrl+V

)。



Esc

退出编辑模式,输入

:wq

保存并退出。

再输入下面命令执行生效

source /etc/profile

可以输入

cat /etc/profile

命令查看是否修改成功。

输入

bazel version

可以查看bazel是否配置好了以及版本信息

8.运行hello world

在运行之前,确保你当前目录是在mediapipe目录里,可以输入ls查看当前文件夹的目录结构,看看是不是跟上面第3部截图一样。(其实你在其他目录下也可以,只是下面命令的路径里做成全路径)

先输入一行命令

export GLOG_logtostderr=1

再输入执行

bazel run --define MEDIAPIPE_DISABLE_GPU=1 \
    mediapipe/examples/desktop/hello_world:hello_world

最后出现一堆的Hello World!表示运行成功。

我执行到最后这步的时候,出现过很多各种错误,主要是是按那个博主的步骤来搞导致bazel有问题,版本号对不上以及没有安装sdk和ndk导致的,后面出现了

Traceback (most recent call last): ModuleNotFoundError: No module named ‘numpy’

这个错误,解决办法很简单(因为我装的是python3,所以命令是python3),可以参考一下:

python3 -m ensurepip

然后

python3 -m pip install --upgrade pip

再然后

pip install numpy

再执行python命令

python3

再输入执行

from numpy import *

结果是这样的(下面的截图是别人的):

输入

exit()

退出python命令

总结

可以参考

官方配置

来配置,反正对我这种bazel新手和linux小白来说,看不懂

后面的打aar包,阿里云镜像也配置了,我死活卡在一个地方过不去,

Fetching @mave: Resolving and fetching the transitive closure of 29 artifact(s).

有人解决了的话,麻烦告诉我一声

————————————— 分割线 —————————————

后续:

前面还傻傻在wsl里配置maven环境,后面百度到了上面Fetching @mave的解决办法,看到

这个网址

之后琢磨的,我前面还说咋不跟AS一样配置阿里云maven仓简单,结果人家就是这么简单的配置,就在mediapipe目录下的WORKSPACE这个文件里配置。

先在浏览器打开一下

阿里云仓

,找一下对应的代理仓库

在mediapipe目录下输入下面的命令进行编辑WORKSPACE文件

vim WORKSPACE



A

键进入编辑状态

往下滚动找到maven_install这个关键字,括号里的repositories这个里面的字段,就是程序下载资源的仓,是不是很熟悉?把下面两行字符串复制进去

 "https://maven.aliyun.com/nexus/content/groups/public",
 "https://maven.aliyun.com/repository/google",

然后把这个[]里的对应的”https://maven.google.com”,和”https://jcenter.bintray.com”,删掉,不然编译的时候还是走这两个仓库里下载资源,修改好之后如下图



Esc

键,输入

:wq

保存退出编辑,再输入下面命令检查一下

cat WORKSPACE

然后开始愉快的进行打包吧

打包Android包参考

我写的谷歌MediaPipe KNIFT的打包

​​​​​​​



版权声明:本文为qiushanwen原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。