如何为opencv-python创建自定义的``任何对象''级联.xml?

问题描述

我想创建一个haar级联,以便可以用它来检测opencv-python中的对象。例如,我想检测一个手表。我尝试使用级联培训师gui进行级联,但没有给我预期的结果。

解决方法

因此,问题是Haar Cascade不是检测器,也不是分类器。如果要使用Haar Cascade,它将与SVM(支持向量机)结合使用,以进行分类,然后实现滑动窗口以检测手表,这是一个特征提取器。 因此,这些步骤是休闲的。 1使用滑动窗口提取图像补丁。
2将其传递给经过Haar Cascade培训的SVM
3如果预测正确,则绘制矩形

如果您仍然需要帮助,我建议本系列教程https://pythonprogramming.net/haar-cascade-object-detection-python-opencv-tutorial/.please与我联系。

,

在培训之前,请先通过互联网进行搜索。也许您想要检测的物体已经被训练,所以您不需要再次训练。

例如,您要检测手表。 haar文件可用here

所以无论文件是否正常工作我都使用它,结果是:

enter image description here

代码:

import cv2

w_cascade = cv2.CascadeClassifier('watchcascade10stage.xml')

cap = cv2.VideoCapture(0)

while True:
    ret,img = cap.read()
    if ret:
        gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
        w = w_cascade.detectMultiScale(image=gray,scaleFactor=1.3                                        
                                       minNeighbors=50)

        for (x,y,w,h) in watches:
            cv2.rectangle(img,(x,y),(x + w,y + h),(255,255,0),2)
            font = cv2.FONT_HERSHEY_SIMPLEX
            cv2.putText(img,'Watch',(x - w,y - h),font,0.5,(11,255),2,cv2.LINE_AA)

        cv2.imshow('img',img)
        k = cv2.waitKey(0) & 0xff
        if k == 27:
             break

cap.release()
cv2.destroyAllWindows()

您可以找到其他通过Internet搜索的教程。例如,以this video

开头