将HarrCascade加载到CascadeClassifier中时XML解析错误

时间:2019-05-20 21:40:23

标签: c++ xml opencv

我是openCV的新手,并从example code复制了一些基本的眼睛/面部跟踪代码。我在第20行收到解析错误-“ face_cascade.load(...)”。

String face_cascade_name = "C:/Users/$Username$/Downloads/haarcascade_frontalface_alt.xml";

if (!face_cascade.load( face_cascade_name ) )
    {
        cout << "--(!)Error loading eyes cascade\n";
        return -1;
    };

当我运行它(在发布模式下)时,出现“未处理的异常”并中断。在调试模式下,控制台也会收到XML解析错误(请参见下文)。

调试时,我发现只有当我使用"haarcascade_eye_tree_eyeglasses.xml"作为CascadeClassifier时,一切都可以按预期运行。

String face_cascade_name = "C:/Users/$Username$/Downloads/haarcascade_eye_tree_eyeglasses.xml"

我已经尝试从openCV的github重新下载HaarCascades多次(我看不到其他有关不良XML文件的投诉)。我尝试加载多个不同的XML文件,但是除了“ haarcascade_eye_tree_eyeglasses.xml”之外,所有文件都抛出相同的错误。在网上看过的其他地方都找不到这个问题。我尝试过重新构建openCV库,甚至尝试将其他分类器XML数据粘贴到“ haarcascade_eye_tree_eyeglasses.xml”的标题中,不知道下一步该怎么做。

有什么想法为什么只能正确加载1个HaarCascade XML文件?

Visual Studio窗口错误

Unhandled exception at 0x00007FFC5E3F9129 in testCV.exe: Microsoft C++ exception: cv::Exception at memory location 0x000000883396DF90.

调试控制台错误

OpenCV(4.1.0-dev) Error: Parsing error (cv::XMLParser::parse) in C:\Users\$Username$\source\repos\testCV\haarcascade_frontalface_alt.xml(1): Valid XML should start with '<?xml ...?>', file C:\Users\$Username$\Downloads\opencv-master\modules\core\src\persistence_xml.cpp, line 786

persistance_xml.cpp行774-786:

    bool parse(char* ptr)
    {
        CV_Assert( fs != 0 );

        std::string key, key2, type_name;
        int tag_type = 0;
        bool ok = false;

        // CV_XML_INSIDE_TAG is used to prohibit leading comments
        ptr = skipSpaces( ptr, CV_XML_INSIDE_TAG );

        if( memcmp( ptr, "<?xml", 5 ) != 0 )  // FIXIT ptr[1..] - out of bounds read without check
            CV_PARSE_ERROR_CPP( "Valid XML should start with \'<?xml ...?>\'" );

我正在使用Visual Studio 2017,OpenCV 4.1.0,Win10。

1 个答案:

答案 0 :(得分:0)

将这些xml文件的内容从GitHub复制/粘贴到本地文件时遇到了这个问题。在本地克隆存储库并将xml文件复制到所需位置后,解析问题就消失了。