# Gesture Cascadeclassifier based on OpenCV
由于在ARM手势识别比赛中用到了基于OpenCV的级联分类器,为了方便在linux上训练和测试某一手势的级联分类器,并挑选最优的分类器模型。将一系列常用的指令和操作用python做如下封装,并总结相关经验。(样例图片涉及版权,如仅供测试代码使用)
### 环境需求
#
- linux下编译opencv3.0.0以上,可运行 opencv_traincascade
- python2.7 cv2
</br>
### 文件描述
#
- ***six***: 自定义某一手势的主文件夹,其中主要包含该手势如下数据:
- *pos*: 存放原始数据
- *a_pos*:存放数据增强后的数据
- *xml*: 存放的训练好模型
- *pos.vec*:(Opencv需要的正样本)
- *neg.txt*:(Opencv需要的负样本列表)
* ***neg***: 通用的负样本数据存放
* ***val*** : 验证样本与标注存放,子文件夹名称与自定义手势相同(*six*)
- ***util***: 通用工具文件夹,封装各类工具如下:
- *train.py* :训练模型
- *test.py*: 测试验证集图像,给出iou,precision,recall等性能
- *xml.py*: 生成每一个stage对应的*cascade_i.xml*,便于挑选综合指标最好的分类器模型,评估最合适的stage数目.
- *pos.py*: 指定生成正样本pos.vec
- *neg.py*: 指定生成负样本neg.txt
</br>
### 使用说明
#
- **按照文件描述中的需求准备数据并放入相应文件夹,包括**:
- 原始数据及标注(对于训练数据,我们将所有的检测目标都抠出来,resize到同样大小,数据增强的数据同理,所以他们是固定标注,例如20,20)
- 数据增强后的数据及标注
- 验证集数据及标注(对于验证数据,我们不抠出检测目标而采用大图+.txt标注用于测试分类器的recall性能)
- 负样本数据(任意图片不需要标注)
- **生成*pos.vec*与*neg.txt*:**
根据需求修改*util*中的*pos.py*,*neg.py*,配置是否使用aug数据,负样本数据量及数据集选择等等。
cd ./six
python ../util/pos.py
python ../util/neg.py
- **训练:**
修改train.py,相关参数,指定文件夹,训练。
vim ../util/train.py
python ../util/train.py
- **测试:**
- 生成不同stages数目的cascade_i.xml: 参数为模型存放的文件夹
python ../util/.xml ./xml
- 测试指定stages数目的分类器指标:参数为主文件夹名与stage数目
python ../util/test.py six 12
- 打印部分结果如下:165为测试图像序号,后面分别为iou/true label/detect label,最后的结果为iou_threshold=0.5下的pre,recall信息。
165 (480, 640, 3) 0.5132 [1, 77, 39, 168, 168] [1, 103, 63, 128, 128]
total true: 215; prediction: 1639; match :89
precision: 0.0543; recall: 0.4140
</br>
### 补充说明
#
- 实际训练中,正样本需求量大概在300~1000这个量级,可做翻转增强,同时可以扣出手势并增加任意背景增强。
- 负样本数量越多越好,neg.txt中可以放置大量样本,这里默认10000,实际上训练如果stage过深,负样本数量会不足,同时,在实际视频中做手势检测,最容易出现false positive的检测就是人脸,所以可以在负样本中添加(大)部分人脸。
- 正样本需要准确,分布丰富且均衡。在笔者的大量测试中,通过变换背景对与cascadeclassifier的提升并不是很明显,如果是换做cnn方法提升会比较明显。相对而言在boost方法想要显著提高recall,则需要检测目标本身在正样本中目标的分布丰富而且均衡,而想要提高precision,则需要分布尽可能特征明显,并且准确,两者并不是完全的矛盾,但要视手势类别而定,推荐设计harr特征明显的手势,尽可能边缘宽阔,镂空明显,如双手heart。
- 补充上面提到如果想要训练多合一的viola-jones模型,就与上面提到的样本分布准确,特征明显矛盾,所以在实际试验中,训练结果是非常差的,一般会导致stage过深,同时每个stage的weak classifier超过最大限制,这样一来也就失去了使用viola-jones的价值,而且实际检测precision非常之低,基本不可能实用。(而且笔者在后续的算法中实际上在逻辑和框架设计上优化了,使得多个串联viola-jones分类器的效率可以达到单个分类器的性能所以也就放弃了训练多合一的viola-jones,关于这一点希望能多多讨论)
- 在上述描述的训练方法中,对于某一种单一手势,一般在11~14stages中会达到最高的recall和相对较高的precision,具体视手势本身特征和正样本分布而定。就笔者的测试中heart这种harr特征明显的手势在recall与precision上都表现良好,而six这种手势则差强人意。
</br>
欢迎留言或者邮件交流694790961@qq.com
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
viola-jones和cnn手势检测(基于opencv和caffe),能够检测和分类5种姿势,在ARM-Firefly.zip (287个子文件)
det.caffemodel 204KB
test.cpp 25KB
lst_test.cpp 25KB
util.cpp 3KB
handcnn.cpp 2KB
single.eps 6.47MB
muti.eps 5.01MB
isp.eps 1.67MB
util.h 586B
handcnn.hpp 940B
102.jpg 2.62MB
111.jpg 1.51MB
107.jpg 577KB
112.jpg 447KB
103.jpg 425KB
0.jpg 343KB
113.jpg 315KB
14.jpg 280KB
106.jpg 259KB
1.jpg 227KB
10.jpg 219KB
108.jpg 207KB
109.jpg 192KB
100.jpg 167KB
12.jpg 153KB
16.jpg 146KB
20.jpg 138KB
104.jpg 136KB
18.jpg 134KB
13.jpg 127KB
23.jpg 127KB
11.jpg 125KB
15.jpg 125KB
Six_99.jpg 116KB
22.jpg 107KB
25.jpg 102KB
120.jpg 95KB
2.jpg 94KB
21.jpg 93KB
Six_90.jpg 90KB
Six_9.jpg 87KB
115.jpg 87KB
24.jpg 85KB
Six_95.jpg 83KB
Six_93.jpg 82KB
Six_94.jpg 79KB
101.jpg 75KB
Six_92.jpg 73KB
Six_97.jpg 72KB
Six_96.jpg 71KB
105.jpg 62KB
Six_98.jpg 60KB
110.jpg 59KB
19.jpg 58KB
Six_91.jpg 56KB
119.jpg 52KB
114.jpg 37KB
17.jpg 33KB
six.jpg 8KB
heart_b.jpg 8KB
heart_a.jpg 7KB
greet.jpg 5KB
thumb.jpg 4KB
six_16.jpg 1KB
six_10.jpg 1KB
six_11.jpg 1KB
six_6.jpg 1KB
six_2.jpg 1KB
six_4.jpg 1KB
six_8.jpg 1KB
six_18.jpg 1KB
six_14.jpg 1KB
six_21.jpg 1KB
six_13.jpg 1KB
six_24.jpg 1KB
six_15.jpg 1KB
six_5.jpg 1KB
six_12.jpg 1KB
six_22.jpg 1KB
six_20.jpg 1KB
six_17.jpg 1KB
six_9.jpg 1KB
six_3.jpg 1KB
six_19.jpg 1KB
six_7.jpg 1KB
six_23.jpg 1KB
six_1.jpg 1KB
six_25.jpg 1024B
Makefile 2KB
README.md 5KB
README.md 3KB
algorithm.pdf 1.62MB
algorithm.pdf 1.62MB
performance_reprot.pdf 220KB
performance_reprot.pdf 220KB
isp-eps-converted-to.pdf 26KB
faceandhand.png 388KB
facewithbb.png 388KB
handwithoutbb.png 355KB
flow.png 57KB
共 287 条
- 1
- 2
- 3
资源评论
快撑死的鱼
- 粉丝: 2w+
- 资源: 9148
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 华为OD+真题及解析+智能驾驶
- jQuery信息提示插件
- 基于stm32的通信系统,sim800c与服务器通信,无线通信监测,远程定位,服务器通信系统,gps,sim800c,心率,温度,stm32 由STM32F103ZET6单片机核心板电路、DS18B2
- 充电器检测9-YOLO(v5至v11)、COCO、Create充电器检测9L、Paligemma、TFRecord、VOC数据集合集.rar
- 华为OD+考试真题+实现过程
- 保险箱检测51-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- 五相电机邻近四矢量SVPWM模型-MATLAB-Simulink仿真模型包括: (1)原理说明文档(重要):包括扇区判断、矢量作用时间计算、矢量作用顺序及切时间计算、PWM波的生成; (2)输出部分仿
- 一对一MybatisProgram.zip
- 时变动态分位数CoVaR、delta-CoVaR,分位数回归 △CoVaR测度 溢出效应 动态 Adrian2016基于分位数回归方法计算动态条件在险价值 R语言代码,代码更数据就能用,需要修改的
- 人物检测37-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功