手势识别项目长期记录(已归档)
内容目录

前言:

相关代码见github仓库

项目环境:

环境名 版本
Python 3.9.18
numpy 1.26.1
opencv-python 4.8.1.78
torchvision 0.13.0+cu116
mediapipe 0.10.8

目前应该就这些,后续有变化再修改

2023.11.15

数据集:Sebastien Marcel Static Hand Posture Database

数据集来源

拟使用Sebastien Marcel Static Hand Posture Database
优点:

  • 数据量足够大,且足够复杂Images in pnm format. 6 hand postures (a, b, c, point, five, v), about 10 persons. 训练集总共5000+张图片
  • 每张图片较小,基本都是60 * 70像素的图片,因此训练量会比较小
  • 已经全部标注好了,且采用的是我能够理解的标注方式
  • image.png|500
    六种手势的区分度还算可以?也许训练起来会有比较好的效果
  • 有相应的论文可以参考
    缺点:
  • 图片格式是很陌生的.ppm格式,不清楚是否会对使用造成影响
  • 训练集以及对应的论文非常古老(1999),以及对应论文似乎没讲很多东西?

.ppm格式

PPM 是通过RGB三种颜色显现的图像(pixmaps)
用python代码来跑的话

from PIL import Image  
image_path = "D:\code&project\Py_Projects\imgs\V-train001.ppm"  
image = Image.open(image_path)  
print(image)

输出<PIL.PpmImagePlugin.PpmImageFile image mode=RGB size=194x187 at 0x269439258B0>可见是RBG类型,且有基本的参数

2023.11.16

实现数据导入

使用pyTorch的dataSet和dataLoader两个类实现数据导入,详情见
pyTorch导入数据

第一次运行

解决了数据导入问题后,便可以直接拼接015pytorch入门-完整的训练流程中的代码,只需将获取dataLoader相关代码替换即可。训练十次,正确率约为33%;训练100次,最终正确率约为55%。

file

虽然结果上来说正确率偏低,但也是正常的,毕竟只是随便找的一个网络模型,并没有专门考究过,属于是把程序跑通就是最大的胜利,以及数据导入程序中的标准差等常量参数也没有根据数据集进行专门的调整
因此下一步可以考虑1、完善dataLoader文件。2、选择更优秀的网络模型。3、选取更合适的损失函数优化器等

项目结构整理

image.png|252

将数据读入的三个相关py文件统一存放在data文件夹中,cnnModel存储cnn网络的相关结构,train是训练的核心代码,一些参数等还没专门提取出来存放,之后有空再优化

测试代码的添加

杂糅了基于opencv和mediapipe的手部跟踪017pyTorch入门——完整的模型验证套路写了一个可以实时观看观察的测试代码,效果如下两图

调用摄像头

通过摄像头实时传入图像模拟实际场景,左上角为帧率,上部居中的数字为其手势类型,根据如下顺序对应数据集中的类型

    &quot;0&quot;: &quot;A&quot;,  
    &quot;1&quot;: &quot;B&quot;,  
    &quot;2&quot;: &quot;C&quot;,  
    &quot;3&quot;: &quot;Five&quot;,  
    &quot;4&quot;: &quot;Point&quot;,  
    &quot;5&quot;: &quot;V&quot;

image.png|475

在pycharm运行栏中输出每帧图像通过模型后输出的结果参数,六个数据分别对应上面六个参数的可能性

image.png|475

2023.11.22

整理待办事项

1、前期处理

1.1、数据集整理

确定一个较为合适的数据集,之后都使用这个数据集,可以考虑拼接多个数据集、删减一些没必要的手势、挑选合适的手势等等

1.2、数据集处理

数据集的读入,读入后的一些处理(例如正则化等)

2、模型训练

2.1、选取模型

选取一个更加合理优秀的网络模型(反正现在的cnn绝对有问题)

2.2、待定

3、实际处理

3.1、考虑用cv相关知识去处理

例如可以把摄像头获得的图像进一步处理,分割出手,以此来获得更高精度的识别

3.2、待定

1由另一位同学负责,3由我负责、

2023.11.24

完成了上述3.1需求,接下来等1需求做完后,将其对数据集做的图像处理应用到对应代码上即可
3.1需求的相关文档:分割手部图像

2023.11.25

归一化处理

详情见归一化参数的获取

代码整合

将昨日的分割手部图像的代码与原先的模拟实际环境的测试代码进行了整合,并进行了相应的测试
以及严重怀疑数据集存在较大问题,差异化过小,导致有些手势只有摆的很标准的时候才能够正确识别,且正确率不高

归档

在更换了数据集后有了95%的正确率,实际使用中也有较好的表现,因此暂时归档,期待未来的进一步优化与深入

上一篇
下一篇