Ubuntu上安装MediaPipe


前言

刚好最近在研究手势识别,需要用到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

# 2Change 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等等)

猜你喜欢

转载自blog.csdn.net/u013855006/article/details/125171583