位置: IT常识 - 正文

opencv训练自己的模型,实现特定物体的识别(opencv训练模型教程)

编辑:rootadmin
opencv训练自己的模型,实现特定物体的识别 1.说明opencv安装包中有训练好的分类器文件,可以实现人脸的识别。当然,我们也可以训练自己的分类器文件,实现对特定物体的识别。本文章就详细介绍下如何训练自己的分类器文件。2.效果我训练的是检测苹果的的分类器文件,可以实现对苹果的识别。 3.准备3.1 程序准备训练自己的分类器文件,需要用到两个程序 : opencv_createsamples.exe和opencv_traincascade.exeopencv最新的安装包中没有这两个程序,我们可以下载 3.4.14这个版本的安装包进行安装。opencv安装包 : opencv-3.4.14-vc14_vc15.exe安装完成后,在这个目录下就会有这两个程序文件 opencv\build\x64\vc15\bin3.2 样本数据准备

推荐整理分享opencv训练自己的模型,实现特定物体的识别(opencv训练模型教程),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:opencv训练模型教程,opencv自学,opencv训练xml,opencv训练模型教程,opencv训练模型教程,opencv训练模型教程,opencv 训练自己的svm,opencv训练模型教程,内容如对您有帮助,希望把文章链接给更多的朋友!

正样本数据 : 也就是我们需要检测的物体图片,可以自己用手机拍摄下你要检测的物体的图片,多拍摄一些不同角度的图片。

我的正样本数据在这个目录下 image\positive\img,大概有50多张图片

然后在image\positive目录下新建一个info.dat文件,在其中记录正样本图片信息

opencv训练自己的模型,实现特定物体的识别(opencv训练模型教程)

参数介绍

img/1.jpg : 文件路径和文件名1:表示图片中有几个目标物体,一般一个就行了0,0:目标物体起始坐标1280,1706:目标物体大小

负样本数据:不包含我们要检测物体的图片,可以拍摄一些风景之类的图片,尽量多一些。

我的负样本数据在这个目录下 image\negitive\img

然后在image\negitive目录下新建一个bg.txt文件,在其中记录负样本图片信息

负样本图片信息我们只需记录路径和文件名就行了,但是这里要注意,路径名要写绝对路径,后面会说为什么。

3.3 正样本VEC文件创建训练样本之前先要生成vec文件,要用到opencv_createsamples.exe程序opencv_createsamples.exe部分参数介绍 [-info <collection_file_name>] # 记录样本数据的文件(就是我们刚才创建的info.data文件) [-img <image_file_name>] [-vec <vec_file_name>] # 输出文件,内含用于训练的正样本。 [-bg <background_file_name>] # 背景图像的描述文件 [-num <number_of_samples = 1000>] #样本数量(默认为1000) [-bgcolor <background_color = 0>] #指定背景颜色 [-w <sample_width = 24>]#输出样本的宽度(以像素为单位) [-h <sample_height = 24>]#输出样本的高度(以像素为单位)

参考

在安装包的这个目录下opencv\build\x64\vc15\bin可以找到opencv_createsamples.exe程序,我们生成下vec文件D:\opencv3.4.12\opencv\build\x64\vc15\bin\opencv_createsamples.exe -info C:\Users\lng\Desktop\image\positive\info.dat -vec C:\Users\lng\Desktop\image\sample.vec -num 58 -bgcolor 0 -bgthresh 0 -w 24 -h 24在image目录下就生成了vec文件 4.样本数据训练完成上面的准备工作,就可以开始训练样本。训练样本需要用到opencv_traincascaded.exe程序opencv_traincascaded.exe程序部分参数介绍 -data <cascade_dir_name> #目录名,如不存在训练程序会创建它,用于存放训练好的分类器 -vec <vec_file_name> #包含正样本的vec文件名 -bg <background_file_name> #背景描述文件 [-numPos <number_of_positive_samples = 2000>] #每级分类器训练时所用的正样本数目 [-numNeg <number_of_negative_samples = 1000>] #每级分类器训练时所用的负样本数目 [-numStages <number_of_stages = 20>] #训练的分类器的级数--cascadeParams-- [-featureType <{HAAR(default), LBP, HOG}>] # 特征的类型: HAAR - 类Haar特征; LBP - 局部纹理模式特征 [-w <sampleWidth = 24>] #训练样本的尺寸(单位为像素) [-h <sampleHeight = 24>] #训练样本的尺寸(单位为像素)--boostParams-- [-minHitRate <min_hit_rate> = 0.995>] #分类器的每一级希望得到的最小检测率 [-maxFalseAlarmRate <max_false_alarm_rate = 0.5>] #分类器的每一级希望得到的最大误检率

