项目实训负责的一个游戏模块,考虑使用手势识别来作为控制输入。因为是游戏,考虑到时延,识别模块肯定需要部署在前端(web端,手机客户端,小程序端)之类的。目前项目前端暂定为小程序。
现成的方案有:
大概体现也就是直接训练个分类模型,或者先输出手部关键点。
没有在移动端部署模型的经验,初步考虑使用tensorflow.js部署。这里模型网络传输消耗的时间、框架传输消耗、初始化时间是个非常值得考虑的问题,这里的网络资源消耗不能无视。(所以类似依赖cdn导入的就比较不好处理)
这里有个现成的解决方案,google的mediapipe,它集成了诸多深度学习的解决方案,包括人体姿态,手部关键点,脸部mesh等。可以参考它在python端的使用。使用它的手部关键点检测,不考虑它的视频输入时的跟踪,考虑图片输入。
https://github.com/google/mediapipe
以python调用为例:
mp_hands = mp.solutions.hands
hands = mp_hands.Hands(
static_image_mode=True,
max_num_hands=2,
min_detection_confidence=0.75,
min_tracking_confidence=0.5)
使用opencv调用摄像头拍摄,使用hands模块的识别,返回的res.multi_hand_landmarks包含手部的21个关键点的三维坐标(x, y, z),对于在屏幕上绘制只需要x,y轴坐标即可,z是相对深度。
这里的模块输出的是21个点坐标,但具体到各种手势,还需要简单处理下。
以简单的抓握为例,基于上述模块,可以训练一个小分类模型判断。输入是21个点的三维坐标,输出分类,每个分类采集几千个样本就够了,几分钟就能采集分类完。
数据集的采集就很方便了,录入时注意下按分类分批录入保存下来坐标就可以了。
dense (Dense) (None, 42) 1806
dense_1 (Dense) (None, 15) 645
dense_2 (Dense) (None, 2) 16
差不多这样的一个简单模型就能到95以上的精度。。。
后面具体在移动端部署,大概也是这种关键点+手势判断的方案,关键点用来辅助动画之类的,分类模型用来判断各种事件。具体看开发时的需求,(目前小程序前端的方向感觉不是很清晰)。
这样的方案还是不够的,目前能想到的有几个点:
另外,主要任务还是开发,需要设计好的用户界面。
还是以抓握为例
具体实现还是要等,看具体开发时什么需求。