实验报告
实验类别
勇于创新类
实验主题
其他
实验内容
手势识别版打地鼠
实验动机
你可曾在回合制游戏里因为最后五秒鼠标点不到技能而被本来赢不了的对面反杀?
你可曾在国际跳棋里因为无法走棋而被系统警告“这是您第二次超时,超过三次超时,您将会被请出房间。请认真对待游戏”?
你可曾有用触摸板划拉放在膝盖上的电脑,发现光标岿然不动;连上鼠标,发现还不如触摸板好使的经历?
笔记本电脑有三大噩梦:频繁断触的无线鼠标、毫无灵敏度可言的触摸板、总是飚红的内存加速球。
就前二者,我只能说:谢邀,深有体会。
我想“关键时刻掉链子”这个词应该是为无线鼠标和触控板量身打造的。
虽然我已经通过更换设备基本解决了上述问题,但如何让光标随心而动依旧困扰着我。在学习人机交互内容后,我了解到到手势识别可以帮助我解决问题。
但新的问题又产生了。
在手势识别、无线鼠标、触摸板都可用的情况下,如何定量比较它们的实际效率,以确定当下最好的使用效果呢?
在参考众多资料后,我决定制作一个支持手势识别的小游戏,通过不同交互方式对交互效果进行合理判断、分析。
设计思路
让不同的参与者使用不同的交互方式在指定时间内完成相同任务,通过比较分数或完成度以定量分析交互方式的优劣。
实验设计
实验目的
得到不同参与者使用不同交互方式在指定时间内完成打地鼠小游戏的得分,进一步分析不同交互方式的优劣。
实验过程
我的外婆、外公、爸爸、妈妈、姐姐和我六个人分别使用四种不同的交互方式各完成打地鼠小游戏五次,并记录个人得分。最终,通过问卷调查收集参与反馈。
实验过程中用到的交互方式如下:
有线鼠标(使用半年的RAZER RZ01-0254)
无线鼠标(使用两年的INPHIC P-M1)
电脑触摸板(ASUS VivoBook)
手势识别
原始用户数据
详见Data.xls。
数据分析方法
使用数据分类+求平均值的方法对数据进行简单处理。
实验结论
交互效果:有线鼠标>无线鼠标>手势识别≈触摸板
关键实验步骤实现简述
手势识别:通过识别手指的骨节点位置状态对不同的手势进行判定,进而实现不同的光标操作。通过接触判定对动画地鼠进行打击。
本实验中,主要利用Python语言调用mediapipe库,对8号骨节点(食指的顶部节点)和12号骨节点(中指的顶部节点)位置进行判定,以确定移动光标和光标点击两个主要功能。
实验进行:
让所有参与者根据操作说明,单独完成实验,并自行记录数据。
实验准备:
为保障实验效果,对所有操作者都进行了统一的有线鼠标、无线鼠标、触摸板、手势识别教学。
结论
总结
相比传统的交互方式,手势识别的表现中规中矩。优点在于不会断触失灵,但其使用体验仍有巨大的进步空间。
局限性
实验局限性
在实验过程中,参与者的选取不够随机化,群体不够庞大,也没能很好地根据“人具有学习能力”这一特点设计出更合理的实验流程。
在实验材料方面,受制于现有设备,不同的自变量选取也不够严谨。
功能局限性
对于手势识别,其在灵敏度及识别效果方面仍然存在局限性。
问题反馈
根据问卷反馈,实验中存在以下问题:
大多数参与者反映有“明明竖起中指却无法实现敲击效果”的体验。
部分参与者反映无法对地鼠出现和地鼠击晕作出区别,导致反复敲击,浪费时间。
部分参与者反映无法及时在地鼠洞穴之间进行移动,从而延误敲击。
部分参与者反映背景颜色与洞穴颜色相近,不便操作。
相关改进
优化地鼠形态及场景设计。
优化敲击效果。在地鼠被击晕后,洞穴位置下移,以便更好地实现区别。
优化随机算法。单次出现的地鼠数量增加,便于参与者自行选择当前地鼠出现的最近最合适的洞穴。同时支持单次敲击多只地鼠,提高操作上限。
优化识别方式。目前,只要食指与中指的夹角小于10°(不太精确),识别效率会有显著提升。
未来工作
我将会继续深入学习OpenCV与mediapipe相关内容,深入研究手势识别的相关功能,以提高交互体验。
参考、学习资料
1.【内容参考】 https://github.com/sockerboy/poke_a_mole
2.【学习mediapipe】 https://blog.csdn.net/weixin_45930948/article/details/115444916
3.【学习PyQt5】 https://blog.csdn.net/Dontla/article/details/105282224
4.【学习调用系统摄像头并修改对于参数】
https://www.cnblogs.com/ybqjymy/p/12510042.html
5.【学习保存视频帧图以分析画面】 https://blog.csdn.net/weixin_40922285/article/details/102967331
6.【学习利用骨节点简单识别手势】 https://blog.csdn.net/zmdsjtu/article/details/81381030
7.【学习如何关闭界面】 https://cloud.tencent.com/developer/ask/sof/1722452
8.【学习QtWidgets】 https://blog.csdn.net/Dontla/article/details/105251700
9.【学习autopy】 https://blog.csdn.net/sandalphon4869/article/details/90272247
10.【学习QTimer定时器实现计时】 https://blog.csdn.net/amnes1a/article/details/70210205