MediaPipe 怎么在 macOS 上用 Homebrew 安装 OpenCV 3 并处理 glog 依赖冲突?
【免费下载链接】mediapipeCross-platform, customizable ML solutions for live and streaming media.项目地址: https://gitcode.com/GitHub_Trending/med/mediapipe
在 macOS 上从零搭建 MediaPipe C++ 桌面环境时,最容易卡住的环节是 OpenCV 的引入:文档要求用 Homebrew 安装预编译的 OpenCV 3(brew install opencv@3),并且紧接着要卸载 Homebrew 的 glog(brew uninstall --ignore-dependencies glog),否则会遇到一个由 glog 依赖引起的已知问题。本文按 安装文档 的 "Installing on macOS" 章节给出这条完整路径:安装前置工具、用 Homebrew 装 OpenCV 3、处理 glog、运行 Hello World 示例验证整条构建链是否打通。文档建议的 OpenCV 版本范围是 3.x 到 4.1,所以选opencv@3是符合官方推荐的首选路径。
环境准备
开始之前需要安装三样东西,均为文档明确要求:
- Homebrew(包管理器);
- Xcode 及其 Command Line Tools,安装命令是
xcode-select --install; - Bazelisk(文档让读者按 Bazel 官方文档安装,仓库本身不提供 Bazel 二进制)。
然后在 Home 目录下克隆 MediaPipe 仓库并进入根目录:
$ cd $HOME $ git clone --depth 1 https://gitcode.com/GitHub_Trending/med/mediapipe.git $ cd mediapipe如果习惯用 MediaPipe 官方仓库地址,以 安装文档 中给出的克隆命令为准。
用 Homebrew 安装 OpenCV 3,并卸载 glog
安装文档给出的 macOS 主路径(Option 1)只有两条命令:
$ brew install opencv@3 # There is a known issue caused by the glog dependency. Uninstall glog. $ brew uninstall --ignore-dependencies glog第二条命令是处理 glog 冲突的关键,文档原文的注释是「由 glog 依赖引起的一个已知问题,卸载 glog」。这里有两个要点:
--ignore-dependencies会绕过 Homebrew 的依赖保护,即使其他已安装的 formula(包括刚装好的opencv@3)声明依赖 glog,也会把 glog 从系统里移除。这是文档指定的处理方式,执行前确认你理解它的影响范围:卸载的是本机 Homebrew 的 glog 包,不涉及 MediaPipe 仓库内的任何文件。- 卸载 glog 不会导致 MediaPipe 缺依赖,因为 Bazel 构建用的是仓库自己声明的 glog。可以在 WORKSPACE 中核对:MediaPipe 通过
http_archive拉取glog-0.6.0源码(com_github_glog_glog),并单独拉取了 gflags 2.2.2(注释写明是 gflags needed by glog)。也就是说构建用的 glog 由 Bazel 自行编译,Homebrew 里那份才会引发问题。
文档同时说明:FFmpeg 不需要单独安装,会通过 OpenCV 一起装好。
(可选)Apple Silicon 上核对 OpenCV 路径配置
默认情况下 MediaPipe 的构建配置直接指向 Homebrew 的标准位置,brew install opencv@3装完即可使用,不需要改任何文件。但如果你的 Homebrew 装在/opt/homebrew(Apple Silicon 常见情况)或安装的版本号与预期不同,opencv_macos.BUILD 文件头部的注释给出了核对方法:
$ brew ls opencv@3 | grep version.hpp # 文档示例输出(版本号为 3.4.16_10 时的示例): # /opt/homebrew/Cellar/opencv@3/3.4.16_10/include/opencv2/core/version.hpp确认输出后,需要让两处配置保持一致(文件注释明确要求「改一处必须同步改另一处」):
- WORKSPACE 中
macos_opencv规则的path改为 Homebrew Cellar 所在目录,例如/opt/homebrew/Cellar; - opencv_macos.BUILD 中的
PREFIX改为opencv/<version>,上例即opencv/3.4.16_10。
当前仓库的默认值是path = "/usr/local"(注释注明如/usr/local/Cellar)配合PREFIX = "opt/opencv@3",即走 Homebrew 的/usr/local/opt/opencv@3链接。macos_ffmpeg规则则固定在/usr/local/opt/ffmpeg。
安装 Python 3 与 six 库
文档的 macOS 流程在跑示例前还要求确认 Python 3 和six库可用:
$ brew install python $ sudo ln -s -f /usr/local/bin/python3.7 /usr/local/bin/python $ python --version Python 3.7.4 $ pip3 install --user six注意sudo ln -s -f这条命令需要管理员权限,且会覆盖/usr/local/bin/python这个软链接,执行前确认你的系统允许这样修改。Python 3.7.4是文档给出的示例输出,不是必须精确匹配的固定值,你的 Python 版本以实际为准。
运行 Hello World 验证
安装是否真正生效,用文档指定的 Hello World 示例验证:
$ export GLOG_logtostderr=1 # Need bazel flag 'MEDIAPIPE_DISABLE_GPU=1' as desktop GPU is currently not supported $ bazel run --define MEDIAPIPE_DISABLE_GPU=1 \ mediapipe/examples/desktop/hello_world:hello_world两点说明:
--define MEDIAPIPE_DISABLE_GPU=1是文档明确要求的标志,注释写明 macOS 桌面 GPU 目前不受支持,必须禁用 GPU;- 示例输出是十行
Hello World!(安装文档 与 Hello World 文档 均以此作为成功判据,文档示例为十行连续输出):
# Hello World! # Hello World! # ...(共 10 行)看到这个输出,说明 Homebrew 的 OpenCV 3、glog 的处理和 Bazel 构建链已经全部打通。
构建失败时先查 OpenCV 配置
如果bazel run在链接阶段报出一连串 OpenCV 符号未定义的错,排错文档 给出的是这样一类错误信息:
error: undefined reference to 'cv::String::deallocate()' error: undefined reference to 'cv::String::allocate(unsigned long)' error: undefined reference to 'cv::VideoCapture::VideoCapture(cv::String const&)' ...文档的结论是:这通常说明 OpenCV 没有为 MediaPipe 正确配置,需要回到 安装文档 的 "Install OpenCV and FFmpeg" 一节,检查WORKSPACE与opencv_macos.BUILD是否指向了本地实际的 OpenCV 库。对照前文「核对 OpenCV 路径配置」一节逐项检查path与PREFIX是否一致,是最常见的修复点。其他类别的构建错误(Python 找不到、依赖拉取失败等)在同文档对应小节中。
限制
- macOS 桌面 GPU 不受支持,构建必须带
--define MEDIAPIPE_DISABLE_GPU=1,这是文档注释中的原样限制; - 文档推荐与 OpenCV 互操作的版本范围是 3.x 到 4.1,OpenCV 2.x 当前可用但可能被弃用;本文主路径固定使用
opencv@3; - 文档未详述 glog 已知问题的具体报错形态,只提供了卸载命令;如果卸载 glog 后构建仍报 glog 相关错误,属于文档未覆盖的情形,需要以实际报错为准另行处理。
【免费下载链接】mediapipeCross-platform, customizable ML solutions for live and streaming media.项目地址: https://gitcode.com/GitHub_Trending/med/mediapipe
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考