我是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。
答案 0 :(得分:0)
将这些xml文件的内容从GitHub复制/粘贴到本地文件时遇到了这个问题。在本地克隆存储库并将xml文件复制到所需位置后,解析问题就消失了。