十三、Ubuntu18.04下配置C++版本的mediapipe

1.官方教程

Ubuntu下配置C++版本的mediapipe

2.记录我的配置过程

我的配置过程基本上是按照官方教程来的,只不过会更加详细一些

2.1 安装Bazelisk

bazelisk是 官方提供的 bazel 包装器
bazel是Google开源的一套类似于Make的编译构建工具

我这里是通过npm安装bazelisk,所以需要先安装npm:

sudo apt-get install npm

安装失败:
在这里插入图片描述
再加一句,然后重新安装npm:

 ## 不过在安装nodejs-dev node-gyp这个东西的时候,把我的ROS(melodic版本)的很多库都卸载了,不知道会不会影响ROS的使用
sudo apt-get install nodejs-dev node-gyp libssl1.0-dev
sudo apt-get install npm

然后再安装bazelisk

## -g指的是全局安装,这样就不用每次开启terminal都跑一次bazelisk指令了
sudo npm install -g @bazel/bazelisk

在这里插入图片描述

2.2 安装mediapipe库

按照官网的教程走即可,将miediapie的源码,放到/home/下面
可以看到家目录下,多了一个mediapipe的文件夹

cd $HOME
git clone https://github.com/google/mediapipe.git

在这里插入图片描述

2.3 安装OpenCv和FFmpeg

首先是安装FFmpeg,直接在终端输入以下指令,即可完成安装

sudo apt-get install -y \
    libopencv-core-dev \
    libopencv-highgui-dev \
    libopencv-calib3d-dev \
    libopencv-features2d-dev \
    libopencv-imgproc-dev \
    libopencv-video-dev

不过我这里显示已经装过了,也不知道是啥时候装的,先不管了
在这里插入图片描述
然后再通过运行setup_opencv.sh以从源代码自动构建 OpenCV 并修改 MediaPipe 的 OpenCV 配置
这是最简单的方式,这是一个批处理文件,谷歌已经帮我们配置好了环境变量,直接运行就可以安装OpenCV3

## 进入从github上面下载下来的源码文件夹“mediapipe”
cd mediapipe
## 然后直接运行“mediapipe”文件夹里面的setup_opencv.sh这个文件
./setup_opencv.sh

这一步一定要多试几次,因为网络问题非常容易失败
在这里插入图片描述
输入以下指令,可以查看自己的OpenCV版本
装完之后,我这边显示的是3.4.18,我记得装之前是OpenCV 2.几的版本

## 查看OpenCV版本
pkg-config --modversion opencv

在这里插入图片描述

2.4 运行helloworld(CPU)

## 先进入源码所在的文件夹
cd mediapipe
export GLOG_logtostderr=1
## 只使用CPU运行
bazel run --define MEDIAPIPE_DISABLE_GPU=1 \
    mediapipe/examples/desktop/hello_world:hello_world

报错了:好像是没安装numpy
在这里插入图片描述
缺啥装啥就完事了

sudo apt-get install python3-pip
sudo apt-get install python3-numpy

然后继续运行helloworld,成功!
到此就已经成功把mediapipe安装完成了!
在这里插入图片描述

2.5 编译和运行hand_tracking(CPU)

## 进入源码所在的目录
cd mediapipe
## 用bazel编译hand_tracking的代码
bazel build -c opt --define MEDIAPIPE_DISABLE_GPU=1 mediapipe/examples/desktop/hand_tracking:hand_tracking_cpu
## 运行编译好的代码
GLOG_logtostderr=1 bazel-bin/mediapipe/examples/desktop/hand_tracking/hand_tracking_cpu --calculator_graph_config_file=mediapipe/graphs/hand_tracking/hand_tracking_desktop_live.pbtxt

报错了,这是因为gcc的版本太低了!
在这里插入图片描述

ubuntu18.04自带的gcc 7.5.0编译HellowWorld没有问题,但是要进行hand_tracking的编译,就会报错:
在这里插入图片描述
解决办法:将gcc、g++都升级至8.0版本

## 安装gcc-8 和 g++-8版本
sudo apt-get install gcc-8
sudo apt-get install g++-8
## 设置优先级
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 100
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 50
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/g++-8 100
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/g++-7 50

