我在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()
答案 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功能。