这几天没事,想着再学点一些视觉识别方向的东西,因为之前做了验证码识别,有了机器学习的信心,因此这次打算做个手势识别,参考了很多网上的图像处理方式,中间也遇到了很多问题,最终算是做出来了吧。
1.训练集获取
训练集获取用opencv打开摄像头进行录制,录制过程中对图像进行初步的处理,以满足训练集的降噪要求。
初步处理的函数如图
然后是录制
这里录制时指定了录制框,按下p进行保存。q退出。
2.搭建CNN
本来是直接用的tensorflow,之前也用的是,但是后来改用了keras,一来是因为我在tensorflow输入处理的时候onehot出现了点问题,导致准确率一直很低,我当时没考虑到这个问题,一直以为是网络的问题和参数问题,反复调试,都不行;二来是因为keras写起来比较简单,model.add就可以了,而且还有比较详细的网络评估,使用起来很方便,于是就用了keras,当然,也出现了onehot的问题,索性会报错,我及时发现了,改过来就好了。下面是代码,看起来比较简单。
选用的是tensorflow作为的后端,tensorflow作为后端图片的输入格式是[-1,width,height,channels]。
对应的input_shape如图
对要训练的图片进行处理和reshape
训练并保存模型
3.测试模型
15轮我电脑跑了个把小时吧,准确率97%左右。