Я скомпилировал OpenCV v3.4.3 с некоторыми пользовательскими аргументами; статическое связывание, драйвер 1394 не включен и сборка выпуска, см. ниже:
cmake -D CMAKE_BUILD_TYPE=Release -D BUILD_SHARED_LIBS=OFF -D WITH_1394=OFF -D CMAKE_INSTALL_PREFIX=/usr/local ..
У меня есть специальная программа для компиляции каскадных файлов haar в заголовочный файл, это для переносимости файлов, поскольку у меня не может быть никаких файлов активов, и все должно быть объединено в один двоичный файл, ниже будет создан заголовочный файл:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(int argc, char **argv) {
string fn = "haarcascade_frontalface_alt.xml";
ifstream in(fn.c_str());
string all,line;
while (getline(in,line))
all += line + "\n";
ofstream out("opencv_data.h");
out << "const char xml[] = {";
for (size_t i=0; i<all.length(); i++) {
if (i%16==0) out << "\n";
out << int(all[i]) << ", ";
}
out << "10};\n";
return 0;
}
Я использую FileStorage (FileStorage :: READ | FileStorage :: MEMORY) для чтения готового байтового массива заголовков в OpenCV, см. Неполный пример ниже:
#include "opencv_data.h"
CascadeClassifier face_cascade;
FileStorage fs(xml, FileStorage::READ | FileStorage::MEMORY);
face_cascade.read(fs.getFirstTopLevelNode()
Это отлично работает при компиляции на macOS 10.13.6 с использованием libc ++, проблема заключается в том, что при компиляции в Linux стандартная машина Debian 9.4 компилируется с использованием g ++ и статического связывания (-static-libstdc ++) - двоичный файл выдаст ошибку синтаксического анализа XML , см. ниже:
terminate called after throwing an instance of 'cv::Exception'
what(): OpenCV(3.4.3) /root/opencv-3.4.3/modules/core/src/persistence_xml.cpp:474: error: (-212:Parsing error) icvXMLParseTag in function '(null)(24352): Tag should start with '<''
Aborted
Сборка Debian 9.4 работает нормально, если я вручную извлекаю каскадный файл в программу во время выполнения (включаю его в качестве внешнего ресурса и загружаю как XML-файл), но не работает должным образом при загрузке через память (через байтовый массив заголовка) )
Приветствие.