2
OpenCV의 svm 클래스를 사용하는 대신 SVM을 직접 구현하고 있습니다. 내 SVM이 출력을 저장하기 위해 사용하는 XML 파일을 원한다면 나중에 OpenCV의 SVM에서로드하여 사용할 수 있습니다. 이를 위해서는 무엇을해야합니까?OpenCV SVM 출력 파일 형식
요약하면 : OpenCV가 SVM 출력을 저장하는 데 사용하는 형식은 무엇입니까?
OpenCV의 svm 클래스를 사용하는 대신 SVM을 직접 구현하고 있습니다. 내 SVM이 출력을 저장하기 위해 사용하는 XML 파일을 원한다면 나중에 OpenCV의 SVM에서로드하여 사용할 수 있습니다. 이를 위해서는 무엇을해야합니까?OpenCV SVM 출력 파일 형식
요약하면 : OpenCV가 SVM 출력을 저장하는 데 사용하는 형식은 무엇입니까?
OpenCV의 CvSVM :: write 함수를 수행 할 수 있습니다. 여기
int i, var_count = get_var_count(), df_count, class_count;
const CvSVMDecisionFunc* df = decision_func;
cvStartWriteStruct(fs, name, CV_NODE_MAP, CV_TYPE_NAME_ML_SVM);
write_params(fs);
cvWriteInt(fs, "var_all", var_all);
cvWriteInt(fs, "var_count", var_count);
class_count = class_labels ? class_labels->cols :
params.svm_type == CvSVM::ONE_CLASS ? 1 : 0;
if(class_count)
{
cvWriteInt(fs, "class_count", class_count);
if(class_labels)
cvWrite(fs, "class_labels", class_labels);
if(class_weights)
cvWrite(fs, "class_weights", class_weights);
}
if(var_idx)
cvWrite(fs, "var_idx", var_idx);
// write the joint collection of support vectors
cvWriteInt(fs, "sv_total", sv_total);
cvStartWriteStruct(fs, "support_vectors", CV_NODE_SEQ);
for(i = 0; i < sv_total; i++)
{
cvStartWriteStruct(fs, 0, CV_NODE_SEQ + CV_NODE_FLOW);
cvWriteRawData(fs, sv[i], var_count, "f");
cvEndWriteStruct(fs);
}
cvEndWriteStruct(fs);
// write decision functions
df_count = class_count > 1 ? class_count*(class_count-1)/2 : 1;
df = decision_func;
cvStartWriteStruct(fs, "decision_functions", CV_NODE_SEQ);
for(i = 0; i < df_count; i++)
{
int sv_count = df[i].sv_count;
cvStartWriteStruct(fs, 0, CV_NODE_MAP);
cvWriteInt(fs, "sv_count", sv_count);
cvWriteReal(fs, "rho", df[i].rho);
cvStartWriteStruct(fs, "alpha", CV_NODE_SEQ+CV_NODE_FLOW);
cvWriteRawData(fs, df[i].alpha, df[i].sv_count, "d");
cvEndWriteStruct(fs);
if(class_count > 1)
{
cvStartWriteStruct(fs, "index", CV_NODE_SEQ+CV_NODE_FLOW);
cvWriteRawData(fs, df[i].sv_index, df[i].sv_count, "i");
cvEndWriteStruct(fs);
}
else
CV_ASSERT(sv_count == sv_total);
cvEndWriteStruct(fs);
}
cvEndWriteStruct(fs);
cvEndWriteStruct(fs);
그리고 당신이 CvFileStorage를 생성하고 디스크에 저장할 수있는 방법입니다 :이 방법을함으로써
const char* filename = "/xxx/yyy/zzz";
const char* modelname = "svm";
CvFileStorage* fs = cvOpenFileStorage(filename, 0, CV_STORAGE_WRITE);
if (fs) {
write(fs, modelname);
}
cvReleaseFileStorage(&fs);
, 당신은 XML이나 YAML 형식 및 사용에 모델을 저장할 수 있습니다 CvSVM :: read()는 모델 파일을로드합니다. 희망이 도움이됩니다.