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

慈云数据 2024-03-12 技术支持 112 0

1.说明

  • opencv安装包中有训练好的分类器文件,可以实现人脸的识别。当然,我们也可以训练自己的分类器文件,实现对特定物体的识别。本文章就详细介绍下如何训练自己的分类器文件。

    2.效果

    • 我训练的是检测苹果的的分类器文件,可以实现对苹果的识别。

      在这里插入图片描述

      3.准备

      3.1 程序准备

      • 训练自己的分类器文件,需要用到两个程序 : opencv_createsamples.exeopencv_traincascade.exe
      • opencv最新的安装包中没有这两个程序,我们可以下载 3.4.14这个版本的安装包进行安装。
        • opencv安装包 : opencv-3.4.14-vc14_vc15.exe
        • 安装完成后,在这个目录下就会有这两个程序文件 opencv\build\x64\vc15\bin

          3.2 样本数据准备

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

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

            在这里插入图片描述

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

            请添加图片描述

          • 参数介绍

            • 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 ]  # 记录样本数据的文件(就是我们刚才创建的info.data文件)
                  [-img ]    
                  [-vec ]   # 输出文件,内含用于训练的正样本。 
                  [-bg ]  # 背景图像的描述文件
                  [-num ]   #样本数量(默认为1000)
                  [-bgcolor ]    #指定背景颜色
                  [-w ]#输出样本的宽度(以像素为单位)
                  [-h ]#输出样本的高度(以像素为单位)
                

                参考

                • 在安装包的这个目录下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      #目录名,如不存在训练程序会创建它,用于存放训练好的分类器
                       -vec               #包含正样本的vec文件名
                       -bg    #背景描述文件
                       [-numPos ]   #每级分类器训练时所用的正样本数目
                       [-numNeg ]   #每级分类器训练时所用的负样本数目
                       [-numStages ]   #训练的分类器的级数
                      --cascadeParams--
                       [-featureType ]  # 特征的类型: HAAR - 类Haar特征; LBP - 局部纹理模式特征
                       [-w ] #训练样本的尺寸(单位为像素)
                       [-h ] #训练样本的尺寸(单位为像素)
                      --boostParams--
                       [-minHitRate  = 0.995>] #分类器的每一级希望得到的最小检测率
                       [-maxFalseAlarmRate ] #分类器的每一级希望得到的最大误检率
                      

                      参考

                      • 在安装包的这个目录下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\image
                            vecFileName: C:\Users\lng\Desktop\image\sample.vec
                            bgFileName: bg.txt
                            numPos: 50
                            numNeg: 500
                            numStages: 12
                            precalcValBufSize[Mb] : 1024
                            precalcIdxBufSize[Mb] : 1024
                            acceptanceRatioBreakValue : -1
                            stageType: BOOST
                            featureType: HAAR
                            sampleWidth: 24
                            sampleHeight: 24
                            boostType: GAB
                            minHitRate: 0.995
                            maxFalseAlarmRate: 0.5
                            weightTrimRate: 0.95
                            maxDepth: 1
                            maxWeakCount: 100
                            mode: BASIC
                            Number of unique features given Windowsize [24,24] : 162336
                            ===== TRAINING 0-stage =====
                            
                            Training until now has taken 0 days 0 hours 0 minutes 1 seconds.
                            ===== TRAINING 1-stage =====
                            
                            Training until now has taken 0 days 0 hours 0 minutes 3 seconds.
                            ===== TRAINING 2-stage =====
                            
                            Training until now has taken 0 days 0 hours 0 minutes 5 seconds.
                            ===== TRAINING 3-stage =====
                            
                            Training until now has taken 0 days 0 hours 0 minutes 7 seconds.
                            ===== TRAINING 4-stage =====
                            
                            Training until now has taken 0 days 0 hours 0 minutes 11 seconds.
                            ===== TRAINING 5-stage =====
                            
                            Training until now has taken 0 days 0 hours 0 minutes 15 seconds.
                            ===== TRAINING 6-stage =====
                            release();
                            		std::cout 
微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon