加入模板数据加载保护,如过文件加载失败,即对该型号进行重新训练

jizhi
bob.pan 5 years ago
parent 4b8ab2427f
commit a30dd9ee53

@ -295,101 +295,106 @@ bool ImageCompareModel::save2file(string filePath)
bool ImageCompareModel::readFromFile(string filePath) bool ImageCompareModel::readFromFile(string filePath)
{ {
FileStorage fs(filePath, FileStorage::READ); try {
if (!fs.isOpened()) FileStorage fs(filePath, FileStorage::READ);
{ if (!fs.isOpened())
return false; {
} return false;
}
fs[IMGCMP_STR_ALIGN_BASE_IMAGE] >> mAlignBaseImg; fs[IMGCMP_STR_ALIGN_BASE_IMAGE] >> mAlignBaseImg;
fs[IMGCMP_STR_COMPARE_BASE_IMAGE] >> mCompareBaseImg; fs[IMGCMP_STR_COMPARE_BASE_IMAGE] >> mCompareBaseImg;
fs[IMGCMP_STR_WEIGHT_MAT] >> mWeightMat; fs[IMGCMP_STR_WEIGHT_MAT] >> mWeightMat;
fs[IMGCMP_STR_INSIDE_AVE_IMAGE] >> mInSideBaseImg; fs[IMGCMP_STR_INSIDE_AVE_IMAGE] >> mInSideBaseImg;
fs[IMGCMP_STR_INSIDE_COMP_AVE_IMAGE] >> mInsideCompareBaseImg; fs[IMGCMP_STR_INSIDE_COMP_AVE_IMAGE] >> mInsideCompareBaseImg;
fs[IMGCMP_STR_INSIDE_WEIGHT] >> mInsideWeightMat; fs[IMGCMP_STR_INSIDE_WEIGHT] >> mInsideWeightMat;
fs[IMGCMP_STR_INSIDE_TEMPL] >> innerTempl; fs[IMGCMP_STR_INSIDE_TEMPL] >> innerTempl;
mMatchValScale = (double)fs[IMGCMP_STR_MATCH_VAL_SCALE]; mMatchValScale = (double)fs[IMGCMP_STR_MATCH_VAL_SCALE];
FileNode fn = fs[IMGCMP_STR_TARGET_MEAN_VAL]; FileNode fn = fs[IMGCMP_STR_TARGET_MEAN_VAL];
if (!fn.empty()) if (!fn.empty())
{ {
mTargetMeanVal = (int)fn; mTargetMeanVal = (int)fn;
} }
fn = fs[IMGCMP_STR_TARGET_STDDEV_VAL]; fn = fs[IMGCMP_STR_TARGET_STDDEV_VAL];
if (!fn.empty()) if (!fn.empty())
{ {
mTargetStddevVal = (int)fn; mTargetStddevVal = (int)fn;
} }
fn = fs[IMGCMP_STR_REPEAT_NUM]; fn = fs[IMGCMP_STR_REPEAT_NUM];
if (!fn.empty()) if (!fn.empty())
{ {
mRepeatNum = (int)fn; mRepeatNum = (int)fn;
} }
else else
{ {
//mRepeatNum = computeRepeatNum(); //mRepeatNum = computeRepeatNum();
} }
fn = fs[IMGCMP_STR_NAME]; fn = fs[IMGCMP_STR_NAME];
if (!fn.empty()) if (!fn.empty())
{ {
mName = (string)fn; mName = (string)fn;
} }
fn = fs[IMGCMP_STR_TRUE_SAMPLE_DIS_MEAN]; fn = fs[IMGCMP_STR_TRUE_SAMPLE_DIS_MEAN];
if (!fn.empty()) if (!fn.empty())
{ {
mTrueSampleDisMean = (double)fn; mTrueSampleDisMean = (double)fn;
} }
fn = fs[IMGCMP_STR_TRUE_SAMPLE_DIS_STDDEV]; fn = fs[IMGCMP_STR_TRUE_SAMPLE_DIS_STDDEV];
if (!fn.empty()) if (!fn.empty())
{ {
mTrueSampleDisStddev = (double)fn; mTrueSampleDisStddev = (double)fn;
} }
fn = fs[IMGCMP_STR_TRUE_SAMPLE_DIS_MIN]; fn = fs[IMGCMP_STR_TRUE_SAMPLE_DIS_MIN];
if (!fn.empty()) if (!fn.empty())
{ {
mTrueSampleDisMin = (double)fn; mTrueSampleDisMin = (double)fn;
} }
fn = fs[IMGCMP_STR_TRUE_SAMPLE_DIS_MAX]; fn = fs[IMGCMP_STR_TRUE_SAMPLE_DIS_MAX];
if (!fn.empty()) if (!fn.empty())
{ {
mTrueSampleDisMax = (double)fn; mTrueSampleDisMax = (double)fn;
} }
fn = fs[IMGCMP_STR_FALSE_SAMPLE_MIN_DIS]; fn = fs[IMGCMP_STR_FALSE_SAMPLE_MIN_DIS];
if (!fn.empty()) if (!fn.empty())
{ {
setFalseSampleMinDis((double)fn); setFalseSampleMinDis((double)fn);
} }
fn = fs[IMGCMP_STR_DIS_THRE]; fn = fs[IMGCMP_STR_DIS_THRE];
if (!fn.empty()) if (!fn.empty())
{ {
mDisThre = (double)fn; mDisThre = (double)fn;
} }
fn = fs[IMGCMP_STR_AVER_DIAMETER]; fn = fs[IMGCMP_STR_AVER_DIAMETER];
if (!fn.empty()) if (!fn.empty())
{ {
meanDiameter = (int)fn; meanDiameter = (int)fn;
} }
fn = fs[IMGCMP_STR_INSIDE_RADIUS]; fn = fs[IMGCMP_STR_INSIDE_RADIUS];
if (!fn.empty()) if (!fn.empty())
{ {
rInner = (float)fn; rInner = (float)fn;
} }
fn = fs[IMGCMP_STR_INSIDE_CIRCLE_NUM]; fn = fs[IMGCMP_STR_INSIDE_CIRCLE_NUM];
if (!fn.empty()) if (!fn.empty())
{ {
mInnerCircleNum = (double)fn; mInnerCircleNum = (double)fn;
} }
setFilePath(filePath); setFilePath(filePath);
genMask(); genMask();
return true; return true;
}
catch (std::exception &e) {
return false;
}
} }
void ImageCompareModel::preProcessImage(Mat& img, Mat &insideImg) const void ImageCompareModel::preProcessImage(Mat& img, Mat &insideImg) const

Loading…
Cancel
Save