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.
smokeboxidentification/src/SmokeBoxIdentification.h

150 lines
3.9 KiB
C

#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