如何使用OPENCV训练模型

这篇具有很好参考价值的文章主要介绍了如何使用OPENCV训练模型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

             使用OPENCV级联分类器训练模型。首先我们要有opencv_createsamples.exe和opencv_traincascade.exe这两个可执行文件及依赖项。需要的可以私聊我。

        第一步:创建一个文件夹,将正样本(想要识别的图片)放到一个文件夹里,这里我们将这个文件夹命名为1。如何使用OPENCV训练模型

         这里我随便找了一个物体作为识别对象,最初拍摄的照片名字很乱,这里我们要进行重命名,以便程序里使用。(注意:这里的正样本数量要足够多,这样识别率会提高,这里为了方便只使用了8个正样本)

        第二步:我们要将这些图片转化为灰度图片。

import cv2
imagepath = "C:/Users/huawei/Desktop/1/"
imagepath1 = "C:/Users/huawei/Desktop/pos/"
#转化灰度图和重置大小函数
for i in range(1,9):
    image = cv2.imread(imagepath+'1 ('+str(i)+')'+'.jpg',1)
    gray = cv2.cvtColor(image,code = cv2.COLOR_BGR2GRAY)
    gray1 = cv2.resize(gray,dsize = (50,50))
    cv2.imwrite(imagepath1+str(i)+'.jpg',gray1)

        这里imagepath的路径是未作处理时的正样本图片路径,imagepath1的路径是经过灰度等处理过的将要保存的路径。结果如下图。

如何使用OPENCV训练模型

 

        第三步:这里提供了负样本处理过的图片,链接:https://pan.baidu.com/s/1omQyLDSn9Buo2jeG5SEJxg
提取码:acno

        第四步:创建正样本的描述文件。

import os
PATH = "C:/Users/huawei/Desktop/pos"
dirs = os.listdir(PATH)
for i in dirs:
    print(i)
    line1 = PATH+'/'+i+' 1 0 0 50 50\n'
    with open('C:/Users/huawei/Desktop/info.txt','a') as f:
        f.write(line1)
        print(f)

        正样本的描述文件放在info.txt文件里,这里的1 0 0 50 50分别表示 1表示类别 ,0 0 50 50是你处理后正样本的大小格式。

如何使用OPENCV训练模型

 

        第五步:创建负样本的描述文件 。

#描述负文本
import os
PATH = "D:/OPENCVtrain/neg"
dirs = os.listdir(PATH)
for i in dirs:
    print(i)
    line1 = PATH+'/'+i+'\n'
    with open('C:/Users/huawei/Desktop/bg.txt','a') as f:
        f.write(line1)

        负样本的描述文件保存到bg.txt文件里,部分截图如下。

       如何使用OPENCV训练模型 

         第六步:将正样本描述文件(info.txt)和负样本描述文件(bg.txt)放到包含opencv_createsamples.exe和opencv_traincascade.exe的文件夹内,并且创建data文件夹。

        第七步:在cmd命令窗口进入含有第六步的两个可执行文件的文件里,输入opencv_createsamples -info info.txt -num 8 -w 50 -h 50 -vec positives.vec,会创建一个下面这个文件。这是我们训练模型时候需要用到的文件。

如何使用OPENCV训练模型

         第八步:第七步执行后,输入opencv_traincascade.exe -data data -vec positives.vec -bg bg.txt -numPos 8 -numNeg 80 -numStages 10 -w 50 -h 50命令。就会开始训练。

        这两条命令里出现很多参数。参数的含义总结如下。

通用参数:

-data <cascade_dir_name>:目录用于保存训练产生的分类器xml文件和中间文件(对于上面的LBP_classifier),如不存在训练程序会创建它;

-vec <vec_file_name>:由 opencv_createsamples 程序生成的包含正样本的vec文件名(对应上面的pos_24_24.vec);

-bg <background_file_name>:背景描述文件,也就是包含负样本文件名的那个描述文件(对应上面的neg\neg.txt);

-numPos <number_of_positive_samples>:每级分类器训练时所用的正样本数目(默认值为2000);

-numNeg <number_of_negative_samples>:每级分类器训练时所用的负样本数目,可以大于 -bg 指定的图片数目(默认值为1000);

