将Harrcascade加载到CascadeClalsifier时,XML解析错误

XML Parsing Error while loading HarrCascade into CascadeClassifier

本文关键字:XML 错误 Harrcascade 加载 CascadeClalsifier      更新时间:2023-10-16

我是OpenCV的新手,并从示例代码中复制了一些基本的眼睛/面部跟踪代码。我在第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 cascaden";
        return -1;
    };

当我运行它(在发行模式下(时,我会得到一个"未手持异常"并断开。在调试模式下,我还会在控制台上获得XML解析错误(请参见下文(。

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

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_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$sourcerepostestCVhaarcascade_frontalface_alt.xml(1): Valid XML should start with '<?xml ...?>', file C:Users$Username$Downloadsopencv-mastermodulescoresrcpersistence_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。

我遇到了这个问题,当复制/粘贴从github到本地文件的这些XML文件的内容。在本地克隆仓库并将XML文件定为所需的位置后,解析问题消失了。

clone; opencv;来自GitHub的存储库(https://github.com/opencv/opencv/tree/master(在您当地的机器上。"不quot"复制内容。复制粘贴文件直接从克隆的位置到您的Visual Studio。它将起作用。

在这里,我终于找到了真正的答案。

您需要将XML文件更改为UTF-8。通常,我们下载该文件是带有bom的UTF-8。

您可以使用VSCODE应用更改文件代码。(请Google IT(