手势识别和手 landmark 总结
不知不觉已经做了这个项目快一个月了。先总结下最近的过程。
首先做了基于landmark的手势分类。主要采用了 SVM 和 ANN 。其实这里的关键是如何做特征工程。有几种方案:
- 直接输入landmark的坐标。显然这不是一个好的方案。
- 输入相对坐标,比如计算每个关键点到手腕那个点的相对坐标,效果还可以。当然,这里可以计算任意多个点。
- 输入相对距离。和相对坐标差不多,最终采用了该方案。
麻烦的还是做数据集,把数据存在 .csv 文件中。
手landmark 回归。经历了摄像头对数据的采集,数据的处理,主要是使用 meidiapipe 先进行标注,保存为 labelme 格式,然后再labelme 中手动去修改和标注。最终制作了 Interhand 模型格式的数据集。可以使用 COCO 进行读取。
下面就是InterHand 模型的魔改,首先将 3D 的模型修改了 2D,模型输入为检测到的手的图片,输出为手的类别和landmark,因此是两个任务的模型,当这两个任务的loss 一起求和训练时候,模型很难收敛到理想的误差内,因此,采用了另外一种思路。
先把预训练的模型的backbone 权重加载到模型中,训练手 landmark 模型,将该模型训练好,一般 差不多到 10 左右,固定这些权重,修改手的分类头引入非线性层,然后再训练手的分类模型。最终得到2D的结果。
认识了静态手势和动态手势,静态手势就是单张图像,动态手势是一段视频的多张连续帧。
依旧是基于 landmark 的手势识别,可以看 poseC3D 的项目。
静态数据 根据图像大小和标注转为热图。其实这里有个问题:如果只是转为2D 的热图,那么 其实在图像中只是一个个高亮的点。有两种方法解决该问题,把 landmark 的序列信息隐藏到关键点亮度中;每个关键点是一张热图。

浙公网安备 33010602011771号