- 简单记录一下在arm架构的linux ubuntu系统上安装mediapipe的过程
- 安装过程参考mediapipe官网,链接:
注意事项:
- 与OpenCV进行相互操作。最好选择OpenCV 3.X到4.1版本,OpenCV 2.X目前可以工作,但其相互操作性支持可能在将来被弃用;
- 如果你打算使用TensorFlow计算器和示例应用程序,gcc和g++的6.3和7.3版本有一个已知的问题。官网上建议安装gcc和g++版本8.x;
- 若要使Mediapipe与TensorFlow一起工作,请将Python 3.7设置为默认Python版本,并通过运行pip3 install --user six安装Python "six"库。
$ pip3 install --user six
一、安装Bazel
- Mediapipe使用Bazel进行编译,关于Bazel的使用请自行查阅资料或在安装完成后输入bazel --help查看。
$ bazel --help
- 以下为安装过程:
- Bazel安装过程参考Bazel官网,链接:
https://bazel.build/install?hl=zh-cnhttps://bazel.build/install?hl=zh-cn
- 选择从源代码编译Bazel
- 选择从头开始构建Bazel,而无需使用现有的 Bazel 二进制文件
1、安装Bazel前提条件:
-
Bash
-
zip、unzip
-
C++ 构建工具链
-
JDK:必须提供版本 11。
-
Python。版本 2 和版本 3 受支持,安装其中一个版本就足够了。
2、从github获取需要的 Bazel 版本
- 请注意,Mediapipe基本是和特定版本的Bazel是绑定的,在安装Bazel之前,建议去看看需要使用的mediapipe版本所依赖的Bazel版本是多少。
- 下载分发归档包:bazel-<version>-district.zip,其<version>是对应版本号。
https://github.com/bazelbuild/bazel/releaseshttps://github.com/bazelbuild/bazel/releases
3、将此分发归档解压到磁盘上某个位置
- 使用unzip解压即可。
4、引导Bazel
- 进入到解压的目录,运行编译脚本:
$ env EXTRA_BAZEL_ARGS="--tool_java_runtime_version=local_jdk" bash ./compile.sh
- 编译后的输出会被放入
output/bazel
。这是一个独立的 Bazel 二进制文件,没有嵌入式 JDK。您可以将其复制到任何位置或直接使用。为方便起见,请将此二进制文件复制到PATH上的目录中(例如/usr/local/bin
)。- 如需以可重现的方式构建
bazel
二进制文件,还要在“运行编译脚本”步骤中设置 SOURCE_DATE_EPOCH。
二、下载mediapipe
1、进入用户目录(或其他目录),下载源码
$ cd $HOME
$ git clone --depth 1 https://github.com/google/mediapipe.git
2、进入下载完成的目录
# Change directory into MediaPipe root directory
$ cd mediapipe
- 注:若不使用git命令,也可直接去github下载,将下载后的文件解压到磁盘上某个位置:
https://github.com/google/mediapipe.githttps://github.com/google/mediapipe.git
三、安装opencv和FFmpeg
- 官网上有三种方式安装,这里列出前两种:
方案1、使用包管理器工具安装预编译的OpenCV库与FFmpeg
$ sudo apt-get install -y \
libopencv-core-dev \
libopencv-highgui-dev \
libopencv-calib3d-dev \
libopencv-features2d-dev \
libopencv-imgproc-dev \
libopencv-video-dev
- 注意:在Debian 11/Ubuntu 21.04上安装OpenCV 4.5时,也应该安装libopencv
$ sudo apt-get install -y libopencv-contrib-dev
MediaPipe的opencv_linux.BUILD和WORKSPACE已经为OpenCV 2/3配置完成,应该可以在任何架构上正确工作:
# WORKSPACE
new_local_repository(
name = "linux_opencv",
build_file = "@//third_party:opencv_linux.BUILD",
path = "/usr",
)
# opencv_linux.BUILD for OpenCV 2/3 installed from Debian package
cc_library(
name = "opencv",
linkopts = [
"-l:libopencv_core.so",
"-l:libopencv_calib3d.so",
"-l:libopencv_features2d.so",
"-l:libopencv_highgui.so",
"-l:libopencv_imgcodecs.so",
"-l:libopencv_imgproc.so",
"-l:libopencv_video.so",
"-l:libopencv_videoio.so",
],
)
对于OpenCV 4,考虑当前架构,需要修改opencv_linux.BUILD:
# WORKSPACE
new_local_repository(
name = "linux_opencv",
build_file = "@//third_party:opencv_linux.BUILD",
path = "/usr",
)
# opencv_linux.BUILD for OpenCV 4 installed from Debian package
cc_library(
name = "opencv",
hdrs = glob([
# Uncomment according to your multiarch value (gcc -print-multiarch):
# "include/aarch64-linux-gnu/opencv4/opencv2/cvconfig.h",
# "include/arm-linux-gnueabihf/opencv4/opencv2/cvconfig.h",
# "include/x86_64-linux-gnu/opencv4/opencv2/cvconfig.h",
"include/opencv4/opencv2/**/*.h*",
]),
includes = [
# Uncomment according to your multiarch value (gcc -print-multiarch):
# "include/aarch64-linux-gnu/opencv4/",
# "include/arm-linux-gnueabihf/opencv4/",
# "include/x86_64-linux-gnu/opencv4/",
"include/opencv4/",
],
linkopts = [
"-l:libopencv_core.so",
"-l:libopencv_calib3d.so",
"-l:libopencv_features2d.so",
"-l:libopencv_highgui.so",
"-l:libopencv_imgcodecs.so",
"-l:libopencv_imgproc.so",
"-l:libopencv_video.so",
"-l:libopencv_videoio.so",
],
)
方案2、运行主路径下的setup_opencv.sh脚本从源代码自动构建OpenCV,并自动修改MediaPipe的OpenCV配置
$ ./setup_opencv.sh
四、在Linux(不是OS X)上运行桌面示例与GPU加速
# Requires a GPU with EGL driver support.
# Can use mesa GPU libraries for desktop, (or Nvidia/AMD equivalent).
$ sudo apt-get install mesa-common-dev libegl1-mesa-dev libgles2-mesa-dev
- 注:若要使用GPU支持编译,请将选项
--define MEDIAPIPE_DISABLE_GPU=1
替换为:
--copt -DMESA_EGL_NO_X11_HEADERS --copt -DEGL_NO_X11
五、示例程序hello world
$ export GLOG_logtostderr=1
- 如果在只有CPU的Linux桌面上运行:
$ bazel run --define MEDIAPIPE_DISABLE_GPU=1 \
mediapipe/examples/desktop/hello_world:hello_world
- 如果在启用了支持GPU的Linux桌面上运行(通过mesa驱动程序):
$ bazel run --copt -DMESA_EGL_NO_X11_HEADERS --copt -DEGL_NO_X11 \
mediapipe/examples/desktop/hello_world:hello_world
- 打印结果如下:
# Hello World!
# Hello World!
# Hello World!
# Hello World!
# Hello World!
# Hello World!
# Hello World!
# Hello World!
# Hello World!
# Hello World!
- 如果遇到构建错误,请阅读“ Troubleshooting”以查找解决方案。