使用树莓派的OpenCV训练自己的Harr分类器(人脸举例,训练什么都行)笔记

0.安装OpenCV

此处不多说了,不是重点。网上下载。

1.找到OpenCV里面的函数

使用树莓派的OpenCV训练自己的Harr分类器(人脸举例,训练什么都行)笔记_第1张图片

保证opencv_createsamples和opencv_traincascade能够使用。

2.通过网上下载需要训练的素材

我们下载人脸和非人脸的图片。

在树莓派中建立三个文件夹:

使用树莓派的OpenCV训练自己的Harr分类器(人脸举例,训练什么都行)笔记_第2张图片

neg放消极图片(非人脸图片),pos放积极图片(人脸图片),xml里放最后生成的分类器。

使用

vec数量>=(numspose+(numstages-1)*(1-minhitrate)*numspose)+s
numspose-用于训练每个阶段的阳性样本计数(不要将其与vec文件中所有样本的计数混淆!)
numstages-培训后级联分类器将具有的阶段计数。
minhitrate-每个阶段的培训限制。
vec-file has to contain >= (numPos + (numStages-1) * (1 - minHitRate) * numPos) + S
7000 >= (numPos + (20-1) * (1 - 0.999) * numPos) + 2973

haartraining.exe -data data\cascade -vec pos.vec -bg neg_img.txt -npos 100 -nneg 250 -nstages 5 -mem 1280 -nonsym -w 24 -h 24 -mode all

 也是提示缺少什么文件,就往目录下添加什么文件。

 

各个参数的含义:

 

-data

存放训练好的分类器的路径名。

-vec

正样本文件名(由trainingssamples 程序或者由其他的方法创建的)

-bg

背景描述文件。

-npos

-nneg

用来训练每一个分类器阶段的正/负样本,需要自己调整,-npos 正样本数目,-nneg  负样本数目 这个值可以设置大于真正的负样本图像数目,程序可以自动从负样本图像中切割出和正样本大小一致的 -nneg张图 这个参数一般设置为正样本数目的1~3倍

-nstages

训练的阶段数,这也是可以改的。

-nsplits

决定用于阶段分类器的弱分类器。如果1,则一个简单的stump classifier 被使用。如果是2 或者更多,则带有number_of_splits 个内部节点的CART 分类器被使用。

-mem

预先计算的以MB 为单位的可用内存。内存越大则训练的速度越快。

-sym(default)

-nonsym

-data 指定生成的文件目录, -vec vec文件名, -bg 负样本描述文件路径, -nstage 20 指定训练层数,推荐15~20,层数越高,耗时越长。-nsplits 分裂子节点数目,选取默认值 2 -minhitrate 最小命中率,即训练目标准确度。-maxfalsealarm最大虚警(误检率),每一层训练到这个值小于0.5时训练结束,进入下一层训练,-npos 正样本数目,-nneg  负样本数目 这个值可以设置大于真正的负样本图像数目,程序可以自动从负样本图像中切割出和正样本大小一致的 -nneg张图 这个参数一半设置为正样本数目的1~3倍, -w -h意思很明确, -mem 程序可使用的内存,这个设置为256即可,实际运行时根本就不怎么耗内存。 -mode ALL指定haar特征的类型数目
opencv_createsamples -vec pos.vec -info pos/pos.txt -bg neg/neg.txt -w 20 -h 20 -num 1500 

使用树莓派的OpenCV训练自己的Harr分类器(人脸举例,训练什么都行)笔记_第3张图片

出现错误

=====TRAINING0-stage=====

POScount:consumed2000:2000

Traindatasetfortempstagecannotbefilled.Branchtrainingterminated

Cascadeclassifiercan'tbetrained.Checktheusedtrainingparameters.

解决方法:

neg.txt文件中xxx.jpg全部改成./neg/xxx.jpg

错误:

===== TRAINING 0-stage =====
POS count : consumed   2000 : 2000
NEG count : acceptanceRatio    1000 : 1
OpenCV Error: Insufficient memory (Failed to allocate 941520000 bytes) in OutOfMemoryError, file /home/pi/opencv-3.3.0/modules/core/src/alloc.cpp, line 55
OpenCV Error: Assertion failed (u != 0) in create, file /home/pi/opencv-3.3.0/modules/core/src/matrix.cpp, line 436
terminate called after throwing an instance of 'cv::Exception'
  what():  /home/pi/opencv-3.3.0/modules/core/src/matrix.cpp:436: error: (-215) u != 0 in function create
解决方法:

因为树莓派内存不足,网上说不是64位,故在windows上执行此操作。

 

你可能感兴趣的:(笔记,树莓派)