|
|
|
|
|
#ifndef SMOKE_IDENTIFICATION_H
|
|
|
|
|
|
#define SMOKE_IDENTIFICATION_H
|
|
|
|
|
|
|
|
|
|
|
|
#include <fstream>
|
|
|
|
|
|
|
|
|
|
|
|
#include <QtWidgets/QMainWindow>
|
|
|
|
|
|
#include <QtConcurrent/QtConcurrent>
|
|
|
|
|
|
#include"xlsxdocument.h"
|
|
|
|
|
|
#include "xlsxworkbook.h"
|
|
|
|
|
|
|
|
|
|
|
|
#include <opencv2/core.hpp>
|
|
|
|
|
|
#include <opencv2/highgui.hpp>
|
|
|
|
|
|
|
|
|
|
|
|
#include "CameraControl.h"
|
|
|
|
|
|
#include "NetControl.h"
|
|
|
|
|
|
#include "ADModule.h"
|
|
|
|
|
|
#include "CategoryMatcher.h"
|
|
|
|
|
|
#include "lpSerialStation.h"
|
|
|
|
|
|
#include "dataPreprocessing.h"
|
|
|
|
|
|
#include "ui_SmokeBoxIdentification.h"
|
|
|
|
|
|
|
|
|
|
|
|
enum MsgType
|
|
|
|
|
|
{
|
|
|
|
|
|
EmptyCheckResult = 0,
|
|
|
|
|
|
DataCollectionEndSC,
|
|
|
|
|
|
StockCheckResult,
|
|
|
|
|
|
IntoStockResult
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
enum WorkMode
|
|
|
|
|
|
{
|
|
|
|
|
|
Idle = 0,
|
|
|
|
|
|
EmptyCheck,
|
|
|
|
|
|
StockCheck,
|
|
|
|
|
|
IntoStock
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
struct IntoStockInfo
|
|
|
|
|
|
{
|
|
|
|
|
|
QString streetName;
|
|
|
|
|
|
QString taskNum;
|
|
|
|
|
|
QString stockNum;
|
|
|
|
|
|
QStringList imagesPathList;
|
|
|
|
|
|
};
|
|
|
|
|
|
struct StockCheckInfo
|
|
|
|
|
|
{
|
|
|
|
|
|
QString streetName;
|
|
|
|
|
|
QString taskNum;
|
|
|
|
|
|
QString stockNum;
|
|
|
|
|
|
QString smokeTypeNum; //<2F><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD>
|
|
|
|
|
|
QString smokeQuantity; //<2F><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
QString smokeTypeNumRlt; //<2F>̵<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD>
|
|
|
|
|
|
QString smokeQuantityRlt; //<2F>̵<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
bool correctness; //<2F>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>һ<EFBFBD><D2BB>
|
|
|
|
|
|
void clear()
|
|
|
|
|
|
{
|
|
|
|
|
|
streetName.clear();
|
|
|
|
|
|
taskNum.clear();
|
|
|
|
|
|
stockNum.clear();
|
|
|
|
|
|
smokeTypeNum.clear();
|
|
|
|
|
|
smokeQuantity.clear();
|
|
|
|
|
|
smokeTypeNumRlt.clear();
|
|
|
|
|
|
smokeQuantityRlt.clear();
|
|
|
|
|
|
correctness = false;
|
|
|
|
|
|
}
|
|
|
|
|
|
StockCheckInfo &operator = (const StockCheckInfo& obj)
|
|
|
|
|
|
{
|
|
|
|
|
|
this->streetName = obj.streetName;
|
|
|
|
|
|
this->taskNum = obj.taskNum;
|
|
|
|
|
|
this->stockNum = obj.stockNum;
|
|
|
|
|
|
this->smokeTypeNum = obj.smokeTypeNum;
|
|
|
|
|
|
this->smokeQuantity = obj.smokeQuantity;
|
|
|
|
|
|
this->smokeTypeNumRlt = obj.smokeTypeNumRlt;
|
|
|
|
|
|
this->smokeQuantityRlt = obj.smokeQuantityRlt;
|
|
|
|
|
|
this->correctness = obj.correctness;
|
|
|
|
|
|
return *this;
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
struct FileInfo
|
|
|
|
|
|
{
|
|
|
|
|
|
QString baseName;
|
|
|
|
|
|
QString suffix;
|
|
|
|
|
|
QString name;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
class SmokeBoxIdentification : public QMainWindow
|
|
|
|
|
|
{
|
|
|
|
|
|
Q_OBJECT
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
SmokeBoxIdentification(QWidget *parent = Q_NULLPTR);
|
|
|
|
|
|
~SmokeBoxIdentification();
|
|
|
|
|
|
|
|
|
|
|
|
bool readCameraConfig();
|
|
|
|
|
|
signals:
|
|
|
|
|
|
void sgCapture(const QStringList serialNumberList);
|
|
|
|
|
|
void sgCategoryMatchFinished(QString smokeNum);
|
|
|
|
|
|
void sgShowImage(QLabel* labelPtr, const QImage& qImage);
|
|
|
|
|
|
void sgSendData2AndAlgo();
|
|
|
|
|
|
void sgSaveSensorData2Local(QString filePath);
|
|
|
|
|
|
void sgMonitorSensorTriggerStart(eSideID);
|
|
|
|
|
|
void sgMonitorSensorTriggerStop();
|
|
|
|
|
|
void sgSendStockCheckMsg(int mode);
|
|
|
|
|
|
private:
|
|
|
|
|
|
bool initCamera();
|
|
|
|
|
|
void captureTop();
|
|
|
|
|
|
void captureSide();
|
|
|
|
|
|
void saveImage(const QVector<ImageInfo>& vecImageInfo, int workMode);
|
|
|
|
|
|
void saveImage(const cv::Mat& imgMat, const QString& filePath);
|
|
|
|
|
|
bool getSaveImgNameInfo(QString serialNumber, FileInfo& fileInfo);
|
|
|
|
|
|
Q_SLOT void onSendStockCheckMsg(int mode);
|
|
|
|
|
|
|
|
|
|
|
|
Q_SLOT void onDecodeMsg(const QString& msg);
|
|
|
|
|
|
Q_SLOT void onCapturedImage(const QVector<ImageInfo>& vecImageInfo);
|
|
|
|
|
|
Q_SLOT void onNumStatistic(QString typeNum);
|
|
|
|
|
|
bool decodeSmokeInfoCsv(const QString& filePath);
|
|
|
|
|
|
bool matchSmokeNameAndTemplateFolderName(const QString& folderPath);
|
|
|
|
|
|
Q_SLOT void onShowImage(QLabel* labelPtr, const QImage& qImage);
|
|
|
|
|
|
Q_SLOT void onMonitorSensorTriggerStart(eSideID);
|
|
|
|
|
|
Q_SLOT void onMonitorSensorTriggerStop(eSideID);
|
|
|
|
|
|
|
|
|
|
|
|
bool m_bEmptyCheckStart{ false };
|
|
|
|
|
|
//bool m_bStockCheckStart{ false };
|
|
|
|
|
|
bool m_bCaptureFinish{ false };
|
|
|
|
|
|
bool m_bDataCollection{ false };
|
|
|
|
|
|
bool m_bCamerasInit{ false };
|
|
|
|
|
|
QMap<int, CameraInfo> m_mapIdCameraInfoTop;
|
|
|
|
|
|
QMap<int, CameraInfo> m_mapIdCameraInfoSide;
|
|
|
|
|
|
QMap<QString, int> m_mapSerialNumberIdTop;
|
|
|
|
|
|
QMap<QString, int> m_mapSerialNumberIdSide;
|
|
|
|
|
|
QMap<QString, QString> m_mapSmokeCode2Name;
|
|
|
|
|
|
QMap<QString, QString> m_mapSmokeName2TemplateFolderName;
|
|
|
|
|
|
|
|
|
|
|
|
WorkMode m_workMode;
|
|
|
|
|
|
std::shared_ptr<dataPreProcessing> m_pDataProcess;
|
|
|
|
|
|
CameraControl* m_pCameraControl;
|
|
|
|
|
|
NetControl* m_pNetControl;
|
|
|
|
|
|
CategoryMatcher* m_pCategoryMatcher;
|
|
|
|
|
|
IntoStockInfo m_currtIntoStockInfo;
|
|
|
|
|
|
StockCheckInfo m_currtStockCheckInfo;
|
|
|
|
|
|
QThread* m_pCaptureThread;
|
|
|
|
|
|
QString m_currLeftRightJudge;
|
|
|
|
|
|
QVector<QString> m_vecStrHeightLeft;
|
|
|
|
|
|
QVector<QString> m_vecStrHeightRight;
|
|
|
|
|
|
//QLabel* m_pShowRltImgLabel;
|
|
|
|
|
|
Ui::SmokeBoxIdentificationClass ui;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
#endif // !SMOKE_IDENTIFICATION_H
|