MediaPipe Hands模块.task文件路径解析错误问题求助
问题描述
按照官方文档操作时,BaseOptions解析模型路径出现异常——未使用项目目录,反而给路径添加Python包路径前缀,生成了无效路径。面部/姿态模型在相同配置下可正常运行,尝试用pathlib解决但无效,询问问题原因及解决方法。
代码示例
base_options = BaseOptions(model_asset_path='hand_landmarker.task') options = HandLandmarkerOptions( base_options=base_options, running_mode=VisionRunningMode.IMAGE, num_hands=2 )
生成的无效路径
C:\Users\User\AppData\Roaming\Python\Python310\site-packages/C:\Users\User\source\repos\JFLewelery_Bot_AI\hand_landmarker.task Errno 22
尝试的pathlib代码
task_path = Path(__file__).resolve().parents[2] / "hand_landmarker.task" if not task_path.exists(): raise FileNotFoundError(f"Model file not found at: {task_path}") options = HandLandmarkerOptions( base_options=BaseOptions(model_asset_path=str(task_path)), running_mode=VisionRunningMode.IMAGE, num_hands=2 )
原因分析
- MediaPipe旧版本的BaseOptions存在路径解析bug:当传入绝对路径时,会错误地将其与Python包目录拼接,导致生成无效路径。
- 面部/姿态模型能正常运行,是因为这类模型在MediaPipe包内有默认的路径映射,或模型文件被默认放置到了包目录中,手部模型无此默认处理逻辑。
解决方法
方法1:将模型放在工作目录并使用相对路径
把hand_landmarker.task放到Python脚本的运行目录(当前工作目录),直接使用相对路径即可:base_options = BaseOptions(model_asset_path='hand_landmarker.task') options = HandLandmarkerOptions( base_options=base_options, running_mode=VisionRunningMode.IMAGE, num_hands=2 )方法2:通过
asset_dir指定模型目录
手动指定模型所在的目录,覆盖BaseOptions的默认路径拼接逻辑:from pathlib import Path # 获取模型所在目录的绝对路径 task_dir = str(Path(__file__).resolve().parents[2]) base_options = BaseOptions(model_asset_path='hand_landmarker.task', asset_dir=task_dir) options = HandLandmarkerOptions( base_options=base_options, running_mode=VisionRunningMode.IMAGE, num_hands=2 )方法3:升级MediaPipe到最新版本
该路径解析bug已在MediaPipe的后续版本中修复,直接升级即可解决:pip install --upgrade mediapipe
内容的提问来源于stack exchange,提问作者Anastasiya Miklashevich
相关产品推荐
相关产品推荐

