OpenCV级联性能:有效的XML错误

时间:2015-09-20 21:52:10

标签: xml opencv haar-classifier

我在opencv 2.4.8环境中运行conda。我可以使用

训练car detector

opencv_traincascade -data data -vec cars.vec -bg bg.txt -numPos 500 -numNeg 500 -numStages 2 -w 48 -h 24

但是,我无法使用

检查性能

opencv_performance -data data -info cars.txt

我收到解析错误:

OpenCV Error: Parsing error (data(0): 
Valid XML should start with '<?xml ...?>') in icvXMLParse, 
file /Users/jhelmus/anaconda/conda-bld/work/opencv-2.4.8/modules/core/src/persistence.cpp, line 2252
libc++abi.dylib:terminating with uncaught exception of type cv::
Exception: /Users/jhelmus/anaconda/conda-bld/work/opencv-2.4.8/modules/core/src/persistence.cpp:2252: 
error: (-212) data(0): Valid XML should start with '<?xml ...?>' in function icvXMLParse  

我检查了.xml文件,并使用

进行了适当的格式化

<?xml version="1.0"?>

作为第一行。

导致此错误的原因是什么?

1 个答案:

答案 0 :(得分:2)

这是一个措辞错误的错误信息;问题在于保存的探测器的格式。 opencv_performance使用由opencv_haartraining输出的旧格式,但不适用于以opencv_traincascadedocs)使用的格式保存的检测器。

有两种解决方案:

1)您可以使用opencv_haartrainingman page)训练您的探测器。建议不要这样做,因为opencv_haartraining仅限于一个线程。它也是一种弃用的方法。

2)您可以将-baseFormatSave标记添加到opencv_traincascade命令(man page),强制它以旧格式保存检测器,即:

opencv_traincascade -data data -vec cars.vec -bg bg.txt -numPos 500 -numNeg 500 -numStages 2 -w 48 -h 24 -baseFormatSave

但是,此功能有一个错误,它会省略分类器类型声明。您可以通过运行

来修复它
sed -i 's/<cascade>/<cascade type_id="opencv-haar-classifier">/g' data/cascade.xml

在保存的检测器上添加缺少的分类器类型。

任何一种方法都应该允许你运行

opencv_performance -data data -info cars.txt

测试您的探测器。