一、开发工具简介

1、opencv分类器

基于图像HAAR与LBP特征训练的级联分类器,只需要简单的正负样本数据集图片,就可以训练一个检测正样本的级联分类器。最重要的是,经过编译好的的exe类文件训练出来的分类器,在C++,Python,Js几种语言环境中都可以调用。训练方法很简单,跟着教程按部就班即可。网上也有很多教程,具体方法如下:

训练方法

1、获取opencv_createsamples.exe和opencv_traincascade.exe

链接:https://pan.baidu.com/s/1fGX8RBnL5HiHKkfPv-K5iw?pwd=2vis
提取码:2vis

2、制作正负样本数据集、需要转灰度图

gray = cv.cvtColor(resize, cv.COLOR_BGR2GRAY)

path='*/”图片文件路径”'
pathdir=os.listdir(path)
for i in pathdir:#遍历目录下子文件夹imgpath=path+iimg=cv.imread(imgpath)gray=cv.cvtColor(img, cv.COLOR_BGR2GRAY)cv.imwrite(imgpath,gray, [cv.IMWRITE_PNG_COMPRESSION, 0])

3、进入正负样本数据集、制作图片路径txt文件

dir /b/s/p/w *.jpg > pos.txt
#当前目录所有文件夹绝对路径保存到pos.txt中。或使用下面4中的方法制作txt说明文件。

4、为txt文件中的路径添加后缀1 0 0 224 224,后两位为正样本图片尺寸

path='*/”图片文件路径”'
for img in os.listdir(path):line = path+img+' 1 0 0 224 224\n'with open('pos.txt','a') as f:f.write(line)

5、生成vec文件,

opencv_createsamples.exe -info pos.txt -vec pos.vec -bg neg.txt -num 299 -w 20 -h 20

参数:
-info:样本说明文件
-vec:描述文件的名字及路径
-num:正样本数
-w -h:样本缩放尺寸。

6、训练

opencv_traincascade.exe -data xml -vec pos.vec -bg neg.txt -numPos 200 -numNeg 700
-numStages 50 -featureType HAAR -w 20 -h 20

参数:
-data:存放训练好的xml文件的文件夹,需提前创建
-vec:正样本vec文件路径
-bg:负样本neg.txt说明文件路径
-numPos:正样本的数量
-numNeg:负样本的数量
-numStages:训练步数
-featureTyp:特征类型,HAAR最常用
-w -h 是正样本的宽高
-minHitRate:最小命中率,即分类器每一级希望得到的最小检测率。本文希望分类器每一级得到的最小检测率是0.9999
-maxFalseAlarmRate :分类器每一级希望得到的最小误检率。本文希望分类器每一级得到的最小检测率是0.5。影响每个强分类器中弱分类器的个数,设置的如果较大,每级可以滤除负样本的比例就会较小,这样就在测试过程中虚警率就较高;如果设置的较小,每级强分类器中弱分类器的个数就较多,检测的时间就会相对要长。
-All:会加载所有的Haar特征模板

7、测试、读取训练好的参数进行测试

CASE:
(1)出现报错:Traincascade Error: Bad argument (Can not get new positive sample. The most possible reason is insufficient count of samples in given vec-file.)

分析原因:设置的numPos太大,因为POS_count会随着设置的numPos正样本数增加而增加,每个级别都会按照一定的顺序增加。 以后可能超过样本库中的所有正样本数,就会报这个错误。为了避免opencv报错,在使用opencv_traincascade.exe时,-numPos应该比实际的正样本数略低。 比如如果有2100的正样本,可以设置numpos为1900-2000

(2) 每次修改参数重新训练需将之前训练保存的xml文件移除。

(3) 支持断点训练,若模型未移除,可输入同样代码从上次训练停止步数numStages开始训练。
(4) 训练到最后分类器总是卡到某一层就不在继续进行,当剩下所有的negtive样本在临时的cascade Classifier中evaluate的结果都是0(也就是拒绝了),随机取样本的数目到几百万都是找不到误检测的neg样本了,因而没法跳出循环!
解决方法是,增大负样本数目,增大负样本之间的变化!P.S. 因为负样本原则应该是数量越多而且越具多样性越好,这在现实中是不可行的,所以我们采集的负样本一般无论从数量上还是多样性上都很难满足要求,所以出现上述问题就很正常了,不过此时的分类器已经完全额、可以使用,因为它的误检率已经很低,从实用性上时没有任何问题的。
参考链接:
https://www.jianshu.com/p/e35260f7cbf0?

HbuilderX

H5+,Uniapp调试打包软件,不多赘述,傻瓜式安装,然后打开项目即可。

二、Demo(一个简单的级联分类器识别人脸图片项目)

源码来自opencv.js官网的Demo,这里稍微对其进行简单的修改成Hbuilder项目,一个图像检测,一个视频流,然后测试到打包成app到手机上
项目地址:https://github.com/sk8boi/OpencvJSDemo.git

总结

很多二分类的图像识别任务不用想着立马上神经网络,可以用简单的级联分类器解决。

