前言

本项目基于Google MediaPipe和Android CameraX技术栈,实现了一个高性能的实时手势识别Android应用。项目采用了MediaPipe最新的Gesture Recognition API,支持多种手势类型的识别,包括竖大拇指、胜利手势、张开手掌等常见手势,同时具备实时手部关键点检测和绘制功能。应用使用前置摄像头进行实时手势识别,能够准确检测和分类用户的手势动作,并在界面上实时显示识别结果和置信度分数。

本项目不仅适用于手势识别相关的研究和开发,也可以作为MediaPipe在Android平台应用的实践参考,特别是对于想要学习计算机视觉、手势识别以及Android Camera开发的开发者来说,具有很高的参考价值。

项目特性

  1. 实时手势识别:基于MediaPipe Gesture Recognition模型,支持7种常见手势类型
  2. 手部关键点检测:实时检测并绘制21个手部关键点和骨架连接线
  3. 多手检测:支持同时检测多个手部(可自定义数量)
  4. 高性能推理:使用CPU推理,保证在各种设备上的兼容性和稳定性
  5. 实时绘制:自定义OverlayView实现手部关键点和识别结果的实时绘制
  6. 相机集成:基于CameraX实现相机预览和图像分析
  7. 权限管理:完善的相机权限申请和处理机制

技术架构:

  • MediaPipe: Google开源的机器学习框架,提供高效的手势识别能力
  • CameraX: Android Jetpack相机库,简化相机操作和生命周期管理
  • 自定义绘制: 基于Canvas的实时绘制系统,支持手部关键点和识别结果可视化
  • 多线程处理: 后台线程处理图像分析,避免阻塞UI线程

官方模型支持的手势类型

MediaPipe官方支持手势识别模型支持以下7种手势:

手势名称 英文名称 描述 应用场景
👍 Thumb_Up 竖起大拇指 点赞、确认
👎 Thumb_Down 向下大拇指 不赞同、否定
✌️ Victory 胜利手势 拍照、胜利表示
🤟 ILoveYou 我爱你手势 表达情感
Closed_Fist 握拳 抓取、确认
Open_Palm 张开手掌 停止、展示
👉 Pointing_Up 向上指 指示、选择

使用自定义模型

参考我上一篇文章《MediaPipe自定义手势识别训练模型》训练自定义模型,获取custom_gesture_recognizer.task模型文件,放在assets/目录下,然后修改GestureRecognizerHelper中的MODEL_FILE参数

项目介绍

下面是项目核心代码路径。

app/src/main/java/com/yeyupiaoling/gesturerecognizer/
├── MainActivity.java           # 主活动类,负责相机集成和生命周期管理
├── GestureRecognizerHelper.java # MediaPipe手势识别封装类,核心识别逻辑
└── OverlayView.java           # 自定义绘制视图,实现手部关键点和结果绘制

app/src/main/assets/
└── gesture_recognizer.task    # MediaPipe预训练模型文件
  • 下面是该项目简单数据流程图

wechat_2025-07-05_110216_759.png

  • 下面是项目核心依赖的库,在app/build.gradle中配置。
dependencies {
    // MediaPipe手势识别
    implementation 'com.google.mediapipe:tasks-vision:0.10.14'

    // CameraX依赖
    implementation 'androidx.camera:camera-core:1.3.4'
    implementation 'androidx.camera:camera-camera2:1.3.4'
    implementation 'androidx.camera:camera-lifecycle:1.3.4'
    implementation 'androidx.camera:camera-view:1.3.4'
}
  • 下面是项目核心参数调优,在GestureRecognizerHelper.java中配置。
    可在 GestureRecognizerHelper.java 中调整以下参数:
// 手部检测置信度(0.0-1.0)
private final float minHandDetectionConfidence = 0.5f;

// 手部跟踪置信度(0.0-1.0)
private final float minHandTrackingConfidence = 0.5f;

// 手部存在置信度(0.0-1.0)
private final float minHandPresenceConfidence = 0.5f;

// 最大检测手数(1-2)
private final int maxNumHands = 2;

演示截图

获取源码

在公众号中回复【手势识别Android项目源码】即可获取源码。

小夜