级联人脸检测C ++ Opencv 3.0

时间:2016-08-20 01:05:41

标签: c++ opencv3.0 cascade-classifier

我正在尝试实施教程中提到的面部检测

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

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

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

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

  2. 上一个回答:

  3.   

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

         

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

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

    1. XML标准声明:
    2.   

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

      有三种方法可以解决这个问题:

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

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