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

Windows下MediaPipe手势识别模型触发RuntimeError:文件加载暂不支持

问题

开发基于MediaPipe的手势识别模型时,Windows系统运行代码出现以下错误:

Warning (from warnings module):
  File "C:\Users\LENOVO\AppData\Local\Programs\Python\Python310\lib\site-packages\tensorflow_addons\utils\tfa_eol_msg.py", line 23
    warnings.warn(
UserWarning: 

TensorFlow Addons (TFA) has ended development and introduction of new features.
TFA has entered a minimal maintenance and release mode until a planned end of life in May 2024.
Please modify downstream libraries to take dependencies from other repositories in our TensorFlow community (e.g. Keras, Keras-CV, and Keras-NLP). 

Traceback (most recent call last):
  File "C:\Users\LENOVO\Desktop\project1.py", line 27, in <module>
    data = gesture_recognizer.Dataset.from_folder(
  File "C:\Users\LENOVO\AppData\Local\Programs\Python\Python310\lib\site-packages\mediapipe_model_maker\python\vision\gesture_recognizer\dataset.py", line 202, in from_folder
    hand_data = _get_hand_data(
  File "C:\Users\LENOVO\AppData\Local\Programs\Python\Python310\lib\site-packages\mediapipe_model_maker\python\vision\gesture_recognizer\dataset.py", line 114, in _get_hand_data
    with _HandLandmarker.create_from_options(
  File "C:\Users\LENOVO\AppData\Local\Programs\Python\Python310\lib\site-packages\mediapipe\tasks\python\vision\hand_landmarker.py", line 271, in create_from_options
    return cls(
  File "C:\Users\LENOVO\AppData\Local\Programs\Python\Python310\lib\site-packages\mediapipe\tasks\python\vision\core\base_vision_task_api.py", line 65, in __init__
    self._runner = TaskRunner.create(graph_config, packet_callback)
RuntimeError: File loading is not yet supported on Windows

当前环境版本:

  • mediapipe model maker 0.1.0.2
  • tensorflow 2.14.0
  • python 3.10.0

相关代码片段:

from mediapipe_model_maker.python.vision import gesture_recognizer

data = gesture_recognizer.Dataset.from_folder(
    dirname=IMAGES_PATH,
    hparams=gesture_recognizer.HandDataPreprocessingParams()
)

# Split the archive into training, validation and test dataset.
train_data, rest_data = data.split(0.8)
validation_data, test_data = rest_data.split(0.5)

# Train the model
hparams = gesture_recognizer.HParams(export_dir="rock_paper_scissors_model")
options = gesture_recognizer.GestureRecognizerOptions(hparams=hparams)
model = gesture_recognizer.GestureRecognizer.create(
    train_data=train_data,
    validation_data=validation_data,
    options=options
)
print("done")

解决方案

方法1:升级MediaPipe Model Maker到兼容Windows的版本

旧版本mediapipe-model-maker(0.1.0.2)在Windows平台存在文件加载限制,升级到新版本即可修复该问题。执行以下命令升级:

pip install --upgrade mediapipe-model-maker

升级后重新运行代码,Dataset.from_folder即可正常读取本地文件。

方法2:手动预处理数据,绕过内置文件加载逻辑

如果暂时无法升级依赖,可手动处理图片数据,提取手部关键点后再传入模型训练:

  1. 遍历本地图片文件夹,用MediaPipe的HandLandmarker单独处理每张图片,提取手部关键点数据
  2. 将处理后的数据整理成模型要求的格式,替代Dataset.from_folder的自动处理流程

示例代码框架:

import os
import cv2
import mediapipe as mp
from mediapipe_model_maker.python.vision.gesture_recognizer import dataset

mp_hands = mp.solutions.hands
hands = mp_hands.Hands(static_image_mode=True, max_num_hands=1, min_detection_confidence=0.5)

def process_images(image_dir):
    hand_samples = []
    # 按类别遍历文件夹
    for class_name in os.listdir(image_dir):
        class_dir = os.path.join(image_dir, class_name)
        if not os.path.isdir(class_dir):
            continue
        for img_name in os.listdir(class_dir):
            img_path = os.path.join(class_dir, img_name)
            img = cv2.imread(img_path)
            img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
            results = hands.process(img_rgb)
            if results.multi_hand_landmarks:
                # 提取并转换关键点格式
                landmarks = results.multi_hand_landmarks[0]
                landmark_data = [[lm.x, lm.y, lm.z] for lm in landmarks.landmark]
                hand_samples.append(dataset.HandSample(
                    hand_landmarks=landmark_data,
                    gesture_name=class_name,
                    image_file_name=img_name
                ))
    return dataset.Dataset(hand_samples)

# 使用手动处理的数据
data = process_images(IMAGES_PATH)
# 后续分割、训练代码保持不变
train_data, rest_data = data.split(0.8)
validation_data, test_data = rest_data.split(0.5)
# ... 训练代码和原代码一致

方法3:使用WSL(Windows Subsystem for Linux)运行代码

若上述方法均无法解决,可在Windows上安装WSL,切换到Linux环境运行代码。MediaPipe Model Maker旧版本在Linux环境下不存在文件加载限制,能正常执行Dataset.from_folder逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 16:27:03