You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
230 lines
4.0 KiB
C++
230 lines
4.0 KiB
C++
#include "WheelModel.h"
|
|
#include "TempImage.h"
|
|
#include "ImageCompareModel.h"
|
|
#include "qjsonobject.h"
|
|
#pragma execution_character_set("utf-8")
|
|
enum TEM_MODEL{
|
|
emTypeModelSuccess = 0,
|
|
emTypeModelWarning,
|
|
emTypeModelError
|
|
};
|
|
WheelModel::WheelModel()
|
|
{
|
|
m_strModelID = QString();
|
|
m_dHeight = 0; //mm
|
|
m_dDiameter = 0; //mm
|
|
m_passageway = 0;
|
|
m_nRotate = 0;
|
|
bDetect = false;
|
|
m_nCount = 0;
|
|
m_pChannelInfo = NULL;;
|
|
m_pTempImage = NULL;;
|
|
m_pDetectModel = new ImageCompareModel;
|
|
m_pTempImage = new TempImage;
|
|
}
|
|
|
|
|
|
WheelModel::~WheelModel()
|
|
{
|
|
if (m_pDetectModel) {
|
|
delete m_pDetectModel;
|
|
m_pDetectModel = NULL;
|
|
}
|
|
if (m_pTempImage) {
|
|
delete m_pTempImage;
|
|
m_pTempImage = NULL;
|
|
}
|
|
if (m_pChannelInfo) {
|
|
delete m_pChannelInfo;
|
|
m_pChannelInfo = NULL;
|
|
}
|
|
}
|
|
|
|
void WheelModel::clearCount()
|
|
{
|
|
m_nCount = 0;
|
|
}
|
|
|
|
void WheelModel::increCount(int n /*= 1*/)
|
|
{
|
|
m_nCount += n;
|
|
}
|
|
int WheelModel::getCount() const
|
|
{
|
|
return m_nCount;
|
|
}
|
|
bool WheelModel::initTmpImage(const QString&strBase)
|
|
{
|
|
if (!m_pTempImage) {
|
|
m_pTempImage = new TempImage;
|
|
}
|
|
m_pTempImage->init(strBase, m_strModelID);
|
|
return true;
|
|
}
|
|
|
|
bool WheelModel::initComModel(const QString&strBase)
|
|
{
|
|
if (!m_pDetectModel) {
|
|
m_pDetectModel = new ImageCompareModel;
|
|
}
|
|
QString str = strBase + "template\\" + m_strModelID + "\\model.yml";
|
|
std::string strs = str.toLocal8Bit().toStdString();
|
|
bool bFlags = m_pDetectModel->readFromFile(strs/*str.toLatin1().data()*/);
|
|
if (!bFlags) {
|
|
m_pDetectModel->train(m_pTempImage->getImgVector());
|
|
bFlags = m_pDetectModel->save2file(strs/*string((const char *)str.toLocal8Bit())*/);
|
|
}
|
|
return bFlags;
|
|
}
|
|
|
|
void WheelModel::readJson(QJsonObject *pJson)
|
|
{
|
|
if (!pJson) {
|
|
return;
|
|
}
|
|
QJsonObject obj = pJson->value(m_strModelID).toObject();
|
|
if (!obj.empty()) {
|
|
m_passageway = obj.value("channel").toInt();
|
|
bDetect = obj.value("detect").toBool();
|
|
m_bAddTrain = obj.value("addTrain").toBool(true);
|
|
}
|
|
}
|
|
|
|
void WheelModel::saveJson(class QJsonObject *pJson)
|
|
{
|
|
if (!pJson) {
|
|
return;
|
|
}
|
|
QJsonObject obj;
|
|
obj.insert("channel", m_passageway);
|
|
obj.insert("detect", bDetect);
|
|
obj.insert("addTrain", m_bAddTrain);
|
|
pJson->insert(m_strModelID, obj);
|
|
}
|
|
|
|
double WheelModel::getDiameter() const
|
|
{
|
|
return m_dDiameter;
|
|
}
|
|
|
|
void WheelModel::setDiameter(double dValue)
|
|
{
|
|
m_dDiameter = dValue;
|
|
}
|
|
|
|
int WheelModel::getChannel() const
|
|
{
|
|
return m_passageway;
|
|
}
|
|
|
|
void WheelModel::setChannel(int nValue)
|
|
{
|
|
m_passageway = nValue;
|
|
}
|
|
|
|
double WheelModel::getThickness() const
|
|
{
|
|
return m_dHeight;
|
|
}
|
|
|
|
void WheelModel::setThickness(double dValue)
|
|
{
|
|
m_dHeight = dValue;
|
|
}
|
|
|
|
bool WheelModel::getDetectState() const
|
|
{
|
|
return bDetect;
|
|
}
|
|
|
|
void WheelModel::setDetectState(bool bValue)
|
|
{
|
|
bDetect = bValue;
|
|
}
|
|
|
|
void WheelModel::setRepeatNum(int nValue)
|
|
{
|
|
m_nRotate = nValue;
|
|
if (m_pDetectModel)
|
|
{
|
|
m_pDetectModel->setRepeatNum(nValue);
|
|
}
|
|
}
|
|
|
|
int WheelModel::getRepeatNum() const
|
|
{
|
|
return m_pDetectModel->getRepeatNum();
|
|
//return m_nRotate;
|
|
}
|
|
|
|
ICompareModel * WheelModel::getImageComModel() const
|
|
{
|
|
// if (!m_pDetectModel)
|
|
// {
|
|
// m_pDetectModel = new ImageCompareModel;
|
|
// }
|
|
return m_pDetectModel;
|
|
}
|
|
|
|
void WheelModel::setImageComModel(ICompareModel *p)
|
|
{
|
|
m_pDetectModel = p;
|
|
}
|
|
|
|
TempImage * WheelModel::getTempImage() const
|
|
{
|
|
return m_pTempImage;
|
|
}
|
|
|
|
QString WheelModel::getModelID() const
|
|
{
|
|
return m_strModelID;
|
|
}
|
|
|
|
void WheelModel::setModelID(QString id)
|
|
{
|
|
m_strModelID = id;
|
|
}
|
|
|
|
void WheelModel::setPicPath(QString str)
|
|
{
|
|
m_strPath = str;
|
|
}
|
|
|
|
QString WheelModel::getPicPath() const
|
|
{
|
|
return m_strPath;
|
|
}
|
|
|
|
int WheelModel::getImageModel() const
|
|
{
|
|
if (m_pDetectModel->getBaseImg().data == NULL){
|
|
return emTypeModelWarning;
|
|
}
|
|
else{
|
|
if (m_pDetectModel->getFalseSampleMinDis() >= m_pDetectModel->getDisMax()){
|
|
return emTypeModelSuccess;
|
|
}
|
|
else{
|
|
return emTypeModelError;
|
|
}
|
|
}
|
|
}
|
|
|
|
bool WheelModel::reloadTmpImage(const QString& strBase)
|
|
{
|
|
if (!m_pTempImage) {
|
|
m_pTempImage = new TempImage;
|
|
}
|
|
m_pTempImage->reload(strBase, m_strModelID);
|
|
return true;
|
|
}
|
|
|
|
int WheelModel::getImgCount() const
|
|
{
|
|
if (m_pTempImage != NULL)
|
|
return m_pTempImage->getImgCount();
|
|
else
|
|
return 0;
|
|
}
|