安卓OpenCV开发(五)小狗识别

简介: 安卓OpenCV开发

使用OpenCV进行小狗脸蛋识别

新鲜?不,还是换汤不换药,其实原理和人脸识别一样,只是换了一下识别模型而已。
基础知识可以回顾我之前写的文章:
OpenCV导入
OpenCV人脸检测
OpenCV竖屏检测
OpenCV人脸识别
狗脸识别,得现有训练模型的数据源:
链接:https://pan.baidu.com/s/1OxA6vGw5kvUs_V6GXVsnCg
提取码:ur82
识别器工具:
链接:https://pan.baidu.com/s/1my6NqIJ_MTLBulD29Az7-g
提取码:7fh4
首先,训练数据源,分为正样本和负样本。先区分正负样本的文件夹,结构如下:
训练目录结构结构

cmd执行的指令
harresult训练集合生成的结果文件夹,需要自行创建
negative负样本文件夹
positive正样本文件夹

开始发车

(一)创建正负样本的目录说明文件

win电脑cmd窗口,可以输入dir/s/b>1.txt用于生成目录说明文件
(1)下图为正样本目录说明文件截图
正样本目录说明文件

第一列是图片路径;
第二列是图片中能检测出的样本表数量
第三第四列是图像的坐标,(0,0)就行;
第五第六列是图像宽和高,需要注意是一样的,宽高比需要一样的。

(2)下图为负样本目录说明文件截图
负样本目录说明文件
只需目录说明即可

(二)指令生成正样本vec训练文件,指令如下:

.\opencv_createsamples -info E:\work\opencvtrain\dog\test\positive\1.txt -vec E:\work\opencvtrain\dog\test\mysqmples_344.vec -num 100 -bgcolor 0 -bgthresh 0 -w 24 -h 24

执行截图如下:
执行截图

(三)执行指令生成最后的训练集合

执行流程截图:
运行截图

最后,在harresult文件夹,会生成训练所得文件,截图如下:
训练结果截图
cascade.xml文件即为训练结果,可以作为OpenCV项目中的分类器构建时的数据源输入,从而检测相关数据。

备注:
1、注意正负目录描述文件的路径格式
2、注意我图片中,指令的相关目录,请结合实际理解
最后附上狗脸检测结果图片一张:
狗脸检测

最后附上训练参数说明

