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

0.安装OpenCV

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

1.找到OpenCV里面的函数

保证opencv_createsamples和opencv_traincascade能够使用。

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 

出现错误

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

POScount:consumed2000:2000

Traindatasetfortempstagecannotbefilled.Branchtrainingterminated

Cascadeclassifiercan'tbetrained.Checktheusedtrainingparameters.

解决方法:

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

错误:

===== TRAINING 0-stage =====
<BEGIN
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上执行此操作。

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要在树莓派使用OpenCV进行物体识别训练,需按以下步骤进行: 1. 安装OpenCV库:在树莓派上安装OpenCV库。可以使用命令行或者图形界面进行安装。 2. 收集训练数据:使用树莓派的摄像头拍摄一系列带有目标物体的照片作为训练数据。确保照片具有不同的角度、光照以及背景。 3. 创建图像标签:为每张图像添加一个标签,表示所属的物体类别。例如,如果训练数据包括苹果和橘子,可以为苹果图片标记为0,橘子图片标记为1。 4. 数据预处理:对训练数据进行预处理,例如调整大小、灰度转换、直方图均衡化等。这有助于提取更好的特征。 5. 特征提取:使用OpenCV的特征提取方法,如Haar特征、HOG特征或SIFT特征提取器,从预处理过的图像中提取关键特征。 6. 训练分类器使用提取的特征和对应的标签训练一个分类器模型。可以使用OpenCV中的机器学习算法,如SVM(支持向量机)或K-近邻算法等。 7. 测试模型:对训练好的模型进行测试,使用测试数据集评估模型的性能。可以计算精确度、召回率、F1分数等指标来评估模型的准确性。 8. 部署模型:将训练好的物体识别模型部署到树莓派上。通过连接树莓派的摄像头,实时获取图像,并用模型进行物体识别。 9. 进一步优化:如果模型性能不理想,可以尝试调整超参数、增加训练数据量等进一步优化模型。 通过以上步骤,就能够在树莓派训练出一个物体识别模型,用于识别指定类别的物体。 ### 回答2: 树莓派是一款被广泛应用于物联网等领域的微型电脑,而OpenCV是一个开源的计算机视觉库。结合两者,我们可以利用树莓派OpenCV来进行物体识别的训练。 首先,我们需要在树莓派上安装OpenCV库。可以通过命令行或者使用预先编译好的安装包进行安装。完成后,我们就可以利用OpenCV提供的功能进行物体识别的训练。 其次,我们需要一些用于训练的物体图像。这些图像应包含有标签信息,即每张图像都要标注出物体所在的位置。可以使用自己收集的图像,也可以从开源数据集中获取。 接下来,我们需要使用标注工具将图像中的物体进行标注。这可以通过在图像上框选出物体的位置,并为每个物体赋予标签来实现。标注完成后,我们将得到一组已标注的图像。 然后,我们利用这组已标注的图像进行模型的训练。这可以通过使用OpenCV中的机器学习算法(如支持向量机、卷积神经网络等)来实现。训练过程中,我们会提取图像中的特征,并将这些特征与标签一起输入模型中进行训练。 最后,我们完成模型的训练后,就可以进行物体识别的测试了。可以使用树莓派上摄像头捕获的实时图像进行测试。在测试阶段,我们将输入图像提取特征,并将其输入到已训练好的模型中。模型将会判断输入图像中是否存在我们训练过的物体,并给出相应的预测结果。 通过以上步骤,我们可以在树莓派上实现物体识别的训练。这对于一些需要进行物体识别的项目或者应用来说,具有重要的实际应用价值。 ### 回答3: 树莓派是一款功能强大且灵活的迷你计算机,而OpenCV是一种流行的计算机视觉库,它可以用于图像处理和物体识别。通过结合树莓派OpenCV,我们可以在树莓派上进行物体识别的训练。 首先,我们需要安装OpenCV库到树莓派上。通过在终端中输入相应的命令,可以很容易地安装OpenCV。 接下来,我们需要准备训练数据集。数据集应该包含不同类别的物体图像,以便训练分类器。可以使用网络上的公开数据集或自己收集图像。 在准备好数据集后,我们需要进行图像预处理。这包括图像的裁剪、缩放和灰度化等处理,以便使数据集可用于训练。 接下来,我们可以使用机器学习算法来训练物体识别分类器。常见的算法包括支持向量机(SVM)和卷积神经网络(CNN)。在训练过程中,我们将使用预处理后的图像数据作为输入,并把每个图像标注为对应的类别。 训练完成后,我们可以使用训练得到的分类器来进行物体识别。在树莓派上,我们可以使用摄像头获取实时图像,并通过分类器实时识别物体。这可以通过编写Python代码来实现。 总结来说,树莓派可以和OpenCV配合使用,进行物体识别的训练。这需要安装OpenCV库、准备数据集并进行图像预处理,然后使用机器学习算法进行训练,并最终在树莓派上实现物体识别。这为我们提供了一个低成本且便携的物体识别解决方案,可应用于各种场景,如智能家居、机器人等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值