-numStages <number_of_stages>:训练的分类器的级数(默认值为20级);

-precalcValBufSize <precalculated_vals_buffer_size_in_Mb>:缓存大小,用于存储预先计算的特征值(feature values),单位为MB(默认值为256);

-precalcIdxBufSize <precalculated_idxs_buffer_size_in_Mb>:缓存大小,用于存储预先计算的特征索引(feature indices),单位为MB(默认值为256);

内存越大,训练时间越短。

-baseFormatSave:这个参数仅在使用Haar特征时有效。如果指定这个参数,那么级联分类器将以老的格式存储(默认不指定该参数项,此时其值为false;一旦指定则其值默认为true);

级联参数:CvCascadeParams类,定义于cascadeclassifier.h

-stageType <BOOST(default)>:级别(stage)参数。目前只支持将BOOST分类器作为级联的类型;

-featureType<{HAAR(default), LBP}>:特征的类型: HAAR - 类Haar特征; LBP - 局部纹理模式特征(默认Harr);

-w <sampleWidth>:训练样本的宽(单位为像素,默认24);

-h <sampleHeight>:训练样本的高(单位为像素,默认24);

训练样本的尺寸必须跟训练样本创建(使用 opencv_createsamples 程序创建)时的尺寸保持一致。

Boosted分类器参数:CvCascadeBoostParams类,定义于boost.h

-bt <{DAB, RAB, LB, GAB(default)}>Boosted分类器的类型(DAB - Discrete AdaBoost, RAB - Real AdaBoost, LB - LogitBoost, GAB - Gentle AdaBoost为默认);

-minHitRate <min_hit_rate>分类器的每一级希望得到的最小检测率(默认值为0.995),总的检测率大约为 min_hit_rate^number_of_stages;

-maxFalseAlarmRate <max_false_alarm_rate>分类器的每一级希望得到的最大误检率(默认值为0.5),总的误检率大约为 max_false_alarm_rate^number_of_stages;

-weightTrimRate <weight_trim_rate>Specifies whether trimming should be used and its weight,一个还不错的数值是0.95;

-maxDepth <max_depth_of_weak_tree>弱分类器树最大的深度。一个还不错的数值是1是二叉树(stumps);

-maxWeakCount <max_weak_tree_count>每一级中的弱分类器的最大数目(默认值为100)。The boosted classifier (stage) will have so many weak trees (<=maxWeakCount), as needed to achieve the given -maxFalseAlarmRate;

        第九步:训练完成后就会在data文件(这是第六步让创建的文件夹)里生成cascade文件,这个就是我们所需要的文件。

如何使用OPENCV训练模型

         第十步:编写识别物体的程序。

#识别图片
import cv2
import numpy as np

image = cv2.imread("C:/Users/huawei/Desktop/1/1 (1).jpg",1)
gary = cv2.cvtColor(image,code = cv2.COLOR_BGR2GRAY)
face_cascade = cv2.CascadeClassifier('D:/OPENCVtrain/opencv_bin/data/cascade.xml')
box = face_cascade.detectMultiScale(gary,scaleFactor=1.1,minNeighbors=7,minSize=[100,100])
for x,y,w,h in box:
    img1 = cv2.rectangle(image,(x,y),(x+w,y+h),(0,0,255),2)
cv2.imshow('img',img1)
cv2.waitKey(0)
cv2.destroyAllWindows()

        为了方便,我们读取了未处理前的正样本图片进行测试。

cv2.CascadeClassifier('D:/OPENCVtrain/opencv_bin/data/cascade.xml')
#这里的路径就是保存cascade.xml文件的路径

        这样我们就完成了训练,因为我们这里正样本只用了8个,所以识别效果不是很好,这里只是讲述的一个大概过程,如果想要识别效果好,尽量多的正样本图片。

        本人第一次写的博客,如有不对,忘各位指点。文章来源地址https://www.toymoban.com/news/detail-449326.html

