前言
刚好最近在研究手势识别,需要用到MediaPipe,构建成功花费了三天,主要是大部分时间都在捣鼓虚拟机装Ubuntu。
开发还是Linux好玩一些,比如FFMpeg、OpenCV等等。所以建议搞个Ubuntu来玩,如果用Mac这是高级玩家了,当我啥都没说,哈哈。
MediaPipe官网
MediaPipe官网文档
MediaPipe GitHub地址
MediaPipe的安装步骤(包括Ubuntu、Centen os、mac、Windows等等)
我们要玩的就是把MediaPipe的安装步骤走一遍,踩踩坑。
提示:以下是本篇文章正文内容,下面案例可供参考
一、MediaPipe是什么?
MediaPipe 为直播和流媒体提供开源跨平台、可定制的 ML 解决方案。
二、MediaPipe代码
代码和例子都在其中,例子中Google有构建好的Maven库提供给Android使用,我们只需要把Android的例子跑起来即可。
MediaPipe github
将代码down到本地,包括MediaPipe的源码和示例
git clone git@github.com:google/mediapipe.git
Android的示例就在如下目录,直接将solutions这个项目用Android studio跑起来就行。
/mediapipe/examples/android/
运行代码之前需要执行下这个create_win_symlinks.bat脚本(存放位置/mediapipe/examples/android/solutions
),需要用管理员权限打开dos,然后执行这个脚本。
三、开始安装MediaPipe
MediaPipe的安装步骤(包括Ubuntu、Centen os、mac、Windows等等)
1.安装Bazelisk
安装bazellisk主要是为了更新bazel,因为MediaPipe使用bazel进行构建的。
bazel官网,想学习的可以看看,跟本文没啥关系。
bazelisk在各个平台的官网安装步骤。
bazelisk的GitHub地址,有问题我们可以查看readme讲的还是很清楚。
Ubuntu上的安装步骤:
1、下载[bazelisk二进制文件](https://github.com/bazelbuild/bazelisk/releases)
2、将bazelisk的二进制文件移动到指定目录,就是安装完成
我下载的是bazelisk-linux-amd64这个二进制文件,然后将文件移动到/usr/local/bin/bazel/
mv bazelisk-linux-arm64 /usr/local/bin/bazel
# 如果后续执行bazel仍然报错,查看是否有bazel这个可执行文件,并且观察是否有可执行权限
cd /usr/local/bin/
# 如果无权限,请执行
sudo chmod u+x bazel
#然后执行如下命令可以查看到bazel的版本就算成功
bazel version
3、如果bazellisk无法安装bazel,参考官方使用二进制文件(shell脚本)安装程序
第 1 步:安装所需的软件包
Bazel 需要 C++ 编译器并解压缩 / 压缩才能正常工作:
# 查看是否安装GCC
$ g++ --version
# 如果未安装,使用如下命令安装
$ sudo apt install g++ unzip zip
如果要使用 Bazel 构建 Java 代码,请安装 JDK:
# 查看java是否安装
$ java --version
# 如果未安装,请使用如下命令安装jdk
# Ubuntu 16.04 (LTS) uses OpenJDK 8 by default:
$ sudo apt-get install openjdk-8-jdk
# Ubuntu 18.04 (LTS) uses OpenJDK 11 by default:
$ sudo apt-get install openjdk-11-jdk
第 2 步:运行安装程序
从 GitHub 上的 Bazel 版本页面下载名为 bazel-version-installer-linux-x86_64.sh的shell脚本文件。
例如我本次安装的就是bazel-5.2.0-installer-linux-x86_64.sh
,如下图:
执行如下命令:
# 给bazel-5.2.0-installer-linux-x86_64.sh脚本可执行权限
$ chmod +x bazel-5.2.0-installer-linux-x86_64.sh
# 下载bazel
$ ./bazel-5.2.0-installer-linux-x86_64.sh --user
执行脚本之后,命令行会输出日志,其中有一部分如下
其中的“xxxxx”指的是你的用户名,例如“zhangsan”:
Make sure you have "/home/xxxxx/bin" in your path.
For bash completion, add the following line to your ~/.bashrc:
source /home/xxxxx/.bazel/bin/bazel-complete.bash
For fish shell completion, link this file into your
/home/xxxxx/.config/fish/completions/ directory:
ln -s /home/xxxxx/.bazel/bin/bazel.fish /home/xxxxx/.config/fish/completions/bazel.fish
执行上述日志的命令行
# 执行如下命令,然后bazel好像就能用了,不用执行第二个命令了
$ source /home/xxxxx/.bazel/bin/bazel-complete.bash
# 查看bazel是否安装成功
$ bazel version
# 如果上述命令执行完成之后仍然不能使用,请继续第二个命令
$ cd .config/
$ mkdir -p fish/completions/
$ cd
$ ln -s /home/xxxxx/.bazel/bin/bazel.fish /home/xxxxx/.config/fish/completions/bazel.fish
$ bazel version
2.将MediaPipe库克隆到本地
注意:在构建过程中出现了如下问题,报错信息没有截图,不好意思,所以用文字阐述下。
此处有一个问题,假如我们是使用的虚拟机安装的Ubuntu,不要将MediaPipe代码放在虚拟机中Ubuntu和Windows的共享文件夹中,系统会因为安全问题而编译报错,因此需要放在Ubuntu自己的文件夹中。
当我们使用虚拟机安装Ubuntu的时候,建议给系统分配磁盘容量的时候尽量给50-100GB。
命令如下:
# 1、clone代码到本地文件夹
git clone git@github.com:google/mediapipe.git
或者
git clone https://github.com/google/mediapipe.git
# 2、Change directory into MediaPipe root directory
cd mediapipe
3.安装OpenCv和FFmpeg
MediaPipe官网OpenCV和FFmpeg指导安装步骤
官方给了三种安装步骤,都尝试过(主要是开始以为是步骤一、二、三,O(∩_∩)O哈哈~)。
使用包管理器工具安装预编译的 OpenCV 库。
3.1 FFmpeg 将通过libopencv-video-dev安装,也可以单独安装FFmpeg,参考
如何在Ubuntu上安装和使用FFmpeg,或者从FFmpeg官网下载Ubuntu环境的包。
sudo apt-get install -y \
libopencv-core-dev \
libopencv-highgui-dev \
libopencv-calib3d-dev \
libopencv-features2d-dev \
libopencv-imgproc-dev \
libopencv-video-dev
3.2 运行setup_opencv.sh以从源代码自动构建 OpenCV 并修改 MediaPipe 的 OpenCV 配置。
此方式最简单,直接运行我们克隆下来的MediaPipe中的脚本
执行步骤
cd mediapipe
./setup_opencv.sh
注意:执行./setup_opencv.sh执行脚本可能会报如下错误
/bin/bash^M:解释器错误: 没有那个文件或目录
原因**:**因为在Windows中编辑了脚本,由于windows系统下换行符为 \r\n,linux下换行符为 \n,所以导致在windows下编写的文件会比linux下多回车符号 \r。
解决方法:
执行如下命令
sed -i 's/\r$//' setup_opencv.sh
3.3 按照 OpenCV 的文档从源代码手动构建 OpenCV。
我最终就是通过OpenCV源码构建的,文档(OpenCV 安装的文档)的步骤写得还是不错,按着步骤来就好了。
有个小技巧:就是在构建OpenCV的时候,可以参考步骤3.2中Google提供的脚本,不要问,问就是我就是这么抄的。
此处就一个小问题,就是安装python-numpy,你按照sudo apt-get install python-dev python-numpy
命令安装Python环境(Ubuntu好像自带Python环境,我用的20之后的版本)和python numpy。
当执行最终MediaPipe的编译的时候,可能仍然会出现如下问题,我就碰到了
ImportError: No module named numpy
Is numpy installed?
解决方式:
使用如下命令安装就好了
参考:菜鸟教程numpy安装步骤
pip3 install numpy scipy matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple
4 运行Hello World!在 C++ 示例中
命令如下:
export GLOG_logtostderr=1
bazel run --define MEDIAPIPE_DISABLE_GPU=1 \
mediapipe/examples/desktop/hello_world:hello_world
运行结果,到此就已经成功把MediaPipe安装完成,hello world跑起来了
总结
1、Google MediaPipe官方总结了一些常见的错误:MediaPipe异常问题解答
2、还有网络异常造成的问题,解决方式可以参考
https://github.com/google/mediapipe/issues/581
https://github.com/google/mediapipe/issues/3
3、MediaPipe官网
4、MediaPipe官网文档
5、MediaPipe GitHub地址
6、MediaPipe的安装步骤(包括Ubuntu、Centen os、mac、Windows等等)