参考

在安装包的这个目录下opencv\build\x64\vc15\bin可以找到opencv_traincascade.exe程序,开始训练样本这里注意下

指定-bg参数时,文件名前不能加路径,所以需要把刚才在image\negitive下创建的bg.txt文件拷贝到opencv_traincascade.exe程序所在目录下,所以要在bg.txt写负样本图片的绝对路径。指定numPos参数时,因为每个阶段训练时有些正样本可能会被识别为负样本,故每个训练阶段后都会消耗一定的正样本。因此,此处使用的正样本数量绝对不能等于或超过positive文件夹下的正样本个数,一般留有一定的余量指定-numNeg参数时,可以多于negitive目录下的负样本数量D:\opencv3.4.12\opencv\build\x64\vc15\bin\opencv_traincascade.exe -data C:\Users\lng\Desktop\image -vec C:\Users\lng\Desktop\image\sample.vec -bg bg.txt -numPos 50 -numNeg 500 -numStages 12 -feattureType HAAR -w 24 -h 24 -minHitRate 0.995 -maxFalseAlarmRate 0.5执行结果PARAMETERS:cascadeDirName: C:\Users\lng\Desktop\imagevecFileName: C:\Users\lng\Desktop\image\sample.vecbgFileName: bg.txtnumPos: 50numNeg: 500numStages: 12precalcValBufSize[Mb] : 1024precalcIdxBufSize[Mb] : 1024acceptanceRatioBreakValue : -1stageType: BOOSTfeatureType: HAARsampleWidth: 24sampleHeight: 24boostType: GABminHitRate: 0.995maxFalseAlarmRate: 0.5weightTrimRate: 0.95maxDepth: 1maxWeakCount: 100mode: BASICNumber of unique features given windowSize [24,24] : 162336===== TRAINING 0-stage =====<BEGINPOS count : consumed 50 : 50NEG count : acceptanceRatio 500 : 1Precalculation time: 0.581+----+---------+---------+| N | HR | FA |+----+---------+---------+| 1| 1| 1|+----+---------+---------+| 2| 1| 0.05|+----+---------+---------+END>Training until now has taken 0 days 0 hours 0 minutes 1 seconds.===== TRAINING 1-stage =====<BEGINPOS count : consumed 50 : 50NEG count : acceptanceRatio 500 : 0.084832Precalculation time: 0.576+----+---------+---------+| N | HR | FA |+----+---------+---------+| 1| 1| 1|+----+---------+---------+| 2| 1| 0.146|+----+---------+---------+END>Training until now has taken 0 days 0 hours 0 minutes 3 seconds.===== TRAINING 2-stage =====<BEGINPOS count : consumed 50 : 50NEG count : acceptanceRatio 500 : 0.0149993Precalculation time: 0.592+----+---------+---------+| N | HR | FA |+----+---------+---------+| 1| 1| 1|+----+---------+---------+| 2| 1| 0.186|+----+---------+---------+END>Training until now has taken 0 days 0 hours 0 minutes 5 seconds.===== TRAINING 3-stage =====<BEGINPOS count : consumed 50 : 50NEG count : acceptanceRatio 500 : 0.00288033Precalculation time: 0.652+----+---------+---------+| N | HR | FA |+----+---------+---------+| 1| 1| 1|+----+---------+---------+| 2| 1| 0.298|+----+---------+---------+END>Training until now has taken 0 days 0 hours 0 minutes 7 seconds.===== TRAINING 4-stage =====<BEGINPOS count : consumed 50 : 50NEG count : acceptanceRatio 500 : 0.000768845Precalculation time: 0.615+----+---------+---------+| N | HR | FA |+----+---------+---------+| 1| 1| 1|+----+---------+---------+| 2| 1| 1|+----+---------+---------+| 3| 1| 0.366|+----+---------+---------+END>Training until now has taken 0 days 0 hours 0 minutes 11 seconds.===== TRAINING 5-stage =====<BEGINPOS count : consumed 50 : 50NEG count : acceptanceRatio 500 : 0.000375057Precalculation time: 0.61+----+---------+---------+| N | HR | FA |+----+---------+---------+| 1| 1| 1|+----+---------+---------+| 2| 1| 1|+----+---------+---------+| 3| 1| 0.366|+----+---------+---------+END>Training until now has taken 0 days 0 hours 0 minutes 15 seconds.===== TRAINING 6-stage =====<BEGINPOS count : consumed 50 : 50NEG count : acceptanceRatio 2 : 0.00016276Required leaf false alarm rate achieved. Branch training t训练完成后,在img目录下就会生成以下文件。 cascade.xml就是我们需要的分类器文件,其他都是过程文件。5.测试代码main.cpp#include <iostream>#include <opencv2/opencv.hpp>char* face_cascade_name = "C:\\Users\\lng\\Desktop\\image\\cascade.xml";void faceRecongize(cv::CascadeClassifier faceCascade, cv::Mat frame);int main(){ cv::VideoCapture *videoCap = new cv::VideoCapture;cv::CascadeClassifier faceCascade; // 加载苹果分类器文件if (!faceCascade.load(face_cascade_name)) {std::cout << "load face_cascade_name failed. " << std::endl;return -1;} // 打开摄像机videoCap->open(0);if (!videoCap->isOpened()) {videoCap->release();std::cout << "open camera failed"<< std::endl; return -1;}std::cout << "open camera success"<< std::endl; while(1){cv::Mat frame;//读取视频帧videoCap->read(frame);if (frame.empty()) {videoCap->release();return -1;} //进行苹果识别faceRecongize(faceCascade, frame); //窗口进行展示 imshow("face", frame); //等待回车键按下退出程序if (cv::waitKey(30) == 13) {cv::destroyAllWindows();return 0;} } system("pause"); return 0;}void faceRecongize(cv::CascadeClassifier faceCascade, cv::CascadeClassifier eyesCascade, cv::CascadeClassifier mouthCascade, cv::Mat frame) {std::vector<cv::Rect> faces; // 检测苹果faceCascade.detectMultiScale(frame, faces, 1.1, 2, 0 | cv::CASCADE_SCALE_IMAGE, cv::Size(30, 30));for (int i = 0; i < faces.size(); i++) { // 用椭圆画出苹果部分 cv::Point center(faces[i].x + faces[i].width / 2, faces[i].y + faces[i].height / 2);ellipse(frame, center, cv::Size(faces[i].width / 2, faces[i].height / 2), 0, 0, 360, cv::Scalar(255, 0, 255), 4, 8, 0);cv::Mat faceROI = frame(faces[i]);std::vector<cv::Rect> eyes; // 苹果上方区域写字进行标识cv::Point centerText(faces[i].x + faces[i].width / 2 - 40, faces[i].y - 20);cv::putText(frame, "apple", centerText, cv::FONT_HERSHEY_SIMPLEX, 1, cv::Scalar(0, 0, 255), 2);}}CMakeListscmake_minimum_required (VERSION 3.5)project (faceRecongize2015)MESSAGE(STATUS "PROJECT_SOURCE_DIR " ${PROJECT_SOURCE_DIR})SET(SRC_LISTS ${PROJECT_SOURCE_DIR}/src/main.cpp)set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")#set(CMAKE_AUTOMOC ON)#set(CMAKE_AUTOUIC ON)#set(CMAKE_AUTORCC ON)# 配置头文件目录include_directories(${PROJECT_SOURCE_DIR}/src)include_directories("D:\\opencv3.4.12\\opencv\\build\\include")include_directories("D:\\opencv3.4.12\\opencv\\build\\include\\opencv2")# 设置不显示命令框if(MSVC)#set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup")endif()# 添加库文件set(PRO_OPENCV_LIB "D:\\opencv3.4.12\\opencv\\build\\x64\\vc15\\lib\\opencv_world3412.lib" "D:\\opencv3.4.12\\opencv\\build\\x64\\vc15\\lib\\opencv_world3412d.lib")IF(WIN32) # 生成可执行程序ADD_EXECUTABLE(faceRecongize2015 ${SRC_LISTS})# 链接库文件 TARGET_LINK_LIBRARIES(faceRecongize2015 ${PRO_OPENCV_LIB})ENDIF()6.编译说明我的opencv 3.4.12的安装路径是 D:\opencv3.4.12目录结构- src - mian.cpp- build_x64- CMakeLists编译命令, 在build_x64目录下执行cmake -G "Visual Studio 14 2015 Win64" ..cmake --build ./ --config Release编译完成后拷贝D:\opencv3.4.12\opencv\build\x64\vc15\bin目录下的opencv_world3412.dll和opencv_world3412d.dll到可执行程序目录下。备注经过测试,自己训练的样本,准确度还是比较差的。可能是正样本数据太少,且图片背景占据位置较多。要提高准确度,首先增加正样本图片数量,还要就是尽量让你的目标物体占满整个图片,不要留有太多的背景。而且也要有尽可能多的负样本数据。
本文链接地址:https://www.jiuchutong.com/zhishi/297605.html 转载请保留说明!

