前言
本文提供了为Jetson AGX配置mediapipe的流程,中间遇到很多问题,目前均已解决,安装流程适用于Jetson Xivar系列,包括nano、nx、agx。
一、Bazel安装
编译安装bazel是安装mediapipe必须要做的一部,由于Jetson设备内核架构采用的是ARM64(aarch64),因此需要从源码编译安装(建议Bazel 4.0.0版本)。
二、Mediapipe安装
1.下载mediapipe:
源码在github上可以找到,如果下载速度慢可到国内的gitee上找资源(类似于github的国内版本,资源也比较丰富,下载速度很快),解压后得到名为 mediapipe-master 的安装包文件夹。
2.安装依赖和编译器
sudo apt install -y python3-dev
sudo apt install -y cmake
sudo apt install -y protobuf-compiler
3.删除非必要模块
进入 mediapipe-master 文件夹下,删除不必要的模块和标志。依次执行下列命令行:
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
4.修改文件
进入 third_party 文件夹,找到名为 BUILD 的文件,定位到如下位置并增加蓝色字体内容:
“WITH_ITT”: “OFF”,
“WITH_JASPER”: “OFF”,
“WITH_WEBP”: “OFF”,# 在后面增加以下两句内容:
“ENABLE_NEON”: “OFF”,
“WITH_TENGINE”: “OFF”,
5.修改OpenCV和FFMpeg的编译文件
回到mediapipe-master文件夹下,运行如下代码
sed -i "s/x86_64-linux-gnu/aarch64-linux-gnu/g" third_party/opencv_linux.BUILD
sed -i "s/x86_64-linux-gnu/aarch64-linux-gnu/g" third_party/ffmpeg_linux.BUILD
由于Jetson agx为aarch64的linux系统,因此需要将 third_party/opencv_linux.BUILD
和 third_party/ffmpeg_linux.BUILD
两个
文件中所有的 x86_64-linux-gnu
更换为 aarch64-linux-gnu 。
在
Jetson中,OpenCV和FFMpeg的库都定义在
/usr/lib/aarch64-linux-gnu文件夹下。
6. 配置CUDA支持
(1)首先确认CUPTI、CUDA、CUDNN、NVCC是否正确安装,如下图所示即为正常。
(2)配置CUDA环境变量,在 /etc/profile 文件中增加如下内容:
export TF_CUDA_PATHS=/usr/local/cuda-10.2,/usr/lib/aarch64-linux-gnu,/usr/include
(3)为了让bazel找到CUDA,需要在 mediapipe-master 文件夹下的 .bazelrc 文件中增加如下内容 ,
# This config refers to building with CUDA available.
build:using_cuda --define=using_cuda=true
build:using_cuda --action_env TF_NEED_CUDA=1
build:using_cuda --crosstool_top=@local_config_cuda//crosstool:toolchain# This config refers to building CUDA op kernels with nvcc.
build:cuda --config=using_cuda
build:cuda --define=using_cuda_nvcc=true
7.编译
正式开始编译,时间比较长,中间会有在github上下载安装包的过程,建议“科学上网”,不然会因下载速度过慢导致经常中断。
python3 setup.py gen_protos && python3 setup.py bdist_wheel
编译成功之后,会在 mediapipe-master 文件夹下生成一个名为 dist 的新文件夹 ,里面会有一个编译完成的 .wheel 文件,之后 pip 进行安装就可以。
8.问题及解决方案
1)问题:缺少any.proto错误
解决方案:下载最新的 protoc-3.x.x-linux-aarch_64.zip ,解压并将名为 bin 的文件夹和include下的 google 文件夹复制到 mediapipe-master 中。修改 mediapipe-master下的setup.py,
protoc_command = [self._protoc, ‘-I.’, ‘–python_out=.’, source]
#定位上句并修改为如下内容:
protoc_command = [self._protoc, ‘-I.’, ‘-I/usr/local/include’, ‘–python_out=.’, source]
2)问题:return tensor相关的错误
解决方案:gcc g++ 升级到gcc-8 g++-8, 目前发现gcc-8和g++-8可避免一系列问题,所以强烈建议编译开始前就安装该版本,至于更高的版本是否也可以,没有测试不好下结论。
3)问题:is numpy installed? 问题
解决方案:运行如下命令可解决:
echo $PYTHON_BIN_PATH
export PYTHON_BIN_PATH=/usr/bin/python3
PYTHON_BIN_PATH -c 'import numpy'
4)问题:Illegal instruction (core dumped) 问题
解决方案:运行如下命令:
export OPENBLAS_CORETYPE=ARMV8
或者将命令添加到 ~/.bashrc中,再source一下该文件,如下:
source ~/.bashrc
5)问题:aarch64-linux-gnu-gcc 交叉编译报错
解决方案:aarch64-linux-gnu-gcc 及aarch64-linux-gnu-g++版本升级到aarch64-linux-gnu-gcc-8 和aarch64-linux-gnu-g++-8
三、总结
整体安装流程比较坎坷,遇到的比较大的问题主要是后4个,解决之后基本就能编译成功,另外就是github下载速度难题,导致无数次的编译中断,最后还是选择“科学上网”解决问题。