|
解决MediaPipe打包后cvzone报错的综合方案
根据错误信息,这是典型的资源路径问题和OpenCV摄像头访问异常。建议按以下步骤解决:
- 添加资源文件打包
打包命令需要包含mediapipe模型文件和cvzone依赖:
- pyinstaller --add-data "venv/Lib/site-packages/mediapipe/modules/*;mediapipe/modules" \
- --add-data "venv/Lib/site-packages/cvzone/*;cvzone" \
- --hidden-import google.protobuf \
- your_script.py
复制代码
- 代码路径适配
在代码开头添加资源路径处理(以HandTrackingModule为例):
- import sys
- import os
- if getattr(sys, 'frozen', False):
- BASE_PATH = sys._MEIPASS
- else:
- BASE_PATH = os.path.dirname(os.path.abspath(__file__))
- detector = HandDetector(
- staticMode=False,
- maxHands=2,
- modelPath=os.path.join(BASE_PATH, "mediapipe/modules/hand_landmark_full.tflite")
- )
复制代码
- 强制OpenCV版本
在requirements.txt中固定版本:
opencv-python-headless==4.9.0.80
mediapipe==0.10.11
- 添加摄像头异常处理
在摄像头读取代码段添加保护:
- cap = cv2.VideoCapture(0)
- if not cap.isOpened():
- print("[b][color=#FF0000]摄像头访问失败!请检查:[/color][/b]")
- print("[list][*]摄像头是否被其他程序占用[*]是否连接了虚拟摄像头[*]杀毒软件是否拦截[/list]")
- sys.exit(1)
复制代码
验证步骤:
1. 在虚拟环境中测试脚本运行
2. 清理旧的打包文件:rmdir /s /q build dist
3. 使用新参数重新打包
4. 检查dist目录是否包含mediapipe/modules文件夹
常见踩坑点:
- 使用绝对路径而不是相对路径
- 未清理旧打包缓存导致配置未更新
- 杀毒软件拦截摄像头访问(特别是企业版火绒/360)
- 未禁用虚拟摄像头(OBS Virtual Camera等)
如需进一步调试,可以在代码开头添加:
- import logging
- logging.basicConfig(level=logging.DEBUG)
复制代码
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|