1

我正在尝试实现教程中提到的人脸检测

http://docs.opencv.org/3.0-beta/doc/tutorials/objdetect/cascade_classifier/cascade_classifier.html#cascade-classifier

我在 Ubuntu 14.04 上使用 OpenCV 3.0。

我从这里下载了级联 xml 文件

https://github.com/opencv/opencv/tree/master/data/haarcascades

当我编译代码时,它给了我这个错误消息:

OpenCV Error: Parsing error (/...../haarcascade_frontalcatface.xml(5): Valid XML should start with '<?xml ...?>') in icvXMLParse, file /home/taleb/opencv3/opencv/modules/core/src/persistence.cpp, line 2220
terminate called after throwing an instance of 'cv::Exception'
  what():  /home/taleb/opencv3/opencv/modules/core/src/persistence.cpp:2220: error: (-212) /home/taleb/pythonproject/test1/haarcascade_frontalcatface.xml(5): Valid XML should start with '<?xml ...?>' in function icvXMLParse

有什么建议吗?

4

1 回答 1

2

我在堆栈溢出和其他网站中发现了一些修复。它们如下:

  1. 使用 Notepad++ 将字符编码从 UTF-8 更改为 ANSI。

  2. 上一个答案:

convert_cascade 用于由 haartraining 应用程序训练的级联,它不支持由 traincascade 应用程序训练的级联格式。

要使用 traincascade 执行此操作,只需使用相同的“-data”再次运行 opencv_traincascade,但将“-numStages”设置为您想要生成的点。应用程序将加载经过训练的阶段,实现所需的阶段数,将结果级联写入 xml 并完成工作。在某个阶段中断该过程可能会导致数据损坏,因此如果您最好在完成时删除该阶段。

参考:https ://stackoverflow.com/a/25831423/5671364 。

  1. XML 标准规定:

如果 XML 文档中没有编码声明(并且没有可用的外部编码声明机制,例如 HTTP 标头),则 XML 文档的假定编码取决于字节顺序标记 (BOM) 的存在。

有 3 种方法可以解决此问题:

  • 让 OpenCV 将 'encoding="ASCII"' 标记放入顶部根 XML 标记中。
  • 保留顶部根 XML 标记,但在将所有内容写入文件之前将其编码为 UTF-8。
  • 使用 Byte-Order-Mark 做其他事情,但要保持标准。

参考:http : //code.opencv.org/issues/976

于 2016-08-20T02:45:20.963 回答