zoukankan      html  css  js  c++  java
  • 【OpenCV】 训练Haar特征分类器

    本教程基于以下环境 macOS 10.12.6,OpenCV 3.3.0,python 3.6。由于网上基于masOS系统的教程太少,想出一篇相关教程造福大家~本文旨在学习如何在opencv中基于haar-like特征训练自己的分类器,并且用该分类器用于模式识别。

    1. 安装OpenCV和OpenCV源代码

       OpenCV至少要保证下载好2.4.5以上的版本,同时源码要对应好自己所安装的版本。

    brew tap homebrew/science
    brew install --with-tbb opencv

    2. 在github上clone一个工程,里面有相关训练脚本和训练样本文件夹等等,后面会用到,在terminal输入

    git clone https://github.com/mrnugget/opencv-haar-classifier-training

    3. 把正例训练集放入./positive_images,并且将正例的照片名称存入positives.txt里

    本训练的正例只有43张,非常少,若想训练完全需要样本量很大,有见过600-2000张不等的。再输入以下命令把名称存入positives.txt,效果图下

    find ./positive_images -iname "*.jpg" > positives.txt

    4. 同理,把反例训练集放入./negative_images,并且将正例的照片名称存入negative.txt里

    find ./negative_images -iname "*.jpg" > negatives.txt

    5. 通过bin/createsamples.pl脚本和opencv_createsamples工具创建正例样本集,再将其放入./samples 文件夹里

    perl bin/createsamples.pl positives.txt negatives.txt samples 43 "opencv_createsamples -bgcolor 0 -bgthresh 0 -maxxangle 0.5 -maxyangle 0.5 maxzangle 0.5 -maxidev 40 -w 40 -h 40"

    6. 把在/samples 文件夹里的样本集合成到samples.vec文件中 

    python ./tools/mergevec.py -v samples/ -o samples.vec

    7. 使用opencv_traincascade工具进行训练,并把结果保存到./classifier

    opencv_traincascade -data classifier -vec samples.vec -bg negatives.txt -numStages 20 -minHitRate 0.999 -maxFalseAlarmRate 0.5 -numPos 43 -numNeg 43 -w 40 -h 40 -mode ALL -precalcValBufSize 1024 -precalcIdxBufSize 1024

    然后开始阶段性训练,每一层训练都会打印到控制台,其中,如果每一层只能训练出1-2个特征点,那说明训练集有问题,不够大或特征不明显。需要等待的时候比较久,取决于样本大小和样本集大小。

    8. 在classifier文件夹里找到cascade.xml文件,就是训练好的分类器了~

    9. 本文用python做了实时检测训练的物体,也可以使用Node.js + Opencv 去识别,方法很多。博主可惜由于训练集不足的原因效果不是很好,不过代码附下,如果有训练成功或有疑问朋友,欢迎交流~

    import cv2
    
    face_cascade = cv2.CascadeClassifier('cascade.xml')
    cap = cv2.VideoCapture(0)
    
    while 1:
        ret, img = cap.read()
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        faces = face_cascade.detectMultiScale(gray)
    
        for (x,y,w,h) in faces:
            cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
            roi_gray = gray[y:y+h, x:x+w]
            roi_color = img[y:y+h, x:x+w]
    
        cv2.imshow('img',img)
        k = cv2.waitKey(30) & 0xff
        if k == 27:
            break
    
    cap.release()
    cv2.destroyAllWindows()

    Useful Material:

    1. http://coding-robin.de/2013/07/22/train-your-own-opencv-haar-classifier.html

    2. http://note.sonots.com/SciSoftware/haartraining.html#w0a08ab4

  • 相关阅读:
    【codeforces 755A】PolandBall and Hypothesis
    【codeforces 755B】PolandBall and Game
    【codeforces 755C】PolandBall and Forest
    Enhancing network controls in mandatory access control computing environments
    NPM 使用介绍
    【oracle】首次启动SQL Developer配置java.exe出错(Could not find jvm.cfg! )
    day70-oracle PLSQL_02光标
    day69-oracle 22-DBCA
    day70-oracle 12-Java调用存储过程和存储函数
    day17 16.关于sql注入与PreparedStatement介绍
  • 原文地址:https://www.cnblogs.com/yidansheng/p/8689901.html
Copyright © 2011-2022 走看看