基于MediaPipe Hands手势检测系统-python
项目描述
基于深度学习MediaPipe Hands模型的手势识别系统。通过flask框架进行开发
项目功能
系统界面分为以下几个主要部分
视频显示区:实时显示摄像头画面和检测结果
运行环境
开发环境 pycharm
运行环境 py3.8
项目技术
前端技术
flask框架构建界面
后端技术
1. 计算机视觉(Computer Vision)
OpenCV(cv2):用于摄像头图像捕获、图像处理(颜色空间转换、轮廓检测、凸包计算等)和实时显示。
凸包(Convex Hull):用于检测手部轮廓,判断手指是否伸直(指尖是否在凸包外部)。
点与多边形测试(pointPolygonTest):用于计算指尖与手部轮廓的距离,判断手指是否张开。
2. 机器学习 & 深度学习
MediaPipe(Google 开源框架):
使用了 mediapipe.solutions.hands 模块,基于深度学习模型进行 手部关键点检测(21 个关键点)。
该模型能够实时检测手部姿态,并返回每个关键点的坐标(hand.landmark)。
3. 数学计算
向量角度计算:
使用 numpy 计算两个向量之间的夹角(np.dot 点积 + np.arccos 反余弦),用于区分不同手势(如数字 “1” 和 “9”)。
欧几里得距离:
通过指尖坐标与手部轮廓的关系判断手指是否伸直。
4. 手势识别逻辑
规则引擎:
根据伸出的手指数量(up_fingers)和指尖角度,匹配预定义的手势规则(如数字 “1”~”5″、”OK”、”Rock” 等)。
例如:
伸出 1 根手指(食指)且角度 <160° → 识别为 “9”。
伸出 2 根手指(食指+中指)→ 识别为 “2”。
伸出 5 根手指 → 识别为 “5”。
5. 交互逻辑
输入序列检测:
检测用户是否按特定顺序输入手势(如 [‘4′,’3′,’2′,’5’]),用于触发结束标志(end_flag=1)。
实时显示:
使用 cv2.putText 和 cv2.circle 在图像上标注识别结果和关键点。
6. 硬件交互
摄像头访问:
通过 cv2.VideoCapture(0) 调用默认摄像头,实时捕获视频流。
启动:手势识别.py
性能优化
模型预加载减少等待时间
以上系统源码经过技术整理与调试,确保能正常运行