一、本轮迭代目标
本 Sprint 主要目标是完成 基于浏览器端的手势控制系统雏形,实现如下基础功能:
- 搭建前端 Web 应用结构与 UI 页面
- 集成 MediaPipe 手势识别模型,完成实时手势检测
- 映射部分手势为系统控制行为(鼠标移动、点击等)
- 搭建基础手势处理逻辑与组件封装结构
- 支持语音识别指令发送流程(准备后端对接)
二、本轮主要完成内容
类别 |
工作内容 |
前端搭建 |
基于 Vite + Vue 3 + TypeScript 完成项目结构、模块划分、页面初始化 |
手势识别 |
集成 Google MediaPipe WASM 模型,完成实时检测与渲染 |
控制逻辑 |
封装 GestureHandler 、TriggerAction ,实现手势到系统操作的映射 |
UI设计 |
完成仪表盘式主界面设计,支持响应式、自定义手势预览等 |
模型结构 |
初步梳理 Detector 识别流程,统一封装初始化与推理逻辑 |
后端准备 |
初始化 Python 接口 WebSocket 构建,支持语音识别交互 |
三、系统结构设计
[用户摄像头]
↓
[VideoDetector.vue] → 捕捉视频帧,传入检测器
↓
[Detector.ts] → 调用 MediaPipe 识别手势
↓
[GestureHandler.ts] → 映射行为(鼠标/键盘/语音)
↓
[TriggerAction.ts] → 向后端/系统发出控制指令
↓
[Python 后端](语音识别/扩展指令) ← WebSocket 接入
四、核心技术栈与理由
技术 |
用途 |
原因 |
Vue 3 + Vite |
前端框架 + 构建工具 |
快速开发,热更新快,Composition API 更灵活 |
TypeScript |
增强类型约束 |
减少运行时错误,提升可维护性 |
MediaPipe Tasks |
手势识别模型 |
体积小,支持浏览器部署,准确率高 |
WebSocket |
前后端实时通信 |
保持实时交互流畅 |
Python + FastAPI |
后端扩展接口(语音) |
快速搭建接口,后续支持 Py 模型运行 |
五、主要功能点与说明
1. Detector 类封装
- 初始化 WASM 模型与识别器
- 封装
detect()
每帧调用逻辑
- 支持获取
landmarks
, gestures
, handedness
2. 手势识别与映射
- 仅识别食指 → 鼠标移动
- 食指 + 中指 → 鼠标点击
- 食指 + 拇指捏合 → 滚动
- 四指竖起 → 发送快捷键
- 小指+拇指 → 启动语音识别(前端 WebSocket)
3. UI 界面模块
- 实时视频预览窗口
- 子窗口:手势反馈 / 执行动作提示
- 配置面板:开关检测 / 配置行为映射
六、识别代码示例(关键手势)
if (gesture === HandGesture.ONLY_INDEX_UP) {
this.triggerAction.moveMouse(x, y)
}
if (gesture === HandGesture.INDEX_AND_THUMB_UP) {
this.triggerAction.scrollUp()
}
- 每种手势匹配后,调用封装的 WebSocket + 系统接口发送动作
TriggerAction
支持复用
七、问题与解决方案
问题描述 |
解决方法 |
WebSocket 连接后反复断开 |
增加连接状态判断 readyState !== OPEN ,避免提前发送 |
Tauri 插件调用 invoke undefined |
使用 npm run tauri dev 启动,而非普通浏览器启动 |
页面刷新后路由丢失(404) |
Vue Router 改为 createWebHashHistory() 模式 |
模型未加载或报错提示 |
增加 loading 控制,捕捉初始化异常 |
八、未来规划(Sprint 2 预告)
方向 |
说明 |
多手势拓展 |
三指滚动、多指触发多功能、多手联合判断 |
自定义 .task 模型 |
支持用户采集数据,自定义模型替换现有 MediaPipe 模型 |
后端语音指令集成 |
Vosk 模型识别语音,触发系统控制 |
设置项管理 |
实现用户自定义快捷键、手势配置界面 |