|
|
|
@ -304,7 +304,7 @@ bool dataPreProcessing::loadSampleWithItsCorresLabel(const QString& samplePath)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
mLabelMapSample.insert(mLabel.toInt(), mRightLeftMapSample);
|
|
|
|
mLabelMapSample.insert(mLabel.toInt(), mRightLeftMapSample);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
m_StandardnormFileMapLabelSsample[dir.dirName()] = mLabelMapSample;
|
|
|
|
m_StandardnormFileMapLabelSample[dir.dirName()] = mLabelMapSample;
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ -349,8 +349,7 @@ QVector<int> dataPreProcessing::modelPrediction()
|
|
|
|
|
|
|
|
|
|
|
|
return finalLabelVec;
|
|
|
|
return finalLabelVec;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
int dataPreProcessing::modelPrediction(const QVector<QVector<double>> dataVec, QString typeSerial, QString leftRightJudge)
|
|
|
|
int dataPreProcessing::modelPrediction(const QVector<QVector<double>> vec, QString typeSerial, QString leftRightJudge)
|
|
|
|
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (leftRightJudge.isEmpty())
|
|
|
|
if (leftRightJudge.isEmpty())
|
|
|
|
{
|
|
|
|
{
|
|
|
|
@ -358,137 +357,161 @@ int dataPreProcessing::modelPrediction(const QVector<QVector<double>> vec, QStri
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//mComparedValMapLabel.clear();
|
|
|
|
//mComparedValMapLabel.clear();
|
|
|
|
if (vec.size() <= 0)
|
|
|
|
if (dataVec.size() <= 0)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
qDebug() << "model vec is empty";
|
|
|
|
qDebug() << "model vec is empty";
|
|
|
|
return -1;
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
QMultiMap<int, QMultiMap<QString, QVector<QVector<double>>>> typeTarLabelMapSampleVec = m_StandardnormFileMapLabelSsample[typeSerial];
|
|
|
|
QMultiMap<int, QMultiMap<QString, QVector<QVector<double>>>> typeTarLabelMapSampleVec = m_StandardnormFileMapLabelSample[typeSerial];
|
|
|
|
if (typeTarLabelMapSampleVec.size() == 0)
|
|
|
|
if (typeTarLabelMapSampleVec.size() == 0)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
qDebug() << "typeTarsize";
|
|
|
|
qDebug() << typeSerial << " do not have template file";
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
QVector<double> reshapedTarVec;
|
|
|
|
|
|
|
|
loadedDataReshapeForComparison(vec, reshapedTarVec);
|
|
|
|
|
|
|
|
if (reshapedTarVec.size() <= 0)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
qDebug() << "reshape";
|
|
|
|
|
|
|
|
return -1;
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
qDebug() << "tarReshapedSize:" << reshapedTarVec.size();
|
|
|
|
|
|
|
|
cv::Mat tarShapeMat(1, reshapedTarVec.size(), CV_64FC1, &reshapedTarVec[0]);
|
|
|
|
|
|
|
|
cv::Mat test;
|
|
|
|
|
|
|
|
tarShapeMat.convertTo(test, CV_32FC1);
|
|
|
|
|
|
|
|
cv::Mat dstTarShapeMat;
|
|
|
|
|
|
|
|
cv::medianBlur(test, dstTarShapeMat, 7);
|
|
|
|
|
|
|
|
dstTarShapeMat.convertTo(dstTarShapeMat, CV_64FC1);
|
|
|
|
|
|
|
|
std::vector<double> dstTarShapeVec;
|
|
|
|
|
|
|
|
auto convertToVector = [&](const cv::Mat& m, std::vector<double>& v) {
|
|
|
|
auto convertToVector = [&](const cv::Mat& m, std::vector<double>& v) {
|
|
|
|
|
|
|
|
v.clear();
|
|
|
|
double *p = (double*)m.row(0).data;
|
|
|
|
double *p = (double*)m.row(0).data;
|
|
|
|
for (int i = 0; i < m.cols; i++)
|
|
|
|
for (int i = 0; i < m.cols; i++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
v.push_back(p[i]);
|
|
|
|
v.push_back(p[i]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
};
|
|
|
|
convertToVector(dstTarShapeMat, dstTarShapeVec);
|
|
|
|
auto dataReshapeAndPretreatment = [&](const QVector<QVector<double>>& srcVec, std::vector<double>& reshapedVec)->bool
|
|
|
|
LB_Improved filter(dstTarShapeVec, reshapedTarVec.size() / 50.0);
|
|
|
|
{
|
|
|
|
qDebug() << "filter v size: " << filter.getVSize();
|
|
|
|
QVector<double> reshapedTarVec;
|
|
|
|
|
|
|
|
loadedDataReshapeForComparison(srcVec, reshapedTarVec);
|
|
|
|
|
|
|
|
if (reshapedTarVec.size() <= 0)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
qDebug() << "reshapedTarVec is empty";
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//qDebug() << "tarReshapedSize:" << reshapedTarVec.size();
|
|
|
|
|
|
|
|
cv::Mat tarShapeMat(1, reshapedTarVec.size(), CV_64FC1, &reshapedTarVec[0]);
|
|
|
|
|
|
|
|
cv::Mat test;
|
|
|
|
|
|
|
|
tarShapeMat.convertTo(test, CV_32FC1);
|
|
|
|
|
|
|
|
cv::Mat dstTarShapeMat;
|
|
|
|
|
|
|
|
cv::medianBlur(test, dstTarShapeMat, 7);
|
|
|
|
|
|
|
|
dstTarShapeMat.convertTo(dstTarShapeMat, CV_64FC1);
|
|
|
|
|
|
|
|
convertToVector(dstTarShapeMat, reshapedVec);
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
std::vector<double> dstTarShapeVec;
|
|
|
|
|
|
|
|
if (!dataReshapeAndPretreatment(dataVec, dstTarShapeVec))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//LB_Improved filter(dstTarShapeVec, dstTarShapeVec.size() / 50.0);
|
|
|
|
|
|
|
|
//qDebug() << "filter v size: " << filter.getVSize();
|
|
|
|
//double bestSofar = filter.getLowestCost();
|
|
|
|
//double bestSofar = filter.getLowestCost();
|
|
|
|
QMultiMap<int, QMultiMap<QString, QVector<QVector<double>>>>::iterator it;
|
|
|
|
|
|
|
|
QVector<QVector<QVector<double>>> loopVec;
|
|
|
|
QVector<QVector<QVector<double>>> loopVec;
|
|
|
|
QVector<int> labelLoopVec;
|
|
|
|
QVector<int> labelLoopVec;
|
|
|
|
double disMin = DBL_MAX;
|
|
|
|
double disMin = DBL_MAX;
|
|
|
|
int bestLabel = -1;
|
|
|
|
int bestLabel = -1;
|
|
|
|
|
|
|
|
int bestLabel1 = -1;
|
|
|
|
//test
|
|
|
|
//test
|
|
|
|
double globalVal = DBL_MAX;
|
|
|
|
double globalVal = DBL_MAX;
|
|
|
|
for (it = typeTarLabelMapSampleVec.begin(); it != typeTarLabelMapSampleVec.end(); ++it) {
|
|
|
|
QMultiMap<int, QMultiMap<QString, QVector<QVector<double>>>>::iterator it;
|
|
|
|
|
|
|
|
for (it = typeTarLabelMapSampleVec.begin(); it != typeTarLabelMapSampleVec.end(); ++it)
|
|
|
|
|
|
|
|
{
|
|
|
|
//loopVec.push_back(it.value());
|
|
|
|
//loopVec.push_back(it.value());
|
|
|
|
//labelLoopVec.push_back(it.key());
|
|
|
|
//labelLoopVec.push_back(it.key());
|
|
|
|
const int label = it.key();
|
|
|
|
const int label = it.key();
|
|
|
|
//qDebug() << "num folder: " << label;
|
|
|
|
//qDebug() << "num folder: " << label;
|
|
|
|
QMultiMap<QString, QVector<QVector<double>>> rightLeftMapValueVec = it.value();
|
|
|
|
QMultiMap<QString, QVector<QVector<double>>> rightLeftMapValueVec = it.value();
|
|
|
|
QMultiMap<QString, QVector<QVector<double>>>::iterator iterRighLeftMap = rightLeftMapValueVec.begin();
|
|
|
|
if (!rightLeftMapValueVec.contains(leftRightJudge))
|
|
|
|
|
|
|
|
|
|
|
|
for (iterRighLeftMap; iterRighLeftMap != rightLeftMapValueVec.end(); iterRighLeftMap++)
|
|
|
|
|
|
|
|
{
|
|
|
|
{
|
|
|
|
const QString& leftOrRight = iterRighLeftMap.key();
|
|
|
|
qWarning() << QString("%1 %2 do not have %3 template file!").arg(typeSerial)
|
|
|
|
//qDebug() << "leftOrRight: " << leftOrRight;
|
|
|
|
.arg(label).arg(leftRightJudge);
|
|
|
|
if (leftOrRight == leftRightJudge)
|
|
|
|
continue;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
for(const QVector<QVector<double>>& srcSampleVec : rightLeftMapValueVec.values(leftRightJudge))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if (srcSampleVec.size() <= 0)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
qWarning() << QString("%1 %2 %3 template data is empty!").arg(typeSerial)
|
|
|
|
|
|
|
|
.arg(label).arg(leftRightJudge);
|
|
|
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
std::vector<double> sampleVec;
|
|
|
|
|
|
|
|
std::vector<double> newDstTarShapeVec(dstTarShapeVec);
|
|
|
|
|
|
|
|
if (srcSampleVec.first().size() < dataVec.first().size())
|
|
|
|
{
|
|
|
|
{
|
|
|
|
QVector<double> reshapedSampleVec;
|
|
|
|
QVector<QVector<double>> newDataVec;
|
|
|
|
loadedDataReshapeForComparison(iterRighLeftMap.value(), reshapedSampleVec);
|
|
|
|
int minSize = srcSampleVec.first().size();
|
|
|
|
if (reshapedSampleVec.size() < 0)
|
|
|
|
for (int i = 0; i < dataVec.size(); ++i)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
QVector<double> subVec = dataVec[i];
|
|
|
|
|
|
|
|
subVec.resize(minSize);
|
|
|
|
|
|
|
|
newDataVec.push_back(subVec);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!dataReshapeAndPretreatment(newDataVec, newDstTarShapeVec))
|
|
|
|
{
|
|
|
|
{
|
|
|
|
QString msg = QString("%1: %2 %3 data is empty").arg(typeSerial).arg(label).arg(leftOrRight);
|
|
|
|
|
|
|
|
qDebug() << msg;
|
|
|
|
|
|
|
|
continue;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
cv::Mat tarShapeSampleMat(1, reshapedSampleVec.size(), CV_64FC1, &reshapedSampleVec[0]);
|
|
|
|
if (!dataReshapeAndPretreatment(srcSampleVec, sampleVec))
|
|
|
|
cv::Mat testSample;
|
|
|
|
|
|
|
|
tarShapeSampleMat.convertTo(testSample, CV_32FC1);
|
|
|
|
|
|
|
|
cv::Mat dstSampleTarShapeMat;
|
|
|
|
|
|
|
|
cv::medianBlur(testSample, dstSampleTarShapeMat, 5);
|
|
|
|
|
|
|
|
dstSampleTarShapeMat.convertTo(dstSampleTarShapeMat, CV_64FC1);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
std::vector<double> sampleVec;
|
|
|
|
|
|
|
|
convertToVector(dstSampleTarShapeMat, sampleVec);
|
|
|
|
|
|
|
|
std::vector<double> sampleNewVec(sampleVec);
|
|
|
|
|
|
|
|
std::vector<double> dstTarShapeNewVec(dstTarShapeVec);
|
|
|
|
|
|
|
|
//qDebug() << "sampleVec size: " << sampleVec.size() << ", dstTarShapeVec size: "
|
|
|
|
|
|
|
|
// << dstTarShapeVec.size();
|
|
|
|
|
|
|
|
//qDebug() << "reshapedSampleVec size: " << reshapedSampleVec.size() << ", reshapedTarVec size: "
|
|
|
|
|
|
|
|
// << reshapedTarVec.size();
|
|
|
|
|
|
|
|
if (reshapedSampleVec.size() != reshapedTarVec.size())
|
|
|
|
|
|
|
|
{
|
|
|
|
{
|
|
|
|
//qDebug() << "something wrong with sample vec size";
|
|
|
|
continue;
|
|
|
|
if (sampleVec.size() > dstTarShapeVec.size())
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
sampleNewVec.resize(dstTarShapeVec.size());
|
|
|
|
|
|
|
|
//qDebug() << "sampleNewVec size:" << sampleNewVec.size();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else if (dstTarShapeVec.size() > sampleVec.size())
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
dstTarShapeNewVec.resize(sampleVec.size());
|
|
|
|
|
|
|
|
//qDebug() << "dstTarShapeNewVec size: " << dstTarShapeNewVec.size();
|
|
|
|
|
|
|
|
LB_Improved filterNew(dstTarShapeNewVec, dstTarShapeNewVec.size() / 50.0);
|
|
|
|
|
|
|
|
double dis = filterNew.test(sampleNewVec);
|
|
|
|
|
|
|
|
if (disMin > dis) {
|
|
|
|
|
|
|
|
disMin = dis;
|
|
|
|
|
|
|
|
bestLabel = label;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//qDebug() << "new filter v size: " << filterNew.getVSize();
|
|
|
|
|
|
|
|
//qDebug() << "disMin: " << disMin;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
}
|
|
|
|
|
|
|
|
else if (srcSampleVec.first().size() > dataVec.first().size())
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
QVector<QVector<double>> newSrcSampleVec;
|
|
|
|
|
|
|
|
int minSize = dataVec.first().size();
|
|
|
|
|
|
|
|
for (int i = 0; i < srcSampleVec.size(); ++i)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
double dis = filter.test(sampleNewVec);
|
|
|
|
QVector<double> subVec = srcSampleVec[i];
|
|
|
|
if (disMin > dis) {
|
|
|
|
subVec.resize(minSize);
|
|
|
|
disMin = dis;
|
|
|
|
newSrcSampleVec.push_back(subVec);
|
|
|
|
bestLabel = label;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//qDebug() << "disMin: " << disMin;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// test
|
|
|
|
if (!dataReshapeAndPretreatment(newSrcSampleVec, sampleVec))
|
|
|
|
|
|
|
|
|
|
|
|
/* double val = cv::norm(dstTarShapeMat, dstSampleTarShapeMat);
|
|
|
|
|
|
|
|
if (val < globalVal)
|
|
|
|
|
|
|
|
{
|
|
|
|
{
|
|
|
|
globalVal = val;
|
|
|
|
continue;
|
|
|
|
bestLabel = label;
|
|
|
|
}
|
|
|
|
}*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if (!dataReshapeAndPretreatment(srcSampleVec, sampleVec))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
LB_Improved filter(newDstTarShapeVec, newDstTarShapeVec.size() / 50.0);
|
|
|
|
|
|
|
|
if (newDstTarShapeVec.size() != sampleVec.size())
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
qWarning() << " newDstTarShapeVec.size != sampleVec.size";
|
|
|
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
double dis = filter.test(sampleVec);
|
|
|
|
|
|
|
|
if (disMin > dis) {
|
|
|
|
|
|
|
|
disMin = dis;
|
|
|
|
|
|
|
|
bestLabel = label;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
cv::Mat dstTarShapeMatNew(1, newDstTarShapeVec.size(), CV_64FC1, &newDstTarShapeVec[0]);
|
|
|
|
|
|
|
|
cv::Mat dstSampleTarShapeMatNew(1, sampleVec.size(), CV_64FC1, &sampleVec[0]);
|
|
|
|
|
|
|
|
// test
|
|
|
|
|
|
|
|
double val = cv::norm(dstTarShapeMatNew, dstSampleTarShapeMatNew);
|
|
|
|
|
|
|
|
//double val = cv::Mahalanobis(dstTarShapeMatNew, dstSampleTarShapeMatNew);
|
|
|
|
|
|
|
|
if (val < globalVal)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
globalVal = val;
|
|
|
|
|
|
|
|
bestLabel1 = label;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//double val = valueComparison(reshapedSampleVec, reshapedTarVec);
|
|
|
|
|
|
|
|
//if (val < globalVal)
|
|
|
|
|
|
|
|
//{
|
|
|
|
|
|
|
|
// globalVal = val;
|
|
|
|
|
|
|
|
// bestLabel1 = label;
|
|
|
|
|
|
|
|
//}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//double val = valueComparison(reshapedSampleVec, reshapedTarVec);
|
|
|
|
|
|
|
|
//mComparedValMapLabel[val] = label;
|
|
|
|
//mComparedValMapLabel[val] = label;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
mComparedValMapLabel[disMin] = bestLabel;
|
|
|
|
mComparedValMapLabel[disMin] = bestLabel;
|
|
|
|
|
|
|
|
mDisMapLabel[globalVal] = bestLabel1;
|
|
|
|
qDebug() << "disMin: " << disMin << " bestLabel: " << bestLabel;
|
|
|
|
qDebug() << "disMin: " << disMin << " bestLabel: " << bestLabel;
|
|
|
|
|
|
|
|
//qDebug() << "disMin1: " << globalVal << " bestLabel1: " << bestLabel1;
|
|
|
|
//cv::parallel_for_(cv::Range(0, loopVec.size()), parallelInvoker(this, loopVec, labelLoopVec, reshapedTarVec));
|
|
|
|
//cv::parallel_for_(cv::Range(0, loopVec.size()), parallelInvoker(this, loopVec, labelLoopVec, reshapedTarVec));
|
|
|
|
return 1;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -500,9 +523,9 @@ int dataPreProcessing::dataRepeatMatch(int mBoundary,
|
|
|
|
{
|
|
|
|
{
|
|
|
|
qDebug() << "m data:" << dataVec.size();
|
|
|
|
qDebug() << "m data:" << dataVec.size();
|
|
|
|
if (dataVec[0].size() <= 0) return -1;
|
|
|
|
if (dataVec[0].size() <= 0) return -1;
|
|
|
|
int startIndex = 5;
|
|
|
|
int startIndex = 20;
|
|
|
|
int step = 1;
|
|
|
|
int step = 1;
|
|
|
|
int win = mBoundary + 5;
|
|
|
|
int win = mBoundary + startIndex;
|
|
|
|
qWarning() << "I print mBoundary:" << mBoundary;
|
|
|
|
qWarning() << "I print mBoundary:" << mBoundary;
|
|
|
|
qWarning() << "I print winSize:" << win;
|
|
|
|
qWarning() << "I print winSize:" << win;
|
|
|
|
qWarning() << "I print sensor data size:" << dataVec[0].size();
|
|
|
|
qWarning() << "I print sensor data size:" << dataVec[0].size();
|
|
|
|
@ -527,8 +550,17 @@ int dataPreProcessing::dataRepeatMatch(int mBoundary,
|
|
|
|
if (mComparedValMapLabel.size() > 0)
|
|
|
|
if (mComparedValMapLabel.size() > 0)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
label = mComparedValMapLabel.first();
|
|
|
|
label = mComparedValMapLabel.first();
|
|
|
|
|
|
|
|
qDebug() << "final bestLabel: " << mComparedValMapLabel.begin().value()
|
|
|
|
|
|
|
|
<< " disMin: " << mComparedValMapLabel.begin().key();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
//int label1 = -1;
|
|
|
|
|
|
|
|
//if (mDisMapLabel.size() > 0)
|
|
|
|
|
|
|
|
//{
|
|
|
|
|
|
|
|
// label1 = mDisMapLabel.first();
|
|
|
|
|
|
|
|
// qDebug() << "final bestLabel1: " << mDisMapLabel.begin().value()
|
|
|
|
|
|
|
|
// << " disMin1: " << mDisMapLabel.begin().key();
|
|
|
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
mDisMapLabel.clear();
|
|
|
|
mComparedValMapLabel.clear();
|
|
|
|
mComparedValMapLabel.clear();
|
|
|
|
return label;
|
|
|
|
return label;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -537,7 +569,7 @@ int dataPreProcessing::dataRepeatMatch(QString typeSerial, QString leftRightJudg
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (m_comDecData.size() <= 0)
|
|
|
|
if (m_comDecData.size() <= 0)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
qDebug() << "com size";
|
|
|
|
qDebug() << "num com size is empty";
|
|
|
|
return -1;
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|