教程|Win10和Jetson Nano环境下安装Mediapipe-python

最近因学习需要用到google的mediapipe包进行手部识别,效果不错便想将其移植到jetson nano的ubuntu系统上。坑不少,在这里记录一下过程。

步骤
  • 一、Windows10的安装方法
  • 二、Jetson Nano下的安装方法
    • 1、首先下载Mediapipe文件并安装bazel (官方的编译器)
    • 2、安装依赖
    • 3、安装编译器
    • 4、进mediapipe目录删除不必要的OpenCV模块和链接器标志。
    • 5、修改文件
    • 6、编译
      • 出现的各种错误
      • 编译成功
    • 8、运行Mediapipe

一、Windows10的安装方法 windows10安装很简单,直接打开cmd用pip安装就行:
pip3 install mediapipe -i https://pypi.tuna.tsinghua.edu.cn/simple

二、Jetson Nano下的安装方法
mediapipe 没有提供aarch64的wheel文件,因此需要源码编译。官方用的系统是ubuntu20,我用的是ubuntu18,步骤一致。
先贴出官方的安装方法:
MediaPipe Python on aarch64 Ubuntu 20.04
顺利的话照着顺序和解决方案做就可以安装完成了。
下面是我按照官方安装的步骤进行安装以及每一步遇到的错误和解决方法:
1、首先下载Mediapipe文件并安装bazel (官方的编译器)
$clone https://github.com/google/mediapipe.git

这里我们安装 bazel 4.0.0版本的,其他版本可能会出现警告,安装方法参考这篇文章:在jetson nano上安装bazel
安装完然后检查一下版本就行了:
$bazel version

2、安装依赖
$sudo apt install -y python3-dev $sudo apt install -y cmake

3、安装编译器
$sudo apt install -y protobuf-compiler

后面编译的时候如果出现缺少any.proto错误,这意味着protoc可能太旧,您可以从GitHub下载最新的protoc-3.x.x-linux-aarch_64.zip(这里贴出3.18.0的下载链接),然后解压文件:
$unzip protoc-3.x.x-linux-aarch_64.zip

然后将“bin”和include下的“google”复制到/mediapipe中。修改mediapipe/setup.py,将
protoc_command = [self._protoc, ‘-I.’, ‘–python_out=.’, source]
修改为
protoc_command = [self._protoc, ‘-I.’, ‘-I/usr/local/include’, ‘–python_out=.’, source]
4、进mediapipe目录删除不必要的OpenCV模块和链接器标志。
$cd mediapipe $sed -i -e "/\"imgcodecs\"/d; /\"calib3d\"/d; /\"features2d\"/d; /\"highgui\"/d; /\"video\"/d; /\"videoio\"/d" third_party/BUILD $sed -i -e "/-ljpeg/d; /-lpng/d; /-ltiff/d; /-lImath/d; /-lIlmImf/d; /-lHalf/d; /-lIex/d; /-lIlmThread/d; /-lrt/d; /-ldc1394/d; /-lavcodec/d; /-lavformat/d; /-lavutil/d; /-lswscale/d; /-lavresample/d" third_party/BUILD

5、修改文件 打开third_party/BUILD,定位到
“WITH_ITT”: “OFF”,
“WITH_JASPER”: “OFF”,
“WITH_WEBP”: “OFF”,
在后面添加两句,然后保存退出:
“ENABLE_NEON”: “OFF”,
“WITH_TENGINE”: “OFF”,
6、编译 这一步问题最多并且耗时最久,一次编译要将近一个小时,每一次出错都要重新编译(摊手.jpg)
$python3 setup.py gen_protos && python3 setup.py bdist_wheel

出现的各种错误
首先是最重要的一个错误!不要使用python3.7!不要使用python3.7!!!
不然最后编译会报错,提示bazel找不到规则,而且找不到问题所在,这个问题卡了我三天(再次摊手)。
教程|Win10和Jetson Nano环境下安装Mediapipe-python
文章图片

1、缺少any.proto错误,解决方法看上面第3步。
2、return tensor错误:
教程|Win10和Jetson Nano环境下安装Mediapipe-python
文章图片

这里的错误是因为gcc的版本太低,不能自动执行类型转换,有两个办法解决,第一个升级gcc7到gcc8,第二个是修改文件,将报错文件中的
return tensor
修改成
return absl::StatusOr< mediapipe::Tensor > ( mediapipe::Tensor(std::move(tensor)));
但是后面还会有另一个return报错,所以这里我用的是第一个方法一劳永逸:
升级gcc8:
Ubuntu18.04 更新gcc和g++的版本号
3、this rule is missing dependency declarations for the following fles错误
清理bazel的缓存然后重新编译即可
$rm -rf ~/.cache/bazel/

编译成功
编译成功之后会在文件目录下生成一个dist文件夹,里面存放了mediapipe的.whl文件。
教程|Win10和Jetson Nano环境下安装Mediapipe-python
文章图片

教程|Win10和Jetson Nano环境下安装Mediapipe-python
文章图片

8、运行Mediapipe 先安装mediapipe功能包:
$python3 -m pip install cython $python3 -m pip install numpy $python3 -m pip install pillow $python3 -m pip install mediapipe/dist/mediapipe-0.8-cp38-cp38-linux_aarch64.whl

【教程|Win10和Jetson Nano环境下安装Mediapipe-python】成功结果
教程|Win10和Jetson Nano环境下安装Mediapipe-python
文章图片

安装过程出现了matplotlib一直安装失败的问题
教程|Win10和Jetson Nano环境下安装Mediapipe-python
文章图片

解决方法:
用apt-get下载
$sudo apt-get install python3-matplotlib

    推荐阅读