Ubuntu系统下MediaPipe环境搭建与“Hello World”实战

张开发
2026/4/12 10:47:39 15 分钟阅读

分享文章

Ubuntu系统下MediaPipe环境搭建与“Hello World”实战
1. 为什么选择MediaPipeMediaPipe是Google开源的一个跨平台多媒体机器学习框架它最大的特点是把复杂的计算机视觉和音频处理流程封装成了可复用的组件。我第一次接触MediaPipe是在开发一个手势识别项目时当时被它开箱即用的手部关键点检测效果惊艳到了——21个手部关节点实时追踪在我的笔记本上跑出了30FPS的成绩。这个框架特别适合以下几类开发者想快速实现AR滤镜、手势交互的移动端开发者需要搭建原型系统的AI算法工程师学习计算机视觉的在校学生嵌入式AI应用开发者通过MediaPipe的TFLite支持在Ubuntu上部署MediaPipe的优势很明显Linux原生支持Docker、GPU加速更友好而且各种依赖库的安装比Windows简单太多。不过要注意的是MediaPipe对系统环境要求比较严格这也是为什么很多新手会在环境搭建阶段踩坑。2. 环境准备避坑指南2.1 系统要求实测官方文档说Ubuntu 18.04都可以但我实测发现Ubuntu 20.04 LTS最稳定我用的20.04.4内存建议8GB以上编译OpenCV时很吃内存磁盘空间至少预留30GB源码编译中间文件遇到过最坑的问题是虚拟机共享文件夹编译失败这是因为Bazel构建时对文件系统有特殊要求。建议不要在VMware/VirtualBox的共享文件夹里放项目用df -h检查磁盘空间如果空间不足可以挂载新磁盘sudo mkdir /media/newdisk sudo mount /dev/sdb1 /media/newdisk2.2 基础依赖安装先更新软件源sudo apt update sudo apt upgrade -y安装编译工具链比官方文档更全sudo apt install -y build-essential cmake git python3-dev \ python3-numpy libatlas-base-dev libsuitesparse-dev \ libx11-dev libgl1-mesa-dev libgtk-3-dev有个隐藏坑点是Python环境冲突。如果系统有多个Python版本建议用update-alternatives管理sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 13. 关键组件安装3.1 Bazelisk的妙用MediaPipe官方推荐用Bazelisk管理Bazel版本这真是个明智的设计。我试过直接装Bazel 4.0结果编译时报API不兼容。最新安装方法2023年验证wget https://github.com/bazelbuild/bazelisk/releases/download/v1.17.0/bazelisk-linux-amd64 chmod x bazelisk-linux-amd64 sudo mv bazelisk-linux-amd64 /usr/local/bin/bazel验证安装bazel --version # 应该输出类似 bazel 5.3.0如果遇到网络问题可以设置国内镜像export BAZELISK_BASE_URLhttps://mirrors.aliyun.com/bazel3.2 OpenCV编译优化MediaPipe需要OpenCV 3.x但Ubuntu仓库里的版本可能不兼容。推荐从源码编译git clone --branch 3.4.16 https://github.com/opencv/opencv.git cd opencv mkdir build cd build关键配置参数加速编译cmake -D CMAKE_BUILD_TYPERELEASE \ -D CMAKE_INSTALL_PREFIX/usr/local \ -D WITH_TBBON \ -D WITH_V4LON \ -D WITH_QTON \ -D WITH_OPENGLON \ -D BUILD_EXAMPLESOFF \ -D BUILD_opencv_python3ON \ -D BUILD_TESTSOFF \ -D BUILD_PERF_TESTSOFF ..开启多线程编译根据CPU核心数调整make -j8 sudo make install验证安装pkg-config --modversion opencv # 应该输出 3.4.164. MediaPipe实战部署4.1 源码获取与准备推荐用SSH方式克隆避免HTTPS可能出现的证书问题git clone gitgithub.com:google/mediapipe.git cd mediapipe重要的一步是设置Python路径export PYTHONPATH${PYTHONPATH}:$(pwd)4.2 解决依赖问题首次运行前执行sudo apt install -y libopencv-core-dev libopencv-highgui-dev \ libopencv-calib3d-dev libopencv-features2d-dev \ libopencv-imgproc-dev libopencv-video-dev如果遇到numpy报错用清华源安装pip3 install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple4.3 Hello World深度解析官方示例的增强版运行命令export GLOG_logtostderr1 bazel run --define MEDIAPIPE_DISABLE_GPU1 \ --action_envPYTHONPATH$PYTHONPATH \ mediapipe/examples/desktop/hello_world:hello_world这个简单示例背后其实完成了初始化MediaPipe计算图创建Packet数据流执行同步计算输出时间戳信息如果想看更复杂的例子可以尝试手部检测bazel run --define MEDIAPIPE_DISABLE_GPU1 \ mediapipe/examples/desktop/hand_tracking:hand_tracking_cpu5. 常见问题排查手册5.1 编译错误锦囊问题1undeclared inclusion(s) in rule //mediapipe/framework:calculator解决方法bazel clean --expunge export CCclang export CXXclang问题2Couldnt find python3.dll解决方法sudo apt install python3-dev5.2 性能调优技巧启用GPU加速需要CUDAbazel run --define MEDIAPIPE_DISABLE_GPU0 \ mediapipe/examples/desktop/hello_world:hello_world使用更快的链接器节省20%构建时间sudo apt install lld echo build --linkopt-fuse-ldlld .bazelrc启用本地缓存echo build --disk_cache~/.cache/bazel .bazelrc6. 进阶路线建议成功运行Hello World后可以尝试修改计算图mediapipe/graphs/目录下的.pbtxt文件开发自定义Calculator核心组件移植到Android平台需要NDK配置集成TensorFlow Lite模型我最近在做的项目是把MediaPipe和ROS集成实现机器人视觉导航。发现一个很有用的技巧是使用mediapipe::Timestamp做数据同步比直接用ROS的time API更稳定。

更多文章