[手势识别] CNN + OpenCV 手势识别记录
这几天没事,想着再学点一些视觉识别方向的东西,因为之前做了验证码识别,有了机器学习的信心,因此这次打算做个手势识别,参考了很多网上的图像处理方式,中间也遇到了很多问题,最终算是做出来了吧。
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%左右。

[手势识别] CNN + OpenCV 手势识别记录的更多相关文章
- opencv 手势识别
我使用OpenCV2.4.4的windows版本+Qt4.8.3+VS2010的编译器做了一个手势识别的小程序. 本程序主要使到了Opencv的特征训练库和最基本的图像处理的知识,包括肤色检测等等. ...
- OpenCV——手势识别
使用ANN神经网络训练数据后进行手势识别. #include "header.h" int main() { ; //训练每类图片数量 ; //训练类数3:石头剪刀布 ; ; st ...
- OpenCV学习记录(二):自己训练haar特征的adaboost分类器进行人脸识别 标签: 脸部识别opencv 2017-07-03 21:38 26人阅读
上一篇文章中介绍了如何使用OpenCV自带的haar分类器进行人脸识别(点我打开). 这次我试着自己去训练一个haar分类器,前后花了两天,最后总算是训练完了.不过效果并不是特别理想,由于我是在自己的 ...
- opencv使用记录
/*2017-1-14*/ /*视频的读取...*/ int g_n=0; void on_change(int pos,void *)//看来void*不能省! { printf("g_n ...
- opencv学习记录
#include<iostream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui ...
- OpenCV学习记录之摄像头调用
关于opencv调用摄像头的问题主要是因为摄像头的打开有延时.在显示图像前,要用if语句判断图像是否存在.(否则会报错) 具体的:教程里的源程序,将if条件句里,break去掉,并增加else语句. ...
- OpenCV学习记录(一):使用haar分类器进行人脸识别 标签: opencv脸部识别c++ 2017-07-03 15:59 26人阅读
OpenCV支持的目标检测的方法是利用样本的Haar特征进行的分类器训练,得到的级联boosted分类器(Cascade Classification).OpenCV2之后的C++接口除了Haar特征 ...
- OpenCV学习记录(C++版本)
HighGUI组件 图像的载入:imread()函数 Mat imread(const string& filename, int flag = 1)其中flag=1代表读入RGB彩色图像,- ...
- cnn常用参数记录
1. epoch 在代码中经常见到n_epochs这个参数,该参数到底是什么意思呢?答案如下: 在一个epoch中,所有训练集数据使用一次 one epoch = one forward pass a ...
随机推荐
- C++开源库(一) ----libConfig详解
博主天生患有蛋疼疾病,写博不易,转载注明出处http://www.cnblogs.com/liboBlog/,谢谢! 在写程序的时候必不可少的一个部分就是conf文件的解析,但是如果自己解析的话会比较 ...
- 核心容器的两个接口(ApplicationContext和BeanFactory)引发出的问题
BeanFactory 才是Spring 容器中的顶层接口.ApplicationContext 是它的子接口. ApplicationContext 它在构建核心容器时, 创建对象采取的策略是采用立 ...
- lightoj1009【DFS】
思路: 连通快+二分图,每次+二分图大的元素个数. #include<bits/stdc++.h> using namespace std; typedef unsigned long l ...
- aimOffset注意事项
AimOffset的记录 AimOffset是什么,就是动画(相对于某个具体姿势比如待机动作的)叠加. AimOffset有什么用,简单说就是叠加动作,比如无双中骑马挥刀动作叠加. 注意步骤 1所有分 ...
- FString转到char* TCHAR*
int ARPG_Database::BP_GetColumnIndex(int resultSet, FString columnName) { return GetColumnIndex(resu ...
- Openjudge2729 Blah数集(单调队列)
2729:Blah数集 总时间限制: 3000ms 内存限制: 65536kB 描述 大数学家高斯小时候偶然间发现一种有趣的自然数集合Blah,对于以a为基的集合Ba定义如下:(1) a是集合Ba ...
- 剑指Offer的学习笔记(C#篇)-- 树的子结构
题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 一 . 二叉树的概念 树形结构是一种典型的非线性结构,除了用于表示相邻关系外,还可 ...
- DOM核心API
是什么? 是各大浏览器提供的针对HTML和XML文档的一个API(Application Programming Interface应用程序编程接口).DOM描述了一个层次化的节点树,容许开发人员对D ...
- falsk-sqlalchemy 连接数据库出现 No module named 'MySQLdb'
安装pymysql:pip install pymysql 按照 Flask-SQLAlchemy 文档的说明,配置好 SQLALCHEMY_DATABASE_URI = 'mysql://usern ...
- Huber鲁棒损失函数
在统计学习角度,Huber损失函数是一种使用鲁棒性回归的损失函数,它相比均方误差来说,它对异常值不敏感.常常被用于分类问题上. 下面先给出Huber函数的定义: 这个函数对于小的a值误差函数是二次的, ...