2015-09-20 41 views
2

我一個conda環境中運行opencv 2.4.8。我可以一個car detector使用OpenCV的級聯性能:有效的XML錯誤

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"?>

作爲第一行。

什麼是造成此錯誤?

回答

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 

來測試你的探測器。