Haar_classifier 在对象识别中需要很长时间才能检测到
Haar_classifier taking long time to detect in object recognition
我正在用 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 级联。这是一张非常大的图像中非常小的window。 haar 级联在图像内部的 15x15 正方形中寻找图案,然后开始增加正方形的大小。您的图像中有许多 15x15 的正方形。您必须将图像调整为更小的尺寸或增加 haar 级联的尺寸。
Haar 级联在尝试识别高度标记的模式(如面部)时效果很好。一张灰度的脸,有一条水平线对应眼睛,然后是一条垂直线对应鼻子,最后一条水平线对应嘴巴。 haar 可以很好地检测到这种模式。如果您想识别其他对象,例如手机 phone、书籍或类似物品,最好使用其他技术,例如 SIFT 特征。
我正在用 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 级联。这是一张非常大的图像中非常小的window。 haar 级联在图像内部的 15x15 正方形中寻找图案,然后开始增加正方形的大小。您的图像中有许多 15x15 的正方形。您必须将图像调整为更小的尺寸或增加 haar 级联的尺寸。
Haar 级联在尝试识别高度标记的模式(如面部)时效果很好。一张灰度的脸,有一条水平线对应眼睛,然后是一条垂直线对应鼻子,最后一条水平线对应嘴巴。 haar 可以很好地检测到这种模式。如果您想识别其他对象,例如手机 phone、书籍或类似物品,最好使用其他技术,例如 SIFT 特征。