Haar_classifier需要很长时间才能在物体识别中进行检测

时间:2015-12-26 08:33:40

标签: python opencv haar-classifier

我在opencv和python中进行对象识别。我使用51个阳性样本和100个阴性样本完成了训练,训练阶段是7.使用命令 opencv_traincascade -data samples -vec phones.vec -bg bg.txt -numPos 51 -numNeg 100 -w 40 -h 70 -featureType LBP

因此训练完成并创建了cascade.xml。现在我正在尝试对象识别,我面临的问题是,检测需要很长时间大约12到13分钟。 我该如何解决呢?

import cv2
import sys


cascpath = ('/home/aquib/opencv/opencv-3.0.0/data/haarcascades/cascade.xml')

Cascade = cv2.CascadeClassifier(cascpath)

img = cv2.imread('c2.jpg')    #saved in desktop

gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #converting it_to grey 


object_detect = Cascade.detectMultiScale(
    gray,
    scaleFactor=1.3,
    minNeighbors=5,
    minSize=(15,15),
    flags=cv2.CASCADE_SCALE_IMAGE
)

for (x,y,w,h) in object_detect:
    img = 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.namedWindow("Object_detect", cv2.WINDOW_NORMAL)
cv2.imshow("object",img)
cv2.waitKey(0)
cv2.destroyAllWindows()

1 个答案:

答案 0 :(得分:2)

问题在于:

object_detect = Cascade.detectMultiScale(
gray,
scaleFactor=1.3,
minNeighbors=5,
minSize=(15,15),
flags=cv2.CASCADE_SCALE_IMAGE)

你正在以1280x720的图像迭代最小尺寸15x15的haar级联。这是一个非常大的图像中的一个非常小的窗口。 haar级联在图像中寻找15x15正方形的图案,然后开始增加正方形的大小。您的图像中有许多15x15的正方形。您必须将图像调整为较小的尺寸或增加haar级联的大小。

Haar级联在尝试识别高度标记的图案(如面部)时效果很好。灰度级的面具有对应于眼睛的水平线,然后是对应于鼻子的垂直线,然后是对应于嘴的水平线。哈尔很好地发现了这种模式。如果您想识别其他对象(如手机,书籍或类似对象),最好使用其他技术,例如SIFT功能。