如何基于MediaPipe Model Maker实现双手手势识别与预测
MediaPipe手势识别支持双手的解决方案
Android端配置调整
仅修改defaultNumResults无法实现双手检测,因为Gesture Recognizer依赖HandLandmarker完成手部检测,需同时配置HandLandmarker的参数:
// 构建基础配置 val baseOptions = BaseOptions.builder() .setModelAssetPath("your_custom_model.task") .build() // 配置手部检测器,设置检测2只手 val handLandmarkerOptions = HandLandmarkerOptions.builder() .setBaseOptions(baseOptions) .setNumHands(2) .build() // 配置手势识别器,关联手部检测器并设置结果数 val gestureRecognizerOptions = GestureRecognizerOptions.builder() .setHandLandmarkerOptions(handLandmarkerOptions) .setDefaultNumResults(2) .build() // 创建手势识别器实例 val gestureRecognizer = GestureRecognizer.createFromOptions(context, gestureRecognizerOptions)
Python训练端调整
MediaPipe Model Maker默认基于单手数据训练,要支持双手需从数据集和模型配置两方面修改:
准备双手数据集:每个样本需包含两只手的关键点标注,双手组合手势需单独定义标签(例如"双手比心")。
自定义模型规格:通过
ModelSpec设置num_hands=2,确保训练时模型适配双手特征:
from mediapipe_model_maker import gesture_recognizer # 加载双手标注的数据集 data = gesture_recognizer.Dataset.from_folder(dirname="your_two_hand_dataset") train_data, rest_data = data.split(0.8) validation_data, test_data = rest_data.split(0.5) # 配置支持双手的模型规格 spec = gesture_recognizer.ModelSpec( model_name="gesture_recognizer", hparams=gesture_recognizer.HParams(num_hands=2) ) # 训练模型 model = gesture_recognizer.GestureRecognizer.create( train_data=train_data, validation_data=validation_data, model_spec=spec, epochs=10 ) # 导出适配双手的模型文件 model.export_model("two_hand_gesture_recognizer.task")
关键注意事项
- 训练时的
num_hands参数必须与Android端的setNumHands值保持一致(均为2)。 - 双手组合手势的标签需在数据集中明确标注,模型才能学习到对应的特征组合。
内容的提问来源于stack exchange,提问作者Muhammad Hazrat
相关产品推荐
相关产品推荐

