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:手动预处理数据,绕过内置文件加载逻辑
如果暂时无法升级依赖,可手动处理图片数据,提取手部关键点后再传入模型训练:
- 遍历本地图片文件夹,用MediaPipe的HandLandmarker单独处理每张图片,提取手部关键点数据
- 将处理后的数据整理成模型要求的格式,替代
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
相关产品推荐
相关产品推荐

