目 录
摘 要 I
ABSTRACT II
第一章 引言 1
1.1研究背景和动机 1
1.2人机交互的重要性 2
1.3传统的人机交互方式 2
1.4手势识别技术的出现和发展 3
第二章 相关技术综述 5
2.1基于姿态估计的人机交互技术 5
2.2MediaPipe 的相关介绍与应用 5
2.3系统相关技术应用 6
2.3.1手部检测 6
2.3.2姿态检测 6
第三章 系统需求分析 7
3.1功能需求 7
3.1.1手势识别 7
3.1.2姿势检测 7
3.1.3动作识别 7
3.1.4实时反馈 7
3.1.5用户界面 8
3.2性能需求 8
3.2.1实时性 8
3.2.2精度和准确性 8
3.2.3鲁棒性 8
3.2.4可扩展性 9
3.2.5资源消耗 9
3.3技术需求 9
3.3.1MediaPipe 9
3.3.2计算机视觉算法 10
3.3.3实时图像处理 10
3.3.4算法优化和加速 10
3.3.5硬件要求 11
3.4用户体验需求 11
3.4.1直观性和易用性 11
3.4.2响应性和流畅性 11
3.4.3友好的界面设计 11
3.5 总结 11
第四章 系统设计与实现 12
4.1系统框架 12
4.2手势检测与识别模块实现 12
4.2.1数据获取与预处理 12
4.2.2姿态估计模型 14
4.2.3交互逻辑与控制模块 15
4.3用户交互模块实现 16
4.3.1系统功能设计 16
4.3.2系统实现和调试 23
4.3.3系统创新功能实现 32
4.3.4系统性能评估和优化 35
第五章 试验和结果分析 37
5.1实验环境和数据集介绍 37
5.1.1实验环境 37
5.1.2数据集 37
5.2实验设计 38
5.3实验测试 38
5.3.1摄像头连接测试 38
5.3.2手部姿态识别测试 39
5.3.3人体姿态估计测试 39
5.3.4系统稳定性测试 39
5.3.5响应时间性能测试 40
5.3.6平均帧率测试 40
5.3.7单人手势识别测试 41
5.3.8单人姿态估计测试 41
5.4.实验结果 41
第六章 讨论与展望 43
6.1本研究的成果和不足 43
6.2应用和推广前景 43
6.3 结论 45
参考文献 46
附录 健身 AI 实现关键代码 48
致 谢 57
第三章 系统需求分析
在人机交互领域,基于计算机视觉和机器学习的技术取得了显著进展。Mediapipe 作为一种强大的实时计算机视觉框架,提供了丰富的功能和模块,可以用于实现各种人机交互系统。本文的目的是设计和实现一个基于 Mediapipe 的人机交互系统,能够识别和分析用户的手势和姿势等信息,以实现更自然、直观和高效的人机交互体验。在经过市场调研和相关文献的查阅,特针对该系统设计做需求分析。本章节将详细阐述系统的功能需求、性能需求、技术需求、用户体验需求。
3.1功能需求
3.1.1手势识别
系统应能够实时捕捉和跟踪用户的手势动作,包括手势的位置、形状和动态变化。系统应能够识别和分类常见手势,如拳头、手掌、手指等,以及手势的不同动作,
如抓取、挥动等。
系统应支持多种手势组合和连续动作的识别,以提供更丰富的交互方式。
3.1.2姿势检测
系统应能够实时追踪和分析用户的身体姿势,包括关节的位置、角度和身体的姿态。
系统应能够识别常见姿势,如站立、坐姿、举手等,以及姿势的转换和动态变化。系统应支持多关节和复杂姿势的检测和识别,以满足不同交互场景的需求。
3.1.3动作识别
系统应能够识别用户的动作序列,并进行分类和分析,以理解用户的意图和行为。系统应支持常见动作的识别,如挥手、握手、打开等,以及动作的持续时间和速
度等参数的提取。
系统应能够捕捉动作的细微变化和动作序列的变化,以实现更精准的交互控制。
3.1.4实时反馈
系统应能够实时向用户提供反馈,包括识别结果的展示和相关操作的执行。 反馈可以通过图像、文本、声音等方式呈现,以满足用户的感知和交互需求。
反馈的形式和内容应根据不同的交互情境和用户需求进行灵活配置和定制。
3.1.5用户界面
系统应具备友好的用户界面,易于使用和交互。
用户界面应能够显示识别结果、设置选项和进行用户反馈,以提供交互控制和信息展示的功能。
用户界面的设计应考虑界面布局、元素交互和可视化效果,以提供良好的用户体验和操作效率。
以上是基于 Mediapipe 的人机交互系统的功能需求的详细描述。通过实现这些功能,系统能够实时捕捉和分析用户的手势、姿势和动作,提供实时反馈和交互控制, 以实现丰富的人机交互体验和功能应用。
1.import cv2
2.import numpy as np
3.import PoseModule1 as pm
4.import time
5.import pyttsx3 # 导入语音库
6.
7.engine = pyttsx3.init() # 初始化语音引擎
8.engine.setProperty("rate", 150)
9.
10.def speak(text):
11.engine.say(text)
12.engine.runAndWait()
13.
14.def do_dumbbell_curls():
15.speak("请开始哑铃弯举动作。")
16.cap = cv2.VideoCapture(0)
17.detector = pm.PoseDetector()
18.
19.curl_count = 0
20.is_curling = False
21.pTime = 0
22.
23.while True:
24.success, img = cap.read()
25.# 翻转图像,使自身和摄像头中的自己呈镜像关系
26.img = cv2.flip(img, flipCode=1) # 1 代表水平翻转,0 代表竖直翻转
27. img = cv2.resize(img, (1280, 720))
28.img = detector.findPose(img, draw=False)
29.lmList = detector.findPosition(img, draw=False)
30.
31.if len(lmList) != 0:
32.# 计算手臂的弯曲角度(肩膀、肘部、手腕)
33.# 右 臂
34.# angle = detector.findAngle(img, 12, 14, 16) 哑铃弯举
35.# 左 臂
36.angle = detector.findAngle(img, 11, # 肩 膀
37. 13, # 肘 部
38. 15) # 腕 部
39.
40.if angle > 160:
41.if not is_curling:
42.is_curling = True
43.curl_count += 1
44.speak("完成一次哑铃弯举。")
45.
46.else:
47.is_curling = False
48.
49.