上一篇:基于yoloV7添加关键点训练记录(yolov5 教程)

下一篇:使用小程序实现AI动漫脸特效(使用小程序实现im)

  • 真我BudsWireless2和BudsWireless2Neo哪款好(真我budswireless2s怎么样)

    真我BudsWireless2和BudsWireless2Neo哪款好(真我budswireless2s怎么样)

  • 西部数据蓝盘是固态吗(西部数据蓝盘绿盘)(西部数据蓝盘是什么)

    西部数据蓝盘是固态吗(西部数据蓝盘绿盘)(西部数据蓝盘是什么)

  • oppok9pro机身材质(oppok9pro是塑料机身吗)

    oppok9pro机身材质(oppok9pro是塑料机身吗)

  • vivox70pro+负一屏怎么关(vivo的负一屏怎么打开)

    vivox70pro+负一屏怎么关(vivo的负一屏怎么打开)

  • 陌陌怎么搜索账号找人(陌陌怎么搜索账号找回)

    陌陌怎么搜索账号找人(陌陌怎么搜索账号找回)

  • dns搜索区域填什么(dnspy搜索)

    dns搜索区域填什么(dnspy搜索)

  • 蓝牙发射器有什么作用(蓝牙发射器对身体有害吗)

    蓝牙发射器有什么作用(蓝牙发射器对身体有害吗)

  • cpu上涂抹的是什么(cpu表面涂了是什么东西)

    cpu上涂抹的是什么(cpu表面涂了是什么东西)

  • 弹幕突然没有了(这两天弹幕没了)

    弹幕突然没有了(这两天弹幕没了)

  • qq封七天有办法解封吗(qq封了七天有什么办法可以减轻)

    qq封七天有办法解封吗(qq封了七天有什么办法可以减轻)

  • 第五代计算机是指(第五代计算机是由日本,1982年人工智能第几次低谷)

    第五代计算机是指(第五代计算机是由日本,1982年人工智能第几次低谷)

  • 微信怎么申请健康二维码(微信怎么申请健康吗?)

    微信怎么申请健康二维码(微信怎么申请健康吗?)

  • 监控红外线坏了怎么修(监控红外线坏了晚上还能看到吗)

    监控红外线坏了怎么修(监控红外线坏了晚上还能看到吗)

  • 手机首页怎么显示天气(手机首页怎么显示黑白色)

    手机首页怎么显示天气(手机首页怎么显示黑白色)

  • 为什么快手看不到别人的粉丝和关注(为什么快手看不到消息)

    为什么快手看不到别人的粉丝和关注(为什么快手看不到消息)

  • 微信没有消息怎么还有个1(微信没有消息怎么还提示有消息)

    微信没有消息怎么还有个1(微信没有消息怎么还提示有消息)

  • 索尼a55怎么导入歌词(索尼a55怎么导入歌词教程)

    索尼a55怎么导入歌词(索尼a55怎么导入歌词教程)

  • 苹果xsmax韩版能双卡吗(苹果xsmax韩版支持双卡双待吗)

    苹果xsmax韩版能双卡吗(苹果xsmax韩版支持双卡双待吗)

  • 腾讯视频绑定页面在哪(腾讯视频绑定网页在哪)

    腾讯视频绑定页面在哪(腾讯视频绑定网页在哪)

  • 短信黑名单怎么解除(短信黑名单怎么拉黑)

    短信黑名单怎么解除(短信黑名单怎么拉黑)

  • 苹果抖音怎么看完整版(苹果抖音怎么看我@别人的视频)

    苹果抖音怎么看完整版(苹果抖音怎么看我@别人的视频)

  • 套机和单机有什么区别(什么叫套机什么叫单机)

    套机和单机有什么区别(什么叫套机什么叫单机)

  • iphonexr支持nfc吗(iponexr支持nfc吗?)

    iphonexr支持nfc吗(iponexr支持nfc吗?)

  • app设计细节如何把握(app的设计怎么写)

    app设计细节如何把握(app的设计怎么写)

  • Windows10如何显示启动/关机的详细信息(windows10如何显示桌面图标)

    Windows10如何显示启动/关机的详细信息(windows10如何显示桌面图标)

  • 【小程序项目开发 -- 京东商城】uni-app 商品分类页面(上)(微信小程序开发完整项目)

    【小程序项目开发 -- 京东商城】uni-app 商品分类页面(上)(微信小程序开发完整项目)

  • 蓝色龙舌兰田,墨西哥哈利斯科州龙舌兰酒产区 (© Brian Overcast/Alamy)(蓝色龙舌兰花语)

    蓝色龙舌兰田,墨西哥哈利斯科州龙舌兰酒产区 (© Brian Overcast/Alamy)(蓝色龙舌兰花语)

  • 应税销售收入是指什么
  • 保险公司车险理赔款如何入账
  • 合并报表是把资产负债表相加吗
  • 装修消防费用摊销几年
  • 多缴的企业所得税办理退税怎么处理
  • 减免房产税土地使用税 账务处理
  • 货物保管不善交来的罚款账务处理?
  • 建筑图纸设计费包括晒图费吗
  • 二手车融资租赁公司
  • 一次性奖励随工资发
  • 简易计税的分包款可以留到下期抵扣吗
  • 注销时分公司欠款怎么办
  • 代账公司收取服务费能开增值税票吗?
  • 怎么查公司连续缴纳社保记录
  • 营改增后二手房转让 一般计税 可以差额
  • 是否只有首次购买税控盘可以全额抵减增值税
  • 旧房转让土地增值税核定
  • 财务费用明细科目怎么写
  • 政府收费的目的是什么
  • 作废代开发票,是否退还已纳税款?
  • 建筑服务简易征收可以开专票吗
  • 稿费个人所得税计算方式
  • 固定资产更新改造替换部件怎么做账务处理
  • 企业老板机票怎么报销记账
  • 付款给对方怎么做分录
  • 企业利用外资
  • 公司购买自己公司的产品
  • Msssrv.exe - Msssrv是什么进程 有什么用
  • 增值税出口服务零税率
  • 房地产销售未完工产品收入是含税的吗
  • 政府补助财务处理流程
  • 企业无偿借款的税务处理
  • 工程物资已到发票怎么开
  • 美团收购联联
  • java异常编程题
  • 如何开发客户群体
  • python中类方法有什么用
  • 织梦怎么改网站主页
  • 增值税抵扣明细网络超时怎么处理
  • 固定业户应当向其机构
  • 废品材料回收的会计分录
  • 用人单位延迟给员工交社保怎么办
  • 制造费用科目一定无余额
  • 个人所得税要计入管理费用吗
  • 活动费用在哪个科目
  • 用货款抵扣供应商成本
  • 因质量问题对方直接扣款也不开票
  • 建筑施工企业工程施工明细科目
  • 小规模纳税人已付款对方不开发票几年了会计分录
  • 小企业会计准则2023电子版
  • 简要分析企业购买行为的影响因素
  • 滞纳金的收取范围是什么
  • 公对公转账多久能到账
  • 商业会计机构的组织形式
  • sqlserver 触发器 redis
  • Centos7.3下mysql5.7.18安装并修改初始密码的方法
  • win10小娜如何使用
  • redhat配置bond
  • xp系统玩英雄联盟出现win32
  • centos如何挂载镜像
  • centos挂载cd
  • centos下虚拟机
  • 在Mac OS Yosemite 系统中如何发送超大邮件附件
  • 启动图形界面
  • win7第三方更新
  • win10d盘无法格式化,说另一个正在使用
  • opengl画矩形函数
  • cocos2dx4.0入门
  • jquery easyui开发指南
  • nodejs深入浅出pdf百度云
  • 将一个目录复制到另一个目录下
  • jquery-easyui-1.3.3
  • javascript基础笔记
  • js操作对象的方法
  • javascript面向对象编程指南 pdf
  • easyui toolbar布局
  • 金税盘电子发票怎么开
  • 税控盘升级后开票流程
  • 北京纳税申报的具体流程
  • 购销合同印花税的计税依据怎么算
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设