Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python OpenCV traincascade XML文件错误_Python_Xml_Opencv - Fatal编程技术网

Python OpenCV traincascade XML文件错误

Python OpenCV traincascade XML文件错误,python,xml,opencv,Python,Xml,Opencv,我不太确定哪里出了问题——我正在尝试用自己拍摄的+/-图像训练OpenCV进行目标检测。所有步骤都正常,但最终我的Python脚本不会读取XML级联文件(但会加载一个内置的人脸检测文件) 值得一提的是,我在Mac Lion上运行Python2.7.3 我的过程: 创建一个集合文件,正面图像上有边界框 创建负面图像列表 使用以下命令使用opencv\u createsamples:opencv\u createsamples-info collection.txt-bg negativeImage

我不太确定哪里出了问题——我正在尝试用自己拍摄的+/-图像训练OpenCV进行目标检测。所有步骤都正常,但最终我的Python脚本不会读取XML级联文件(但会加载一个内置的人脸检测文件)

值得一提的是,我在Mac Lion上运行Python2.7.3

我的过程:

  • 创建一个集合文件,正面图像上有边界框
  • 创建负面图像列表
  • 使用以下命令使用
    opencv\u createsamples
    opencv\u createsamples-info collection.txt-bg negativeImages.txt-vec positivectorfile.vec-num 20-w 32-h 24
  • 检查矢量文件:图像有点压扁,但看起来没问题
  • 使用以下命令运行
    traincascade
    程序:
    opencv\u traincascade-data directoryToStoreFiles-vec positivectorfile.vec-bg negativemagelist.txt-numPos 16-numNeg 20-numStages 5-mem 1000-maxHitRate 0.95-w 32-h 24
  • 然后运行以下Python脚本(与常用的人脸检测XML一起使用):

    结果是错误:
    cv2.error:节点不代表用户对象(未知类型?)


    我已将级联文件上载到此处:。不确定这是我的级联文件,一路上有其他问题,还是很明显的?

    < P>我不确定,因为我不使用Python OpenCV,只使用C++部分。您确定使用了正确的包装函数来检测MultiScale而不是旧的C cvHaarDetect吗?因为您的级联是使用traincascade进行训练的,traincascade生成的级联只适用于函数CascadeClassifier::detectMultiScale。它不适用于cvHaarDetect


    我认为Python中需要使用的函数是>Cv2.CasCdCasLaseFieldExtCultSimule,查看文档。

    < P>我不确定,因为我不使用Python OpenCV,只使用C++部分。您确定使用了正确的包装函数来检测MultiScale而不是旧的C cvHaarDetect吗?因为您的级联是使用traincascade进行训练的,traincascade生成的级联只适用于函数CascadeClassifier::detectMultiScale。它不适用于cvHaarDetect


    我认为在python中需要使用的函数是cv2.CascadeClassifier.detectMultiScale,请查看文档。

    好吧,cyberdecker的建议似乎是几个问题之一:cv2对所有东西都有完全不同的命令,并且在使用
    opencv\u traincascade
    时需要使用。我的代码现在可以工作了(尽管我的级联还没有完全工作):


    嗯,cyberdecker的建议似乎是几个问题中的一个:cv2对所有东西都有完全不同的命令,并且在使用
    opencv\u traincascade
    时是必需的。我的代码现在可以工作了(尽管我的级联还没有完全工作):


    嗯,谢谢你的建议(我认为这可能会引起问题)。这个错误实际上似乎来自cv.Load——在它可能在CascadeClassifier上出现错误之前抛出。编辑:更进一步,cv2似乎要求将Cascade加载为
    cv2.CascadeClassifier(“filename.xml”)
    Yes,当您切换到cv2和traincascade时,函数会发生很大变化。关于您的级联,培训是否正确终止?你说你的代码现在可以运行了,很好!您是否使用一些opencv级联进行了测试,以确保它成功加载级联?是的!该代码适用于所有cv2函数和(最后)我的级联。这种困惑主要来自于网上大量不太好的旧教程。cv2/traincascade问题只是我认为大部分已经解决的问题之一。例如:看似“假叶率”的错误实际上是程序在说“一切都很好,我们完成了!”谢谢你让我走上正轨!嗯,谢谢你的建议(我认为这可能会引起问题)。这个错误实际上似乎来自cv.Load——在它可能在CascadeClassifier上出现错误之前抛出。编辑:更进一步,cv2似乎要求将Cascade加载为
    cv2.CascadeClassifier(“filename.xml”)
    Yes,当您切换到cv2和traincascade时,函数会发生很大变化。关于您的级联,培训是否正确终止?你说你的代码现在可以运行了,很好!您是否使用一些opencv级联进行了测试,以确保它成功加载级联?是的!该代码适用于所有cv2函数和(最后)我的级联。这种困惑主要来自于网上大量不太好的旧教程。cv2/traincascade问题只是我认为大部分已经解决的问题之一。例如:看似“假叶率”的错误实际上是程序在说“一切都很好,我们完成了!”谢谢你让我走上正轨!
    import cv
    img = cv.LoadImage("test.jpg", 0)
    
    # load detection file (various files for different views and uses)
    cascade = cv.Load("cascade.xml")        # doesn't work
    #cascade = cv.Load("frontalface.xml")   # works
    
    # detect faces, return as list
    detected = cv.HaarDetectObjects(img, cascade, cv.CreateMemStorage())
    
    # iterate detected objects, drawing a rectangle around each
    for (x,y, w,h), n in detected:
        cv.Rectangle(img, (x,y), (x+w, y+h), 255)
    
    # create a window to display the results
    windowTitle = "Test Cascade"
    cv.NamedWindow(windowTitle, cv.CV_WINDOW_AUTOSIZE)
    
    # display tested image until the escape key is pressed
    while True:
        cv.ShowImage(windowTitle, img)
    
        # watch for escape key (ASCII 20)
        key = cv.WaitKey(20)
        if key == 27:
    
            # save the image to file is specified
            if saveIt == True:
                cv.SaveImage("detected.png", img)
    
            # ... and quit
            exit()
    
    #import library - MUST use cv2 if using opencv_traincascade
    import cv2
    
    # rectangle color and stroke
    color = (0,0,255)       # reverse of RGB (B,G,R) - weird
    strokeWeight = 1        # thickness of outline
    
    # set window name
    windowName = "Object Detection"
    
    # load an image to search for faces
    img = cv2.imread("test.jpg")
    
    # load detection file (various files for different views and uses)
    cascade = cv2.CascadeClassifier("cascade.xml")
    
    # preprocessing, as suggested by: http://www.bytefish.de/wiki/opencv/object_detection
    # img_copy = cv2.resize(img, (img.shape[1]/2, img.shape[0]/2))
    # gray = cv2.cvtColor(img_copy, cv2.COLOR_BGR2GRAY)
    # gray = cv2.equalizeHist(gray)
    
    # detect objects, return as list
    rects = cascade.detectMultiScale(img)
    
    # display until escape key is hit
    while True:
    
        # get a list of rectangles
        for x,y, width,height in rects:
            cv2.rectangle(img, (x,y), (x+width, y+height), color, strokeWeight)
    
        # display!
        cv2.imshow(windowName, img)
    
        # escape key (ASCII 27) closes window
        if cv2.waitKey(20) == 27:
            break
    
    # if esc key is hit, quit!
    exit()