【-info】 就是跟存放正样本图片目录位置相同的描述文件的路径,可用txt,dat等格式保存,每一行的内容为:xxx.jpg nums left_x left_y width heght。
比如:samples_1.jpg 1 0 0 20 20这样,就是指某个正样本是samples_1.jpg的图片,图片中有1个目标区域,区域的左上角坐标为(0,0),区域的宽度为20像素,长度为20像素。注意样本图片和这里的参数相符。
【-img】如果你要通过一张图片的扭曲形变成多张图片作为样本,就填写这个参数,参数的内容为要扭曲的图片的路径。填入后,-info参数不再有效。
【-vec】要生成用于训练的vec文件的路径,内容为:xxx/xxx/xxx/xxx.vec
【-bg】 如果省略,则使用bgcolor的值填充作为背景。就是跟存放负样本图片(背景图片)目录位置相同的描述文件的路径,可用txt,dat等格式保存,,每一行的内容为:xxx.jpg。这里要注意的是,不要填入图片的完整路径,不然会报错。但训练样本opencv_traincascade也需要传入一个-bg参数,但那个参数的描述文件每一行是要用完整路径的,这有点怪。
【-num】要创建的样本的数量,使用-info生成时,不要比你准备的正样本图片数量大就行了
【-bgcolor】这是创建样本是样本扭曲函数中用来决定像素是有效还是作为背景过滤的基本值,因为操作的是灰度图,所以这个值0范围是~255。
【-bgthresh】决定背景掩码的实际取值范围为bgcolor-bgthresh ——bgcolor-bgthresh
【-inv】【-randinv】这是样本生成时,是否需要反相或随机反相,这个在车牌这样的数字中就需要,比如说白底黑字的车牌和蓝底白字的车牌,两者生成的样本是相反的,前者数字是黑色,后者数字是白色。所以这个参数按你实际需要使用吧。
【-maxidev】一个用于生成前景(有效像素区域)灰度值的常数值,实际样本的前景灰度值会根据这个参数结合随机数产生多种不同的灰度值。
【-maxxangle】对样本图片的x轴方向的扭曲的最大弧度,X轴即是图片水平方向的旋转。
【-maxyangle】对样本图片的y轴方向的扭曲的最大弧度,Y轴即是图片竖直方向的旋转。
【-maxyangle】对样本图片的z轴方向的扭曲的最大弧度,Z轴即是垂直于图像平面的方向的旋转(可理解为旋转轴是一条穿过显示器的垂线)。
【-show】样本创建期间,是否通过imshow显示出每一个生成的样本图片出来。
【-w】要创建的样本图片的宽度,后面的训练样本步骤要使用和这时一样的值,不然会报错
【-h】要创建的样本图片的高度,后面的训练样本步骤要使用和这时一样的值,不然会报错
【-data】
训练的分类器的存储目录
【-vec 】
正样本文件,由open_createsamples.exe生成,正样本文件后缀名为.vec
【-bg】
负样本说明文件,主要包含负样本文件所在的目录及负样本文件名
【-numPos】
每级分类器训练时所用到的正样本数目,应小于vec文件中正样本的数目,具体数目限制条件为:numPos+(numStages-1) numPos(1-minHitRate)<=vec文件中正样本的数目
【-numNeg】
每级分类器训练时所用到的负样本数目,可以大于-bg指定的图片数目
【-numStages】
训练分类器的级数,强分类器的个数
【-precalcValBufSize】
缓存大小,用于存储预先计算的特征值,单位MB
【-precalcIdxBufSize 】
缓存大小,用于存储预先计算的特征索引,单位MB
【-baseFormatSave 】
仅在使用Haar特征时有效,如果指定,级联分类器将以老格式存储
【-stageType 】
级联类型,目前只能取BOOST
【-featureType】
训练使用的特征类型,目前支持的特征有Haar,LBP和HOG
【-w】
训练的正样本的宽度,Haar特征的w和h一般为20,LBP特征的w和h一般为24,HOG特征的w和h一般为64
【-h 】
训练的正样本的高
【-bt】
训练分类器采用的Adaboost类型,Adaboost分为Getle Adaboost,Real Adaboost,Discrete Adaboost,Logit Adaboost,训练中默认采用Getle Adaboost
【-minHitRate】
影响每个强分类器阈值,每一级分类器最小命中率,表示每一级强分类器对正样本的的分类准确率
【-maxFalseAlarm】
最大虚警率,影响弱分类器的阈值,表示每个弱分类器将负样本误分为正样本的比例,一般默认值为0.5
【-weightTrimRate】
0-1之间的阈值,影响参与训练的样本,样本权重更新排序后(从小到大),从前面累计权重小于(1-weightTrimRate)的样本将不参与下一次训练,一般默认值为0.95
【-maxDepth】
每一个弱分类器决策树的深度,默认是1,是二叉树(stumps),只使用一个特征。
【-maxWeakCount】
每级强分类器中弱分类器的最大个数,当FA降不到指定的maxFalseAlarm时可以通过指定最大弱分类器个数停止单个强分类器
【-Haar】
特征,CvHaarFeatureParams继承于CvFeatureParams
【-mode】
值为BASIC、CORE、ALL三种,根据值不同采用不同的Haar特征,BASIC是基本的Haar特征(垂直),CORE是所有的上下Haar特征,ALL是使用所有的Haar特征(包括垂直和45度)
【-LBP】
特征,CvLBPFeatureParams继承于CvFeatureParams
【-HOG】
特征,CvHOGFeatureParams继承于CvFeatureParams

that's all--------------------------------------------------------------------------------------------------------------

