我在 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()
最佳答案
问题在这里:
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 级联在尝试识别高度标记的模式(如面部)时效果很好。一张灰度的脸,有一条水平线对应眼睛,一条垂直线对应 Nose ,然后一条水平线对应嘴巴。这种模式可以被 haar 很好地检测到。如果您想识别其他对象,如手机、书籍或类似物,最好使用其他技术,如 SIFT 特征。
关于python - Haar_classifier 在物体识别中需要很长时间来检测,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34469747/