到了这里,关于如何使用OPENCV训练模型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【目标检测】60、MMYOLO | 如何使用 MMYOLO 训练模型

    代码链接:https://github.com/open-mmlab/mmyolo/tree/main 相关文档: 1、自定义数据集 标注+训练+测试+部署 全流程 2、10分钟带你换遍主干网络 3、10 分钟轻松掌握大图推理 4、特征图可视化 5、配置文件解读 MMYOLO 是一个 YOLO 系列算法的开源库,该库支持一次环境配置调试多种模型,和

    2024年02月04日
    浏览(55)
  • 如何将Python训练好的模型保存下来(可使用or继续训练)

    Python提供了许多机器学习框架,例如Scikit-learn、TensorFlow和PyTorch。这些框架是使用Python编写的,可以方便地训练模型。但是,模型训练是一项昂贵的任务,需要大量的计算资源和时间。一旦模型训练完成,将其保存以便以后使用是非常重要的。 保存Python训练好的模型有多种方

    2024年02月06日
    浏览(41)
  • [超级详细]如何在深度学习训练模型过程中使用GPU加速

    前言 在深度学习当中,我们训练模型通常要对模型进行反复的优化训练,仅用CPU来进行训练的话需要花费很长时间,但是我们可以使用GPU来加速训练模型,这样就可以大大减少我们训练模型花费的时间。下图是我在训练模型过程中使用GPU加速和未使用GPU加速花费时间的对比:

    2024年02月09日
    浏览(50)
  • 如何使用 ChatGP在TTPU(张量处理单元)上训练模型的指令

    推荐:将 NSDT场景编辑器 加入你的3D工具链 3D工具集: NSDT简石数字孪生 . ChatGPT 可以帮助我们学习新的编程语言、课程、技术和技能。它已成为许多寻求改进工作流程或学习新事物的专业人士的首选工具。ChatGPT 专家助手提示可以减少我们对 Google 的依赖,并提供实现目标的详

    2024年02月16日
    浏览(25)
  • opencv_模型训练

    文件夹 opencv训练文件 xml negdata posdata 说明 negdata目录: 放负样本的目录 posdata目录: 放正样本的目录 xml目录: 新建的一个目录,为之后存放分类器文件使用 neg.txt: 负样本路径列表 pos.txt: 正样本路径列表 pos.vec: 后续自动生成的样本描述文件 opencv_createsamples.exe: 生成样本描述文

    2024年01月16日
    浏览(21)
  • OPENCV训练模型

    ​ 使用Cascade Classifier包括两个主要阶段:训练阶段和检测阶段。需要用到的OpenCV应用程序:opencv_createssamples, opencv_annotation, opencv_traincascade和opencv_visualisation。opencv_createssamples和opencv_traincascade自OpenCV 4.0以来被禁用,但由于3.4和4.x的模型格式相同,因此可以采用3.4版本的程序进行

    2024年02月15日
    浏览(27)
  • opencv C++ SVM模型训练与分类实现

    最近想学习一下分类算法的内容,恰好opencv有SVM的函数,故先从这个下手。找了许多资料,发现要么是opencv2、3的,要么就没有具体实现代码,学习还是把代码与原理一起结合来看比较好。 其中,我主要参考的是这一篇文章: 学习SVM(一) SVM模型训练与分类的OpenCV实现 htt

    2024年02月09日
    浏览(41)
  • 基于OpenCV的人脸识别和模型训练系统(万字详解)

    我们身边的人脸识别有车站检票,监控人脸,无人超市,支付宝人脸支付,上班打卡,人脸解锁手机。  人脸检测是人脸识别系统组成的关键部分之一,其目的是检测出任意给定图片中的包含的一个或多个人脸,是人脸识别、表情识别等下游任务的基础。人脸识别是通过采集

    2024年02月12日
    浏览(36)
  • [软件工具]opencv-svm快速训练助手教程解决opencv C++ SVM模型训练与分类实现任务支持C# python调用

    opencv中已经提供了svm算法可以对图像实现多分类,使用svm算法对图像分类的任务多用于场景简单且对时间有要求的场景,因为opencv的svm训练一般只需要很短时间就可以完成训练任务。但是目前网上没有一个工具很好解决训练问题,大部分需要自己编程去实现训练任务,这个对

    2024年02月06日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包