目录
相关文章
|
1月前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
1月前
|
缓存 前端开发 Android开发
安卓开发中的自定义视图:从零到英雄
【10月更文挑战第42天】 在安卓的世界里,自定义视图是一块画布,让开发者能够绘制出独一无二的界面体验。本文将带你走进自定义视图的大门,通过深入浅出的方式,让你从零基础到能够独立设计并实现复杂的自定义组件。我们将探索自定义视图的核心概念、实现步骤,以及如何优化你的视图以提高性能和兼容性。准备好了吗?让我们开始这段创造性的旅程吧!
26 1
|
1月前
|
搜索推荐 Android开发 开发者
探索安卓开发中的自定义视图:打造个性化UI组件
【10月更文挑战第39天】在安卓开发的世界中,自定义视图是实现独特界面设计的关键。本文将引导你理解自定义视图的概念、创建流程,以及如何通过它们增强应用的用户体验。我们将从基础出发,逐步深入,最终让你能够自信地设计和实现专属的UI组件。
|
19天前
|
搜索推荐 前端开发 API
探索安卓开发中的自定义视图:打造个性化用户界面
在安卓应用开发的广阔天地中,自定义视图是一块神奇的画布,让开发者能够突破标准控件的限制,绘制出独一无二的用户界面。本文将带你走进自定义视图的世界,从基础概念到实战技巧,逐步揭示如何在安卓平台上创建和运用自定义视图来提升用户体验。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开新的视野,让你的应用在众多同质化产品中脱颖而出。
40 19
|
1月前
|
IDE Java 开发工具
移动应用与系统:探索Android开发之旅
在这篇文章中,我们将深入探讨Android开发的各个方面,从基础知识到高级技术。我们将通过代码示例和案例分析,帮助读者更好地理解和掌握Android开发。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和技巧。让我们一起开启Android开发的旅程吧!
|
19天前
|
JSON Java API
探索安卓开发:打造你的首个天气应用
在这篇技术指南中,我们将一起潜入安卓开发的海洋,学习如何从零开始构建一个简单的天气应用。通过这个实践项目,你将掌握安卓开发的核心概念、界面设计、网络编程以及数据解析等技能。无论你是初学者还是有一定基础的开发者,这篇文章都将为你提供一个清晰的路线图和实用的代码示例,帮助你在安卓开发的道路上迈出坚实的一步。让我们一起开始这段旅程,打造属于你自己的第一个安卓应用吧!
43 14
|
22天前
|
Java Linux 数据库
探索安卓开发:打造你的第一款应用
在数字时代的浪潮中,每个人都有机会成为创意的实现者。本文将带你走进安卓开发的奇妙世界,通过浅显易懂的语言和实际代码示例,引导你从零开始构建自己的第一款安卓应用。无论你是编程新手还是希望拓展技术的开发者,这篇文章都将为你打开一扇门,让你的创意和技术一起飞扬。
|
20天前
|
XML 存储 Java
探索安卓开发之旅:从新手到专家
在数字时代,掌握安卓应用开发技能是进入IT行业的关键。本文将引导读者从零基础开始,逐步深入安卓开发的世界,通过实际案例和代码示例,展示如何构建自己的第一个安卓应用。我们将探讨基本概念、开发工具设置、用户界面设计、数据处理以及发布应用的全过程。无论你是编程新手还是有一定基础的开发者,这篇文章都将为你提供宝贵的知识和技能,帮助你在安卓开发的道路上迈出坚实的步伐。
31 5
|
18天前
|
开发框架 Android开发 iOS开发
安卓与iOS开发中的跨平台策略:一次编码,多平台部署
在移动应用开发的广阔天地中,安卓和iOS两大阵营各占一方。随着技术的发展,跨平台开发框架应运而生,它们承诺着“一次编码,到处运行”的便捷。本文将深入探讨跨平台开发的现状、挑战以及未来趋势,同时通过代码示例揭示跨平台工具的实际运用。
|
20天前
|
XML 搜索推荐 前端开发
安卓开发中的自定义视图:打造个性化UI组件
在安卓应用开发中,自定义视图是一种强大的工具,它允许开发者创造独一无二的用户界面元素,从而提升应用的外观和用户体验。本文将通过一个简单的自定义视图示例,引导你了解如何在安卓项目中实现自定义组件,并探讨其背后的技术原理。我们将从基础的View类讲起,逐步深入到绘图、事件处理以及性能优化等方面。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和技巧。