mediapipe库已存于本地文件夹但导入时触发protobuf兼容报错
问题根因
该报错与mediapipe库缺失无关,属于典型的依赖版本不兼容问题:
你本地安装的protobuf版本高于3.20.x系列后,官方修改了Descriptor的创建规则,而当前安装的mediapipe版本内置的_pb2.py文件是使用3.19.0以下版本的protoc生成的,不符合高版本protobuf的调用要求。因此哪怕你还未调用任何mediapipe的功能,只要执行import mediapipe as mp触发模块加载,就会直接抛出TypeError: Descriptors cannot not be created directly错误。
修复方案
按推荐优先级从高到低排列:
方案1:降级protobuf到兼容版本(首选,无性能损耗)
直接将protobuf降级到3.20.x系列即可彻底解决兼容问题,执行对应安装命令:
- pip环境:
pip install protobuf==3.20.3 - conda环境:
conda install protobuf=3.20.3
安装完成后重新运行脚本即可正常导入mediapipe,该方案不会带来任何性能损失,是日常开发的首选解决方式。
方案2:设置环境变量临时绕过(仅适合临时调试)
如果暂时无法调整依赖版本,可以通过设置环境变量强制protobuf使用纯Python解析逻辑绕过校验:
- Windows命令行:执行
set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python后再启动Python脚本 - Mac/Linux终端:执行
export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python后再运行脚本
注意:该方案会让protobuf解析速度大幅下降,后续运行实时手部追踪时会出现明显卡顿,不建议长期使用
方案3:重新编译proto文件(适合二次开发场景)
如果需要使用高版本protobuf的新特性,可以安装3.19.0及以上版本的protoc工具,重新编译mediapipe依赖的所有proto文件生成新的_pb2.py文件。该方案操作流程复杂,无定制需求的普通开发者无需选择。
验证步骤
修复完成后先单独执行导入测试,确认无报错:
import mediapipe as mp print(f"mediapipe导入成功,当前版本:{mp.__version__}")
测试通过后即可正常运行你之前写的摄像头读取代码,后续再叠加手部关键点检测相关逻辑即可。
内容的提问来源于stack exchange,提问作者Shashank Gupta
相关产品推荐
相关产品推荐

