OpenCV+Python训练分类器

@[TOC]opencv训练自己的分类器

opencv训练自己的分类器

总结一下在学习训练自己的分类器所看到的有帮助的资料。

正负样本的处理

正样本:负样本=1:3,正样本尺寸:负样本尺寸=1:6的最终效果比较好,若是场景比较单一的正、负样本数量不必太多,也无需满足1:3。正负样本的处理可以参考这篇文章(利用的Python代码,处理起来比较简单) https://blog.csdn.net/YK_LaNce/article/details/100576560.

所需的exe和dll工具

百度网盘自行下载:https://pan.baidu.com/s/14plhrufj2hQR3Es3aYqoIg.

自己参考之后所写代码:

#处理正样本
'''import cv2
path = "C:/pos/"          #pos文件所在地址
for i in range(1, 27):    #pos文件中图片数量
    print(path+str(i)+'.jpg')
    img = cv2.imread(path+str(i)+'.jpg', cv2.IMREAD_GRAYSCALE)
    img5050=cv2.resize(img,(50,50))        #将pos文件中图片压缩为50*50
    cv2.imshow("img", img5050)
    cv2.waitKey(20)
    cv2.imwrite('C:/pos1/'+str(i)+'.jpg', img5050)'''

#处理负样本
'''import cv2
path = "C:/neg/"
for i in range(1, 30):
    print(path+str(i)+'.jpg')
    img = cv2.imread(path+str(i)+'.jpg', cv2.IMREAD_GRAYSCALE)
    cv2.imwrite('C:/neg1/'+str(i)+'.jpg', img)'''

#生成描述文件
'''import os
def create_pos_n_neg():
    for file_type in ['pos']:       #运行一次之后修改pos为neg
        for img in os.listdir(file_type):
            if (file_type == 'neg'):
                line = file_type + '/' + img + '\n'
                with open('neg.txt', 'a') as f:
                    f.write(line)
            elif (file_type == 'pos'):
                line = file_type + '/' + img + ' 1 0 0 50 50\n'
                with open('pos.txt', 'a') as f:
                    f.write(line)

if __name__ == '__main__':
    create_pos_n_neg()'''


生成vec文件和xml文件

参考文章:https://www.jianshu.com/p/e35260f7cbf0?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation. 该文章中含有一些报错问题及解决办法。

测试xml文件

参考文章:https://www.jianshu.com/p/0afa9712c6d5.
自己所写代码如下:

#调用自带的摄像头
import cv2
import numpy as np
face_cascade=cv2.CascadeClassifier("cascade.xml")
cap=cv2.VideoCapture(0)
while True:
    ret,frame=cap.read()
    i=frame
    gray=cv2.cvtColor(i,cv2.COLOR_BGR2GRAY)
   	faces=face_cascade.detectMultiScale(gray,scaleFactor=1.1,minNeighbors=5)
    l=len(head)         #人数
    print (l)
    for (x,y,w,h) in faces:
        cv2.rectangle(i,(x,y),(x+w,y+h),(255,0,0),2)
        cv2.putText(i,'face',(int(w/2+x),int(y-h/5)),cv2.FONT_HERSHEY_PLAIN,2.0,(255,255,255),2,1)
        roi_gray = gray[y:y+h, x:x+w]
        roi_color=i[y:y+h,x:x+w]
    cv2.imshow("rstp",i)
    if cv2.waitKey(1) & 0xFF ==ord('q'):
        exit(0)
cap.release()         #释放摄像头
cv2.destroyAllWindows()            #关闭所有窗口


其他文章

有关正负样本数量:https://www.jianshu.com/p/0afa9712c6d5.

你可能感兴趣的:(OpenCV+Python)