可以看到现在gcc和g++编译器的版本已经升级到8.4.0了
在这里插入图片描述

然后再次运行hand_tracking,又报错:
在这里插入图片描述
这是因为之前使用gcc-7.5版本编译,在~/.cache/bazel中(这是隐藏文件,按Ctrl + H就能看见)保留了7.5版本的缓存,直接升级gcc-8后,出现版本不对应的问题,所以要将这个bazel文件夹直接删掉
在这里插入图片描述
然后再次运行hand_tracking,这次没报错了,编译成功!

可以看到下面这个文件夹里,编译生成了相关的文件!
在这里插入图片描述
PS:看别人的博客,删除了~/.cache/bazel这个文件,还是编译不通过,还会报错:
ERROR1:

ERROR: /home/base/workspace/mediapipe/mediapipe/examples/desktop/hand_tracking/BUILD:27:10: Linking of rule '//mediapipe/examples/desktop/hand_tracking:hand_tracking_cpu' failed (Exit 1): gcc failed: error executing command /usr/bin/gcc @bazel-out/k8-opt/bin/mediapipe/examples/desktop/hand_tracking/hand_tracking_cpu-2.params

解决方案:opencv三方库没有全部链接上,修改opencv_linux.BUILD中的链接选项即可

ERROR2:

/home/base/workspace/mediapipe/mediapipe/framework/tool/BUILD:107:10: Linking of rule '//mediapipe/framework/tool:encode_as_c_string' failed (Exit 1): crosstool_wrapper_driver_is_not_gcc failed: error executing command external/local_config_cuda/crosstool/clang/bin/crosstool_wrapper_driver_is_not_gcc @bazel-out/host/bin/mediapipe/framework/tool/encode_as_c_string-2.params
/usr/bin/ld: bazel-out/host/bin/external/com_google_absl/absl/strings/libstrings.a(charconv.o): undefined reference to symbol 'nan@@GLIBC_2.2.5'
//lib/x86_64-linux-gnu/libm.so.6: error adding symbols: DSO missing from command line

解决方案:在mediapipe/mediapipe/framework/tool/BUILD中的110行后面,加入 linkopts = [“-lm”], (注意有英文逗号)

但是我在配置的过程中是没有遇到这两个ERROR的,我在删除了~/.cache/bazel这个文件之后就编译通过了
然后输入以下指令就可以直接运行了!!!

## 进入源码所在的目录
cd mediapipe
## 运行之前编译好的代码
GLOG_logtostderr=1 bazel-bin/mediapipe/examples/desktop/hand_tracking/hand_tracking_cpu --calculator_graph_config_file=mediapipe/graphs/hand_tracking/hand_tracking_desktop_live.pbtxt

在这里插入图片描述

2.6 编译和运行face_detection(CPU)

## 进入源码所在的目录
cd mediapipe
## 用bazel编译face_detection的代码
bazel build -c opt --define MEDIAPIPE_DISABLE_GPU=1 mediapipe/examples/desktop/face_detection:face_detection_cpu
## 运行之前编译好的代码
GLOG_logtostderr=1 bazel-bin/mediapipe/examples/desktop/face_detection/face_detection_cpu --calculator_graph_config_file=mediapipe/graphs/face_detection/face_detection_desktop_live.pbtxt

2.7 编译和运行face_mesh(CPU)

## 进入源码所在的目录
cd mediapipe
## 用bazel编译face_mesh的代码
bazel build -c opt --define MEDIAPIPE_DISABLE_GPU=1 mediapipe/examples/desktop/face_mesh:face_mesh_cpu
## 运行之前编译好的代码
GLOG_logtostderr=1 bazel-bin/mediapipe/examples/desktop/face_mesh/face_mesh_cpu --calculator_graph_config_file=mediapipe/graphs/face_mesh/face_mesh_desktop_live.pbtxt

报错:
找不到Can't find file: mediapipe/modules/face_detection/face_detection_short_range.tflite
找不到Can't find file: mediapipe/modules/face_landmark/face_landmark_with_attention.tflite
这是因为,源码中并不包含这两个文件,必须去官网下载
在这里插入图片描述
然后放到对应的路径下即可
在这里插入图片描述
在这里插入图片描述

