环境配置
1. 安装官方编译器bazel4.0.0
a.先安装一些基本环境
sudo apt-get install pkg-config zip g++ zlib1g-dev unzip python3
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt install openjdk-11-jdk
b.github下载bazel4.0.0 注意下载后缀为-dist.zip的。
之后将下载下来的文件移动到自己想要的目录进行解压
unzip bazel-4.0.0-dist.zip
bash ./compile.sh
sudo cp output/bazel /usr/local/bin
安装完成后运行代码检查版本信息,不报错的话就证明安装成功。
bazel version
能查看版本,bazel就按装完成了。
2. 安装Mediapipe
1.下载mediapipe
先选好版本,我用的v 0.8.5
https://github.com/google/mediapipe/tree/v0.8.5
2.安装依赖
$sudo apt install -y python3-dev
$sudo apt install -y cmake
3. 安装编译器protobuf-compiler
https://github.com/protocolbuffers/protobuf/releases 下载
unzip protoc-3.19.1-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]
编译proto文件报错:Missing output directives.
把上述改的代码再改为:
protoc_command = [self._protoc, '-I.', '-I/usr/local/include', '--python_out=.', source]
if subprocess.call(protoc_command) != 0:
sys.exit(-1)
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
如果自己已经安装opencv
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 nx为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文件夹下。
5、修改文件
打开third_party/BUILD,定位到
“WITH_ITT”: “OFF”,
“WITH_JASPER”: “OFF”,
“WITH_WEBP”: “OFF”,
在后面加上
“ENABLE_NEON”: “OFF”,
“WITH_TENGINE”: “OFF”,
6. 升级gcc
查看gcc版本
gcc -v
g++ -v
在终端中更新版本号的具体步骤,其中数字是你想更新的版本号,比如8或者其他版本。
sudo apt-get update
sudo apt-get install gcc-8
sudo apt-get install g++-8
cd /usr/bin
sudo rm gcc g++
sudo ln -s gcc-8 gcc
sudo ln -s g++-8 g++
查看版本
7. 编译
耗时大约一小时
python3 setup.py gen_protos && python3 setup.py bdist_wheel
编译成功后将出现一个dist文件夹,里面存放了mediapipe的.whl文件,说明编译成功!!!
8. 运行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-cp36-cp36-linux_aarch64.whl
9 中途各种错误 主要是编译过程中
弹出如下错误:
Error: file '@bazel_tools//tools/cpp:toolchain_utils.bzl' does not contain symbol 'use_cpp_toolchain' (did you mean 'find_cpp_toolchain'?)
把mediapipe-0.8.5文件夹下,WORKSPACE文件中的
http_archive(
name = "rules_cc",
strip_prefix = "rules_cc-main",
urls = ["https://github.com/bazelbuild/rules_cc/archive/main.zip"],
)
改为
_RULES_CC_GIT_COMMIT = "f95239adde29680236afa22b4abaf1d04234f61a"
http_archive(
name = "rules_cc",
strip_prefix = "rules_cc-%s" % _RULES_CC_GIT_COMMIT,
urls = ["https://github.com/bazelbuild/rules_cc/archive/%s.tar.gz" % _RULES_CC_GIT_COMMIT],
)
中途会有一些报错是无法下载文件,手动下载,放进报错的隐藏文件夹中再次编译。
中途一直给我下载opencv-python-contrib,但是我的已经装过了,后来在终端虚拟环境下配置了下环境变量,让它能找到我的opencv
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
如果还是解决不了一直下opencv,去requirements里将opencv那个版本改成自己电脑上装的。
sed -i -e "s/opencv-contrib-python/opencv-python/g" requirements.txt
或者直接删除下载opencv这个。