MacBook M1安装mediapipe-silicon后Pose功能运行报错排查
问题根因
- OpenCV类符号冲突:
mediapipe-silicon包内置了独立的OpenCV动态库,和环境中单独安装的opencv-python包的动态库存在CaptureDelegate、CVWindow、CVView、CVSlider等类的重复实现,系统加载时无法确定使用哪个版本的类实现,直接导致摄像头调用中断、预览窗口无法创建,对应摄像头亮2秒熄灭、无弹窗的现象和终端输出的objc警告。 - Protobuf版本不兼容:MediaPipe的计算图配置解析强依赖特定版本的protobuf,如果环境中安装的protobuf版本≥4.0,或是3.20以上的3.x版本,就会出现
mediapipe.CalculatorOptions不存在ext字段的解析错误,最终抛出CalculatorGraph配置加载失败的RuntimeError。
解决步骤
- 第一步:彻底清理环境中所有冲突的残留包
pip uninstall -y mediapipe mediapipe-silicon opencv-python opencv-contrib-python protobuf
- 第二步:安装版本对齐的依赖包,全部指定经过兼容性验证的固定版本,避免自动拉取最新版带来的冲突
# 安装与mediapipe-silicon内置OpenCV大版本一致的opencv,减少符号冲突 pip install opencv-python==4.8.0.74 # 安装M1适配版mediapipe,选0.10.9稳定适配版 pip install mediapipe-silicon==0.10.9 # 强制安装兼容版protobuf,彻底解决配置解析错误 pip install protobuf==3.20.3
- 第三步:运行代码前配置环境变量,指定动态库加载优先级,彻底消除objc类重复警告
在运行Pose示例代码的终端中先执行以下命令,再启动脚本:
export DYLD_LIBRARY_PATH=$(python -c "import cv2, os; print(os.path.dirname(cv2.__file__))"):$DYLD_LIBRARY_PATH
避坑提示:不要在Conda虚拟环境中执行上述安装操作,Conda源的M1版OpenCV和mediapipe-silicon的动态库冲突概率远高于官方pip源,建议使用Python原生venv虚拟环境或系统Python环境操作。
内容的提问来源于stack exchange,提问作者Jana.k
相关产品推荐
相关产品推荐