2.8 编译和运行Iris(CPU)

报错:Can't find file: mediapipe/modules/face_landmark/face_landmark.tflite
解决方法如上,去官网下载face_landmark.tflite文件,放到目录下:
在这里插入图片描述

## 进入源码所在的目录
cd mediapipe
## 用bazel编译Iris的代码
bazel build -c opt --define MEDIAPIPE_DISABLE_GPU=1 mediapipe/examples/desktop/iris_tracking:iris_tracking_cpu
## 运行之前编译好的代码
GLOG_logtostderr=1 bazel-bin/mediapipe/examples/desktop/iris_tracking/iris_tracking_cpu --calculator_graph_config_file=mediapipe/graphs/iris_tracking/iris_tracking_cpu.pbtxt

2.9 编译和运行Objectron (3D Object Detection)(CPU)

在这里插入图片描述

同理要检测鞋子shoe,就要去官网下载object_detection_3d_sneakers.tflite,放到mediapipe/modules/objectron/object_detection_3d_sneakers.tflite目录下

同理要检测杯子cup,就要去官网下载object_detection_3d_cup.tflite,放到 mediapipe/modules/objectron/object_detection_3d_cup.tflite目录下

在这里插入图片描述

## 进入源码所在的目录
cd mediapipe
## 用bazel编译Objectron的代码
bazel build -c opt --define MEDIAPIPE_DISABLE_GPU=1 mediapipe/examples/desktop/object_detection_3d:objectron_cpu

## 检测杯子cup,输入输出路径需要自己指定,路径不能含有中文!!!!!视频格式必须是mp4!!!!!!
GLOG_logtostderr=1 bazel-bin/mediapipe/examples/desktop/object_detection_3d/objectron_cpu \
  --calculator_graph_config_file=mediapipe/graphs/object_detection_3d/objectron_desktop_cpu.pbtxt \
  --input_side_packets=input_video_path=/home/yao/My_Mediapipe_config/myinput/mycup.mp4,output_video_path=/home/yao/My_Mediapipe_config/myoutput/res_cup.mp4,box_landmark_model_path=	mediapipe/modules/objectron/object_detection_3d_cup.tflite,allowed_labels=Mug

## 检测鞋子shoes,输入输出路径需要自己指定,路径不能含有中文!!!!!视频格式必须是mp4!!!!!!
GLOG_logtostderr=1 bazel-bin/mediapipe/examples/desktop/object_detection_3d/objectron_cpu \
  --calculator_graph_config_file=mediapipe/graphs/object_detection_3d/objectron_desktop_cpu.pbtxt \
  --input_side_packets=input_video_path=/home/yao/My_Mediapipe_config/myinput/myshoes.mp4,output_video_path=/home/yao/My_Mediapipe_config/myoutput/res_shoes.mp4,box_landmark_model_path=	mediapipe/modules/objectron/object_detection_3d_sneakers.tflite,allowed_labels=Footwear

检测马克杯 Mug的结果:

在这里插入图片描述

检测鞋子 Footwear的结果:
在这里插入图片描述

3.其他Bug

有时候,在运行完一个demo以后(例如,face_mesh),再运行其他已经编译好的demo(例如,hand_tracking)有可能还会报错找不到.tflite文件,这个时候一般只需要重新编译再运行即可

4.参考

Ubuntu上安装MediaPipe
Ubuntu 布置Mediapipe环境
Windows10 编译Mediapipe C++版本保姆级教程
Linux MediaPipe C++版手势识别环境搭建与编译
Ubuntu下编译mediapipe,C++
MediaPipe的编译与测试
mediapipe 编译命令、运行命令、以及部分解释
mediapipe教程1:python代码
mediapipe教程2:linux桌面程序编译与运行
Ubuntu升级编译器版本 从gcc5到gcc7
Ubuntu18.04降低/升级编译器版本(实测有效)
Mediapipe - 将Mediapipe handtracking封装成动态链接库dll/so
手部21个关键点检测+手势识别-[MediaPipe]

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值