You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apple M1运行MediaPipe代码报CalculatorOptions无ext字段错误

问题根因

该报错由依赖版本不兼容触发,和M1硬件、手写代码的核心逻辑无直接关联:

  • 适配Apple Silicon芯片的mediapipe-silicon第三方移植包,对protobuf序列化库的版本有严格约束。当环境内protobuf版本高于3.20.x系列时,新版protobuf移除了旧版的扩展字段解析逻辑,就会抛出Message type "mediapipe.CalculatorOptions" has no field named "ext"错误。
  • 你提供的代码本身存在缩进逻辑错误:cv2.imshow()与cv2.waitKey()被写在while循环外部,就算依赖问题修复,程序也会因循环内持续读取摄像头帧但不做渲染、不处理退出逻辑,最终无响应崩溃。
修复方案

按以下步骤操作即可解决问题:

  1. 先清理当前环境内的冲突依赖,在终端执行命令:
    pip uninstall -y mediapipe mediapipe-silicon protobuf opencv-python
    
  2. 安装版本匹配的依赖组合,固定protobuf版本到兼容区间,二选一即可:
    • 方案1:使用silicon移植版
      pip install mediapipe-silicon==0.8.11 protobuf==3.20.3 opencv-python
      
    • 方案2:使用MediaPipe官方原生支持Apple Silicon的正式版(0.8.10及以上版本已原生支持M系列芯片,无需额外安装第三方移植包,稳定性更好)
      pip install mediapipe==0.10.9 protobuf==3.20.3 opencv-python
      
  3. 修正代码缩进错误,将帧渲染、退出判断、资源释放逻辑补全,修正后的可运行代码如下:
    import cv2
    import mediapipe as mp
    import time
    
    cap = cv2.VideoCapture(0)
    mpHands = mp.solutions.hands
    hands = mpHands.Hands()
    
    while True:
        success, img = cap.read()
        # 摄像头读取失败时直接跳出循环
        if not success:
            break
        imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        results = hands.process(imgRGB)
    
        cv2.imshow("Image", img)
        # 按键盘q键即可退出程序
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    
    # 退出前释放摄像头资源、关闭所有窗口
    cap.release()
    cv2.destroyAllWindows()
    

内容的提问来源于stack exchange,提问作者Shmukli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 17:15:43