使用opencv.js分类器和hbuilderx开发一个分类器app相关推荐

  1. 自己怎么开发一个软件app、如何开发一个app系统软件?

    自己怎么开发一个软件app.如何开发一个app系统软件? ​华盛恒辉开发app软件的办法如下: 1.华盛恒辉首先本人明白需求,懂代码,熟习开发流程. 2.华盛恒辉APP开发后期需求理解产品定位. 3. ...

  2. 人工智能离前端并不远 一步步教你开发一个机器学习APP(附源码)

    最近HBO电视网推出的美剧<硅谷Silicon Valley>席卷全球,里面有一个桥段介绍了超级有趣的iOS app- Not Hotdog.你甚至可以在APP Store上下载到它. 受 ...

  3. vue 手机端答题页面_从0开始,手把手教你用Vue开发一个答题App

    项目演示 项目源码 配套讲解视频 教程说明 本教程适合对Vue基础知识有一点了解,但不懂得综合运用,还未曾使用Vue从头开发过一个小型App的读者.本教程不对所有的Vue知识点进行讲解,而是手把手一步 ...

  4. 从0开始,手把手教你用Vue开发一个答题App

    项目演示 项目演示 项目源码 项目源码 配套讲解视频 配套讲解视频第一节 配套讲解视频第二节 教程说明 本教程适合对Vue基础知识有一点了解,但不懂得综合运用,还未曾使用Vue从头开发过一个小型App ...

  5. 开发一个android app需要的技术

    最近一直在忙着工作的事,很久没有更新博客了,今天突发奇想要把自己学到的android方面的知识记录下来,一方面是为了系统的回顾一下知识点自己的学习路线,另一方面希望能帮到更多初学的朋友.学习andro ...

  6. 【APICloud系列|21】使用APICloud敏捷式开发总结,回顾开发一个完整APP过程。

    导读:APICloud是柚子(北京)科技有限公司创建的低代码开发平台,总部位于北京, 通过生产力工具与混合开发技术,为企业与开发者构建高效的IT环境:在APICloud平台已有80万注册用户,平台每日 ...

  7. 用 HealthKit 来开发一个健身 App

    作者:AppCoda,原文链接,原文日期:2016-03-22 译者:Crystal Sun:校对:numbbbbb:定稿:Cee 看新闻我们也知道,比起历史上任何一个时刻,健身和健康在今天都更加重要 ...

  8. 用Vue.js开发一个电影App的前端界面

    我们要构建一个什么样的App? 我们大多数人使用在线流媒体服务(如Netflix)观看我们最喜欢的电影或者节目.这篇文章将重点介绍如何通过使用vue.js 2 建立一个类似风格的电影流媒体WEB交互界 ...

  9. 如何自己开发一个Android APP(3)——XML和Android

    XML是一种用于保存数据值的语言. XML是一种标记语言,类似于HTML--如果之前接触过Web开发的话.XML文件利用树状结构作为数据模型.通常来说,一个布局文件拥有一个根布局元素,并将其作为特定布 ...

最新文章

  1. 【EXLIBRIS】随笔记 011
  2. R语言Kmeans聚类、抽取聚类簇:fpc包clusterboot函数通过bootstrap重采样的方法评估Kmeans聚类的稳定性、fpc包的kmeansruns函数通过CH准则和ASW获取最优K值
  3. 《第一行代码》学习笔记9-活动Activity(7)
  4. win10 docker desktop无法拉取镜像解决办法
  5. gRPC in ASP.NET Core 3.x -- Protocol Buffer(3)更新消息类型
  6. Swift中文教程(十二) 下标
  7. vc++6.0中创建工程时选Win32 Application和Win32 console Application的区别
  8. Vblog#2 DAY1
  9. veu2x 消息订阅与发送
  10. 【语音识别】基于动态时间规整算法(DTW)实现中文语音识别系统含Matlab源码
  11. 一加6android p上手,一加6秒速跟进安卓P 教你尝鲜速成开发者
  12. python3文件读写实例_2.2.3.1Python-实例---文件读写
  13. c语言搜索答案什么软件比较好,学C语言用什么最好?
  14. 关于DVDScr, Screener,TS, TC等常见术语
  15. 通俗易懂讲清502、503、504是什么
  16. rpm提示:XXX conflicts with file form package XXX
  17. ADB 使用详细教程——Awesome Adb
  18. 观念什么意思_观念是什么意思_观念怎么读_造句_近义词_拼音_解释
  19. MySQL运行原理与基础架构
  20. 「解析」Matplotlib 绘制折线图

热门文章

  1. Tensorflow2.0版本下如何实现Kronecker积
  2. 写论文中怎么插入参考文献
  3. java获取西瓜视频的下载地址
  4. 致力于量子计算商业化,量旋科技欲在超导量子领域取得突破
  5. Cisco测试命令和TCP/IP连接故障处理整理集合
  6. 四、DNS设置转发器
  7. 7-3 三维向量运算设计一个三维向量类,实现向量加法、减法以及向量与标量的乘法和除法运算。
  8. 微信公众号新上线“快捷私信”功能 微信留言功能没有的号迎来转机
  9. RN仿微信通讯录列表
  10. 2017广东工业大学程序设计竞赛决赛 E-倒水(Water) (二进制的应用) + H-tmk买礼物(dp思想)