diff --git a/HanddleAI/HandleAiUi-new/FrontendBackendBridge.cpp b/HanddleAI/HandleAiUi-new/FrontendBackendBridge.cpp index 88eb4712..2bc26e72 100644 --- a/HanddleAI/HandleAiUi-new/FrontendBackendBridge.cpp +++ b/HanddleAI/HandleAiUi-new/FrontendBackendBridge.cpp @@ -1,6 +1,6 @@ #include #include - +#include fbBridge bridge; //INIT backEnd::backEnd(QObject* parent) @@ -109,4 +109,4 @@ std::vector switchProductWidgetDataPtr::getAllProductData() result = *productDatasPtr; mutex->unlock(); return result; -} \ No newline at end of file +} diff --git a/HanddleAI/HandleAiUi-new/FrontendBackendBridge.h b/HanddleAI/HandleAiUi-new/FrontendBackendBridge.h index 5d4cad4a..9cf787a3 100644 --- a/HanddleAI/HandleAiUi-new/FrontendBackendBridge.h +++ b/HanddleAI/HandleAiUi-new/FrontendBackendBridge.h @@ -49,7 +49,6 @@ class fbBridge :public QObject { Q_OBJECT public: - appConfig* _appConfig = nullptr; switchProductWidgetDataPtr _switchProductWidgetDataPtr; frontEnd front; backEnd back; @@ -62,6 +61,9 @@ public: { } + appConfig* _appConfig = nullptr; +private: + }; diff --git a/HanddleAI/HandleAiUi-new/algo/ALGO_Correction.h b/HanddleAI/HandleAiUi-new/algo/ALGO_Correction.h index bf78e394..557ffd0c 100644 --- a/HanddleAI/HandleAiUi-new/algo/ALGO_Correction.h +++ b/HanddleAI/HandleAiUi-new/algo/ALGO_Correction.h @@ -285,10 +285,6 @@ void test() QThread::msleep(100); } -CorrectionPoints oldPoints; -double originX = -125.3, originY = -450.4, originZ = -233.8; -double originRx = -0.278863, originRy = 0.142551, originRz = -0.676582; -//-726.5 -1104.1 -33989.4 -24.6389 14.1795 -0.660849 void createModbusStrs(const int startPos,double& Value, std::shared_ptr data) { data->writeBack("short", startPos, QString::number(Value < 0 ? 2 : 1)); @@ -297,31 +293,65 @@ void createModbusStrs(const int startPos,double& Value, std::shared_ptr writeBack("short", startPos + 2, QString::number(static_cast(abs(pvalue * 100)))); } +correctionStruct* correctionData1x = new correctionStruct(); +double doubleLmit(double input, int num) +{ + std::ostringstream out; + out << std::fixed << std::setprecision(num) << input; + return std::stod(out.str()); +} void ALGO_Correction(std::shared_ptr data) { - test(); + correctionData1x->in_X_X0Y = { 344.7,503.1,684.49 }; + correctionData1x->in_Y_X0Y = { -1213.81,-1313.8,-1213.81 }; + correctionData1x->in_Z_X0Y = { -130.5,-130.58,-130.46 }; + correctionData1x->in_Z_X0Y_Value = { -77.8479,-78.1794,-76.3074 }; + + correctionData1x->in_X_X0Z = { 615.2,197.49,197.38 }; + correctionData1x->in_Y_X0Z = { -372.67,-372.84,-372.87 }; + correctionData1x->in_Z_X0Z = { -922.86,-933.44,-1004.16 }; + correctionData1x->in_Y_X0Z_Value = { -74.139,-77.8869,-78.1404 }; + + correctionData1x->in_X_Y0Z = { -213.84,-213.9,-213.86 }; + correctionData1x->in_Y_Y0Z = { -1007.81,-1072.32,-999.51 }; + correctionData1x->in_Z_Y0Z = { -601.31,-601.35,-693.32 }; + correctionData1x->in_X_Y0Z_Value = { 81.1083,80.4141,80.9913 }; + data->correctionData = correctionData1x; if (data->correctionData == nullptr) return; CorrectionPoints resultPoints; HalconCorrection(data->correctionData, resultPoints); Point3d point = getRPY(resultPoints); + std::cout << "ox:" << resultPoints.Origin[0] << "oy:" << resultPoints.Origin[1] << "oz:" << resultPoints.Origin[2] << std::endl; std::cout << "Rx:" << point.x << "Ry:" << point.y << "Rz:" << point.z << std::endl; - //std::cout << "ox:" << oldPoints.Origin[0] << "oy:" << oldPoints.Origin[1] << "oz:" << oldPoints.Origin[2] << std::endl; - //std::cout << "Rx:" << rotationAnglesx.x << "Ry:" << rotationAnglesx.y << "Rz:" << rotationAnglesx.z << std::endl; - double offsetX = originX - resultPoints.Origin[0]; - double offsetY = originY - resultPoints.Origin[1]; - double offsetZ = originZ - resultPoints.Origin[2]; - double offsetRx = originRx - point.x; - double offsetRy = originRy - point.y; - double offsetRz = originRz - point.z; - //Point3d RPYResult = getRPYOffset(oldPoints, resultPoints); - //Point3d oriResult = getOriginPointOffset(oldPoints, resultPoints); + int baseOffsetX = data->_productDataStruct.basePos[0] - resultPoints.Origin[0]; + int baseOffsetY = data->_productDataStruct.basePos[1] - resultPoints.Origin[1]; + int baseOffsetZ = data->_productDataStruct.basePos[2] - resultPoints.Origin[2]; + + double offsetRx = data->_productDataStruct.baseRad[0] - point.x; + double offsetRy = data->_productDataStruct.baseRad[1] - point.y; + double offsetRz = data->_productDataStruct.baseRad[2] - point.z; + + cv::Vec3d radIn1({ 0,0,0 }); + cv::Vec3d radIn2({ degToRad(offsetRx),degToRad(offsetRy),degToRad(offsetRz) }); + cv::Mat coords = (cv::Mat_(3, 1) << data->_productDataStruct.basePos[0], data->_productDataStruct.basePos[1], data->_productDataStruct.basePos[2]); + cv::Mat newCoords = transform_coordinates(coords, radIn1, radIn2); + cv::Mat coordsOffset = (cv::Mat_(3, 1) << coords.at(0, 0) - newCoords.at(0, 0), coords.at(1, 0) - newCoords.at(1, 0), coords.at(2, 0) - newCoords.at(2, 0)); + + double offsetX = doubleLmit(coordsOffset.at(0, 0) + baseOffsetX,3); + double offsetY = doubleLmit(coordsOffset.at(1, 0) + baseOffsetY,3); + double offsetZ = doubleLmit(coordsOffset.at(2, 0) + baseOffsetZ,3); + + offsetRx = doubleLmit(offsetRx, 3); + offsetRy = doubleLmit(offsetRy, 3); + offsetRz = doubleLmit(offsetRz, 3); + std::cout << "offsetX:" << offsetX << "offsetY:" << offsetY << "offsetZ:" << offsetZ << std::endl; std::cout << "offsetRx:" << offsetRx << "offsetRy:" << offsetRy << "offsetRz:" << offsetRz << std::endl; - //int pValueBounus = 100; + createModbusStrs(310, offsetX,data); createModbusStrs(313, offsetY, data); createModbusStrs(316, offsetZ, data); @@ -331,53 +361,4 @@ void ALGO_Correction(std::shared_ptr data) createModbusStrs(325, offsetRz, data); data->writeBack("short", 274, "1"); -#if 0 - //originX - data->writeBack("short", 310, QString::number(out_Origin[0] < 0 ? 2 : 1)); - data->writeBack("short", 311, QString::number(abs(static_cast(out_Origin[0])))); - double pvalue = out_Origin[0] - static_cast(out_Origin[0]); - data->writeBack("short", 312, QString::number(abs(pvalue * pValueBounus))); - //originY - data->writeBack("short", 313, QString::number(out_Origin[1] < 0 ? 2 : 1)); - data->writeBack("short", 314, QString::number(abs(static_cast(out_Origin[1])))); - pvalue = out_Origin[1] - static_cast(out_Origin[1]); - data->writeBack("short", 315, QString::number(abs(pvalue * pValueBounus))); - //originZ - data->writeBack("short", 316, QString::number(out_Origin[2] < 0 ? 2 : 1)); - data->writeBack("short", 317, QString::number(abs(static_cast(out_Origin[2])))); - pvalue = out_Origin[2] - static_cast(out_Origin[2]); - data->writeBack("short", 318, QString::number(abs(pvalue * pValueBounus))); - //originX1 - data->writeBack("short", 319, QString::number(out_Result_X[0] < 0 ? 2 : 1)); - data->writeBack("short", 320, QString::number(abs(static_cast(out_Result_X[0])))); - pvalue = out_Result_X[0] - static_cast(out_Result_X[0]); - data->writeBack("short", 321, QString::number(abs(pvalue * pValueBounus))); - //originX2 - data->writeBack("short", 322, QString::number(out_Result_X[1] < 0 ? 2 : 1)); - data->writeBack("short", 323, QString::number(abs(static_cast(out_Result_X[1])))); - pvalue = out_Result_X[1] - static_cast(out_Result_X[1]); - data->writeBack("short", 324, QString::number(abs(pvalue * pValueBounus))); - //originX3 - data->writeBack("short", 325, QString::number(out_Result_X[2] < 0 ? 2 : 1)); - data->writeBack("short", 326, QString::number(abs(static_cast(out_Result_X[2])))); - pvalue = out_Result_X[2] - static_cast(out_Result_X[2]); - data->writeBack("short", 327, QString::number(abs(pvalue * pValueBounus))); - //originY1 - data->writeBack("short", 328, QString::number(out_Result_Y[0] < 0 ? 2 : 1)); - data->writeBack("short", 329, QString::number(abs(static_cast(out_Result_Y[0])))); - pvalue = out_Result_Y[0] - static_cast(out_Result_Y[0]); - data->writeBack("short", 330, QString::number(abs(pvalue * pValueBounus))); - //originY2 - data->writeBack("short", 331, QString::number(out_Result_Y[1] < 0 ? 2 : 1)); - data->writeBack("short", 332, QString::number(abs(static_cast(out_Result_Y[1])))); - pvalue = out_Result_Y[1] - static_cast(out_Result_Y[1]); - data->writeBack("short", 333, QString::number(abs(pvalue * pValueBounus))); - //originY3 - data->writeBack("short", 334, QString::number(out_Result_Y[2] < 0 ? 2 : 1)); - data->writeBack("short", 335, QString::number(abs(static_cast(out_Result_Y[2])))); - pvalue = out_Result_Y[2] - static_cast(out_Result_Y[2]); - data->writeBack("short", 336, QString::number(abs(pvalue * pValueBounus))); - - data->writeBack("short", 274, "1"); -#endif } \ No newline at end of file diff --git a/HanddleAI/HandleAiUi-new/algo/ALGO_Inspection.h b/HanddleAI/HandleAiUi-new/algo/ALGO_Inspection.h index e9ba5998..291291c8 100644 --- a/HanddleAI/HandleAiUi-new/algo/ALGO_Inspection.h +++ b/HanddleAI/HandleAiUi-new/algo/ALGO_Inspection.h @@ -8,11 +8,12 @@ cv::Mat pinHandleAiEvaluate(std::shared_ptr data, cv::Mat& src, bool pinHalconEvaluate(cv::Rect& Result, cv::Mat& src, cv::Mat& out, int productType); //公头定位 -std::vector pinDetEvaluate(cv::Mat& src, handleAiModelManager* _handleAiModelManager) +std::vector pinDetEvaluate(std::shared_ptr data ,cv::Mat& src, handleAiModelManager* _handleAiModelManager) { - cv::Mat resultImg; std::vector result; - _handleAiModelManager->smalDet->Evaluate(src, result); + handleAiModelDet* detPtr = _handleAiModelManager->getDetModel(data->_productDataStruct.handleAiData.detModelName); + detPtr->Evaluate(src, result); + detPtr = nullptr; return result; } std::vector getpinHandleAiEvaluateRect(std::shared_ptr data, cv::Mat& src, std::vector& detResult) @@ -120,44 +121,10 @@ bool pinHalconEvaluate(cv::Rect& Result, cv::Mat& src,cv::Mat& out,int productTy // )); //} } + //缺陷检测 -void handleAiEvaluate(std::shared_ptr data, handleAiModelManager* _handleAiModelManager, std::vectorconnectorPos, std::vector&aiImgResult) -{ - cv::Mat src = data->oriImgs[0]; - for (auto box : connectorPos) - { - cv::Mat handleAiMat; - bool processed = false; - switch (box.classes) - { - case 0://AFront - handleAiMat = pinHandleAiEvaluate(data, src(BboxToRect(box)), - _handleAiModelManager->largeSeg, _handleAiModelManager->largeCls); - aiImgResult.push_back(handleAiMat);//AI检测结果 - break; - case 1://ABack - handleAiMat = pinHandleAiEvaluate(data, src(BboxToRect(box)), - _handleAiModelManager->largeSeg, _handleAiModelManager->largeCls); - aiImgResult.push_back(handleAiMat);//AI检测结果 - break; - case 2://B - handleAiMat = pinHandleAiEvaluate(data, src(BboxToRect(box)), - _handleAiModelManager->midSeg, _handleAiModelManager->midCls); - aiImgResult.push_back(handleAiMat);//AI检测结果 - break; - case 3://C - handleAiMat = pinHandleAiEvaluate(data, src(BboxToRect(box)), - _handleAiModelManager->smallSeg, _handleAiModelManager->smallCls); - aiImgResult.push_back(handleAiMat);//AI检测结果 - break; - default: - data->segOriginImgs.push_back(src(BboxToRect(box)));//AI检测结果 - aiImgResult.push_back(src(BboxToRect(box)));//AI检测结果 - break; - } - } -} -cv::Mat pinHandleAiEvaluate(std::shared_ptr data, cv::Mat& src, +cv::Size minPin(30, 30), maxPin(200, 200); +cv::Mat pinHandleAiEvaluate(std::shared_ptr data, cv::Mat& src, handleAiModelSeg* segPtr, handleAiModelCls* clsPtr) { //结果图 @@ -177,41 +144,47 @@ cv::Mat pinHandleAiEvaluate(std::shared_ptr data, cv::Mat& src, for (auto contour : contours) { cv::Rect originRect = cv::boundingRect(contour); - if (originRect.width < 30 || originRect.height < 30) + if (originRect.width < minPin.width || originRect.height < minPin.height || originRect.width > maxPin.width || originRect.height > maxPin.height) continue; cv::Rect rect = originRect; - int maxHeightOrWidth = max(rect.width, rect.height); - int exHeight = max(maxHeightOrWidth - rect.height, 0); - int exWidth = max(maxHeightOrWidth - rect.width, 0); - rect += cv::Size(exWidth, exHeight); - //判断左上是否越界 - rect.x = max(0, rect.x); - rect.y = max(0, rect.y); - //判断右下是否越界 - rect.x = min(src.cols - rect.width, rect.x); - rect.y = min(src.rows - rect.height, rect.y); - - cv::Mat clsImg; - src(rect).copyTo(clsImg); - cv::resize(clsImg, clsImg, cv::Size(128, 128)); - + cv::Mat clsImg = cutImg2Cls(rect, src); int clsRes = clsPtr->Evaluate(clsImg); cv::Scalar color = cv::Scalar(0, 0, 255, 30); + std::string clsFileName; switch (clsRes) { case 0: color = cv::Scalar(0, 255, 0, 30); + clsFileName = "OK"; break; case 1: color = cv::Scalar(0, 0, 255, 30); + clsFileName = "NG1"; break; + default: + clsFileName = std::to_string(clsRes); } + data->clsOriginImgs.push_back(std::make_pair(clsFileName, clsImg)); cv::rectangle(Paint, originRect, color, 2); - data->clsOriginImgs.push_back(std::make_pair(clsImg, clsRes)); } //返回结果图 return Paint; } +void handleAiEvaluate(std::shared_ptr data, handleAiModelManager* _handleAiModelManager, std::vectorconnectorPos, std::vector&aiImgResult) +{ + cv::Mat src = data->oriImgs[0]; + for(auto& handleAiData: data->_productDataStruct.handleAiData.detResultHandle) + { + handleAiModelSeg* segPtr = _handleAiModelManager->getSegModel(handleAiData.segModelName); + handleAiModelCls* clsPtr = _handleAiModelManager->getClsModel(handleAiData.clsModelName); + for (auto box : connectorPos) + { + cv::Mat handleAiMat = pinHandleAiEvaluate(data, src(BboxToRect(box)), + segPtr, clsPtr); + aiImgResult.push_back(handleAiMat);//AI检测结果 + } + } +} //主函数 int ALGO_InspectionErrorCheck(std::shared_ptr data) { @@ -240,7 +213,11 @@ void ALGO_Inspection(std::shared_ptr data, handleAiModelManager* _hand } cv::Mat src = data->oriImgs[0]; //使用det获取每个公头的位置 - std::vector detResult = pinDetEvaluate(src, _handleAiModelManager); + std::vector detResult = pinDetEvaluate(data,src, _handleAiModelManager); + if (detResult.size() == 0) + { + return; + } //过滤结果,获取用于handleAi/HALCON检测的rect std::vector pinPos = getpinHandleAiEvaluateRect(data,src, detResult); diff --git a/HanddleAI/HandleAiUi-new/algo/simpleAlgo.h b/HanddleAI/HandleAiUi-new/algo/simpleAlgo.h index 6f35b268..d7ba8682 100644 --- a/HanddleAI/HandleAiUi-new/algo/simpleAlgo.h +++ b/HanddleAI/HandleAiUi-new/algo/simpleAlgo.h @@ -640,7 +640,7 @@ static std::vector contourPlusContour(const std::vector& c return res; } -static Rect BboxToRect(handdleAI::Bbox input) +static cv::Rect BboxToRect(handdleAI::Bbox input) { return Rect(input.x - input.w / 2, input.y - input.h / 2, input.w, input.h); } diff --git a/HanddleAI/HandleAiUi-new/appConfig/appConfig.hpp b/HanddleAI/HandleAiUi-new/appConfig/appConfig.hpp index f7971b1a..8ba9cdfc 100644 --- a/HanddleAI/HandleAiUi-new/appConfig/appConfig.hpp +++ b/HanddleAI/HandleAiUi-new/appConfig/appConfig.hpp @@ -7,7 +7,7 @@ #include #include #include - +#include #pragma region 数据结构 struct productDataStruct { @@ -26,7 +26,7 @@ struct productDataStruct bool disableHandleAiConfig = false; bool enableCodedAlgo = false; int codedAlgoIndex = -1; - std::vectorhandleAiDatas; + handleAiSimpleDet handleAiData; }; struct lightSourceStruct { @@ -95,33 +95,36 @@ public: { productData.lightSetting.insert(std::make_pair(std::stoi(it.key()), it.value())); } - for (auto data : res["HandleAi"]) + + if (res["HandleAi"].empty() == false) { - handleAiSimpleDet handleAiData; - handleAiData.detModelName = data["detModelName"]; - handleAiData.detResultIndex = std::vector(data["detResultIndex"].begin(), data["detResultIndex"].end()); - handleAiData.detGpuIndex = data["detGpuIndex"]; - - handleAiData.segModelName = data["segModelName"]; - handleAiData.segNgIndex = std::vector(data["segNgIndex"].begin(), data["segNgIndex"].end()); - handleAiData.segGpuIndex = data["segGpuIndex"]; - - handleAiData.clsModelName = data["clsModelName"]; - handleAiData.clsNgIndex = std::vector(data["clsNgIndex"].begin(), data["clsNgIndex"].end()); - handleAiData.segGpuIndex = data["segGpuIndex"]; - for (auto it = data["clsResultHandle"].begin(); it != data["clsResultHandle"].end(); ++it) + productData.handleAiData.detModelName = res["HandleAi"]["detModelName"]; + productData.handleAiData.detGpuIndex = res["HandleAi"]["detGpuIndex"]; + for (auto& data : res["HandleAi"]["segHandle"]) { - std::vector result = split(it.value(), ','); - if (result.size() != 4) + detResultHandleStruct detResultHandle; + detResultHandle.detResultIndex = std::vector(data["detResultIndex"].begin(), data["detResultIndex"].end()); + detResultHandle.segModelName = data["segModelName"]; + detResultHandle.segNgIndex = std::vector(data["segNgIndex"].begin(), data["segNgIndex"].end()); + detResultHandle.segGpuIndex = data["segGpuIndex"]; + + detResultHandle.clsModelName = data["clsModelName"]; + detResultHandle.clsNgIndex = std::vector(data["clsNgIndex"].begin(), data["clsNgIndex"].end()); + detResultHandle.segGpuIndex = data["segGpuIndex"]; + for (auto it = data["clsResultHandle"].begin(); it != data["clsResultHandle"].end(); ++it) { - fancyWarnWindow* warn = new fancyWarnWindow - (fancyWarnWindow::Warning, QString("在%1中的clsResultHandle发现格式错误").arg(QString::fromStdString(fileManager::getFileName(file))), - QString("%1").arg(QString::fromStdString(it.value()))); - continue; + std::vector result = split(it.value(), ','); + if (result.size() != 4) + { + fancyWarnWindow* warn = new fancyWarnWindow + (fancyWarnWindow::Warning, QString("在%1中的clsResultHandle发现格式错误").arg(QString::fromStdString(fileManager::getFileName(file))), + QString("%1").arg(QString::fromStdString(it.value()))); + continue; + } + detResultHandle.clsResultHandle.insert(std::make_pair(std::stoi(it.key()), std::make_pair(result[0], cv::Scalar(std::stoi(result[3]), std::stoi(result[2]), std::stoi(result[1]))))); } - handleAiData.clsResultHandle.insert(std::make_pair(std::stoi(it.key()), std::make_pair(result[0], cv::Scalar(std::stoi(result[3]), std::stoi(result[2]), std::stoi(result[1]))))); + productData.handleAiData.detResultHandle.push_back(detResultHandle); } - productData.handleAiDatas.push_back(handleAiData); } productDatas.push_back(productData); } @@ -153,5 +156,4 @@ public: } #pragma endregion }; - #pragma once \ No newline at end of file diff --git a/HanddleAI/HandleAiUi-new/back/backEndManager.cpp b/HanddleAI/HandleAiUi-new/back/backEndManager.cpp index 12e21aef..f431dfcd 100644 --- a/HanddleAI/HandleAiUi-new/back/backEndManager.cpp +++ b/HanddleAI/HandleAiUi-new/back/backEndManager.cpp @@ -9,6 +9,7 @@ #include #include #include +#include backEndManager::backEndManager(appConfig* appData) { @@ -21,6 +22,7 @@ backEndManager::backEndManager(appConfig* appData) _triggerManager = new triggerManager(); _cameraManager = new cameraManager(); _threadManager = new threadManager(); + _manualDetThread = new manualDetThread(this); } void backEndManager::run() { @@ -81,17 +83,9 @@ backEndManager::~backEndManager() } -void backEndManager::startManualDetSlot(cv::Mat* mats, int algoIndex) +void backEndManager::startManualDetSlot(std::string path, int index) { - std::shared_ptr data = _detDataManager->insertDetData("Manual", "Manual", 0, 1); - data->productType = algoIndex; - data->resShowIndex = 0; - data->oriImgMutex.lock(); - data->oriImgs.push_back(mats->clone()); - data->oriImgMutex.unlock(); - delete mats; - _threadManager->addTask(data);//添加任务 - + _manualDetThread->startDet(path, index); } void backEndManager::writeArmStartSignal(int productTypeIn) diff --git a/HanddleAI/HandleAiUi-new/back/backEndManager.h b/HanddleAI/HandleAiUi-new/back/backEndManager.h index e97c4813..7ed3e826 100644 --- a/HanddleAI/HandleAiUi-new/back/backEndManager.h +++ b/HanddleAI/HandleAiUi-new/back/backEndManager.h @@ -13,6 +13,7 @@ class threadManager; class detDataManager; class imgSaveThreadManager; class appConfig; +class manualDetThread; class backEndManager :public QThread { Q_OBJECT @@ -32,7 +33,7 @@ public: triggerManager* _triggerManager = nullptr;//触发器 cameraManager* _cameraManager = nullptr;// threadManager* _threadManager = nullptr; - + manualDetThread* _manualDetThread = nullptr; // std::string productTypeStr; int productType = -1; @@ -44,7 +45,7 @@ public slots: isInit = NotInit; this->start(); } - void startManualDetSlot(cv::Mat* mats, int algoIndex); + void startManualDetSlot(std::string path, int index); void writeArmStartSignal(int productType); private: void run(); @@ -59,6 +60,5 @@ signals: void switchStartBtnStatusSignal(int); void addShowPerformanceWidgetData(int index,int timeCost); void resetShowPerformanceWidget(); - }; #endif \ No newline at end of file diff --git a/HanddleAI/HandleAiUi-new/back/detData.h b/HanddleAI/HandleAiUi-new/back/detData.h index 97a1f86d..963074ac 100644 --- a/HanddleAI/HandleAiUi-new/back/detData.h +++ b/HanddleAI/HandleAiUi-new/back/detData.h @@ -5,6 +5,7 @@ #include #include #include +#include //所有检测需要的数据均放在这里 class detDataManager; class detData @@ -65,7 +66,7 @@ public: //algoThreadIndex = _struct.threadIndex; //resShowIndex = _struct.showIndex; } - + productDataStruct _productDataStruct; //结果 bool aiDetOK = false; bool halconOK = false; @@ -73,7 +74,7 @@ public: QMutex resultMutex;//结果图锁 std::vector resultImgs;//结果图 std::vector segOriginImgs;//seg检测原图,共用结果图锁 - std::vector> clsOriginImgs;//cls检测原图,共用结果图锁 + std::vector> clsOriginImgs;//cls检测原图,共用结果图锁 QMutex oriImgMutex;//原图锁 std::vector oriImgs;//原图 @@ -88,10 +89,14 @@ public: } ~detData() { - for (auto img : oriImgs) + for (auto& img : oriImgs) img.release(); - for (auto img : resultImgs) + for (auto& img : resultImgs) img.release(); + for (auto& img : segOriginImgs) + img.release(); + for (auto& img : clsOriginImgs) + img.second.release(); } }; class detDataManager @@ -149,4 +154,5 @@ public: return false; } -}; \ No newline at end of file +}; +#pragma once \ No newline at end of file diff --git a/HanddleAI/HandleAiUi-new/back/imgSaveThreadManager.h b/HanddleAI/HandleAiUi-new/back/imgSaveThreadManager.h index c6d08b94..f62cfadc 100644 --- a/HanddleAI/HandleAiUi-new/back/imgSaveThreadManager.h +++ b/HanddleAI/HandleAiUi-new/back/imgSaveThreadManager.h @@ -5,6 +5,7 @@ #include #include #include +#include class backEndManager; enum imgSaveThreadType { @@ -26,12 +27,28 @@ public: std::pair data = imgQueue.dequeue(); mutex.unlock(); cv::imwrite(data.first, data.second); + data.second.release(); } } - void addData(std::string str, cv::Mat mat) + void addData(std::string str, cv::Mat& mat) { + try + { + if (mat.data == nullptr || mat.empty()) + { + qDebug() << "在存图线程中发现无效图像"; + return; + } + } + catch(...) + { + qDebug() << "在存图线程中发现无效图像"; + return; + } mutex.lock(); - imgQueue.append(std::make_pair(str, mat)); + cv::Mat img; + mat.copyTo(img); + imgQueue.append(std::make_pair(str, img)); mutex.unlock(); this->start(); } @@ -106,7 +123,7 @@ public: break; case clsImg: for (int i = 0; i < data->clsOriginImgs.size(); i++) - resultFileNames.push_back(fileName + "CLS_RES" + getCurrentDateTime() + "_" + std::to_string(data->clsOriginImgs[i].second) + "_Count" + std::to_string(i) + ".bmp"); + resultFileNames.push_back(fileName + "CLS_RES" + getCurrentDateTime() + "_" + data->clsOriginImgs[i].first + "_Count" + std::to_string(i) + ".bmp"); break; } return resultFileNames; @@ -124,23 +141,23 @@ public: { std::string fileSavePath = genDirName(data, resImg);//获取文件夹名 createDirectoryIfNotExists(fileSavePath);//不存在此文件夹则创建 - std::string segAndClsPath= fileSavePath + "detImgs//" + getCurrentDateTime() + "//"; - createDirectoryIfNotExists(segAndClsPath);//不存在此文件夹则创建 - + std::string segAndClsPath = fileSavePath + "detImgs//" + getCurrentDateTime() + "//"; //结果图保存 std::vectorresFileNames = genFileNmaes(data, resImg); for (int index = 0; index < resFileNames.size(); index++) saveThread.addData(fileSavePath + resFileNames[index], data->resultImgs[index]); - + //seg std::vectorsegFileNames = genFileNmaes(data, segImg); + if (segFileNames.size() > 0) + createDirectoryIfNotExists(segAndClsPath);//不存在此文件夹则创建 for (int index = 0; index < segFileNames.size(); index++) saveThread.addData(segAndClsPath + segFileNames[index], data->segOriginImgs[index]); //cls std::vectorclsFileNames = genFileNmaes(data, clsImg); for (int index = 0; index < clsFileNames.size(); index++) - saveThread.addData(segAndClsPath + clsFileNames[index], data->resultImgs[index]); + saveThread.addData(segAndClsPath + clsFileNames[index], data->clsOriginImgs[index].second); } private: std::string path = ""; diff --git a/HanddleAI/HandleAiUi-new/back/manualDetThread.h b/HanddleAI/HandleAiUi-new/back/manualDetThread.h new file mode 100644 index 00000000..964b0b79 --- /dev/null +++ b/HanddleAI/HandleAiUi-new/back/manualDetThread.h @@ -0,0 +1,67 @@ +#include +#include +#include +#include +#include +#include + +class manualDetThread :public QThread +{ + Q_OBJECT +public: + backEndManager* _backEndManager; + detDataManager* _detDataManager; + threadManager* _threadManager; + appConfig* _appConfig; + //检测参数 + std::string imgPathStr = ""; + int algoIndex = 0; + manualDetThread(backEndManager* _backEndManager) + { + _backEndManager = _backEndManager; + _detDataManager = _backEndManager->_detDataManager; + _threadManager = _backEndManager->_threadManager; + _appConfig = _backEndManager->_appConfig; + } + void run() + { + std::vector> mats; + std::vectorfiles; + fileManager::getAllFiles(imgPathStr, files, "jpg"); + for (auto file : files) + { + std::shared_ptr data = _detDataManager->insertDetData("Manual", "Manual", 0, 1); + data->productType = algoIndex; + data->resShowIndex = 0; + data->oriImgMutex.lock(); + data->oriImgs.push_back(cv::imread(file, -1)); + data->oriImgMutex.unlock(); + data->_productDataStruct = _appConfig->productDatas[algoIndex]; + _threadManager->addTask(data);//添加任务 + } + files.clear(); + fileManager::getAllFiles(imgPathStr, files, "bmp"); + for (auto file : files) + { + std::shared_ptr data = _detDataManager->insertDetData("Manual", "Manual", 0, 1); + data->productType = algoIndex; + data->resShowIndex = 0; + data->oriImgMutex.lock(); + data->oriImgs.push_back(cv::imread(file, -1)); + data->oriImgMutex.unlock(); + data->_productDataStruct = _appConfig->productDatas[algoIndex]; + _threadManager->addTask(data);//添加任务 + } + emit finishImgReadSignal(); + } + void startDet(std::string path,int index) + { + imgPathStr = path; + algoIndex = index; + this->start(); + } +signals: + void finishImgReadSignal(); + //void startManualDetSignal(cv::Mat*, int); +}; +#pragma once \ No newline at end of file diff --git a/HanddleAI/HandleAiUi-new/back/manualDetThread.hpp b/HanddleAI/HandleAiUi-new/back/manualDetThread.hpp new file mode 100644 index 00000000..8c4c9fe9 --- /dev/null +++ b/HanddleAI/HandleAiUi-new/back/manualDetThread.hpp @@ -0,0 +1,66 @@ +#include +#include +#include +#include +#include +#include + +class manualDetThread :public QThread +{ + Q_OBJECT +public: + backEndManager* _backEndManager; + detDataManager* _detDataManager; + threadManager* _threadManager; + appConfig* _appConfig; + //检测参数 + std::string imgPathStr = ""; + int algoIndex = 0; + manualDetThread(backEndManager* _backEndManager) + { + _backEndManager = _backEndManager; + _detDataManager = _backEndManager->_detDataManager; + _threadManager = _backEndManager->_threadManager; + _appConfig = _backEndManager->_appConfig; + } + void run() + { + std::vector> mats; + std::vectorfiles; + fileManager::getAllFiles(imgPathStr, files, "jpg"); + for (auto file : files) + { + std::shared_ptr data = _detDataManager->insertDetData("Manual", "Manual", 0, 1); + data->productType = algoIndex; + data->resShowIndex = 0; + data->oriImgMutex.lock(); + data->oriImgs.push_back(cv::imread(file, -1)); + data->oriImgMutex.unlock(); + data->_productDataStruct = _appConfig->productDatas[algoIndex]; + _threadManager->addTask(data);//添加任务 + } + files.clear(); + fileManager::getAllFiles(imgPathStr, files, "bmp"); + for (auto file : files) + { + std::shared_ptr data = _detDataManager->insertDetData("Manual", "Manual", 0, 1); + data->productType = algoIndex; + data->resShowIndex = 0; + data->oriImgMutex.lock(); + data->oriImgs.push_back(cv::imread(file, -1)); + data->oriImgMutex.unlock(); + data->_productDataStruct = _appConfig->productDatas[algoIndex]; + _threadManager->addTask(data);//添加任务 + } + emit _backEndManager->finishImgReadSignal(); + } + void startDet(std::string path,int index) + { + imgPathStr = path; + algoIndex = index; + this->start(); + } +signals: + +}; +#pragma once \ No newline at end of file diff --git a/HanddleAI/HandleAiUi-new/back/threadPoolManager.cpp b/HanddleAI/HandleAiUi-new/back/threadPoolManager.cpp index 5452afd5..d9cbfb35 100644 --- a/HanddleAI/HandleAiUi-new/back/threadPoolManager.cpp +++ b/HanddleAI/HandleAiUi-new/back/threadPoolManager.cpp @@ -91,8 +91,6 @@ void threadManager::process() } void threadManager::resultHandle(std::shared_ptr data) { - //储存结果图 - std::async(std::launch::async, &imgSaveThreadManager::saveRes, _imgSaveThreadManager, data); //发送图片 if (data->resultImgs.size() > 0) { @@ -123,7 +121,9 @@ void threadManager::resultHandle(std::shared_ptr data) for (auto writeBackStr : data->writeBackData) _triggerManager->sendFinsMsg(writeBackStr); - //提交清理申请 + //储存结果图 + std::async(std::launch::async, &imgSaveThreadManager::saveRes, _imgSaveThreadManager, data); + //删除 不再持有 detDataManager* dManager = data->dManager; data->dManager->deleteDetData(data->timeCode); } diff --git a/HanddleAI/HandleAiUi-new/back/threadPoolManager.h b/HanddleAI/HandleAiUi-new/back/threadPoolManager.h index 720d639d..f93f7d47 100644 --- a/HanddleAI/HandleAiUi-new/back/threadPoolManager.h +++ b/HanddleAI/HandleAiUi-new/back/threadPoolManager.h @@ -23,7 +23,6 @@ class algoThread; class subThread; class detDataManager; class triggerManager; - class backEndManager; class sncodeCls diff --git a/HanddleAI/HandleAiUi-new/back/triggerManager.cpp b/HanddleAI/HandleAiUi-new/back/triggerManager.cpp index 2851bc80..37365663 100644 --- a/HanddleAI/HandleAiUi-new/back/triggerManager.cpp +++ b/HanddleAI/HandleAiUi-new/back/triggerManager.cpp @@ -12,6 +12,7 @@ static correctionStruct* correctionData; void triggerManager::initialization(backEndManager* input) { _backEndManager = input; + _appConfig = _backEndManager->_appConfig; dManager = _backEndManager->_detDataManager; _cameraManager = _backEndManager->_cameraManager; _threadManager = _backEndManager->_threadManager; @@ -129,6 +130,7 @@ void triggerManager::decodeCameraCMD(QByteArray byte) //correctionData->in_Z_Y0Z = { 118.15,-228.19,-256.5 }; //correctionData->in_X_Y0Z_Value = { -36.652200,-36.7302,41.0436 }; std::shared_ptr data = dManager->insertDetData("181964", "TEST", 0, 0); + data->_productDataStruct = _appConfig->productDatas[0]; data->imgAmountMin = 0; data->correctionData = correctionData; _threadManager->addTask(data);//添加任务 @@ -297,11 +299,12 @@ void triggerManager::decodeCameraCMD(QByteArray byte) if (armPos == 9) { std::shared_ptr data = dManager->insertDetData("181964", "TEST", 0 , 0); + data->productType = _backEndManager->productType; + data->_productDataStruct = _appConfig->productDatas[_backEndManager->productType]; data->imgAmountMin = 0; data->correctionData = correctionData; _threadManager->addTask(data);//添加任务 correctionData = nullptr; - } } @@ -316,10 +319,11 @@ void triggerManager::decodeCameraCMD(QByteArray byte) std::cout << "arm @Pos:" << Pos; std::shared_ptr data = dManager->insertDetData("Camera1", "TEST", 1, 1); - data->productType = _backEndManager->productType; data->oriShowIndex = 0; data->resShowIndex = 0; data->armPos = Pos; + data->productType = _backEndManager->productType; + data->_productDataStruct = _appConfig->productDatas[_backEndManager->productType]; auto camera = _cameraManager->getCamera("Camera1");//查找相机 if (camera != nullptr) camera->captureImage(data);//拍照 diff --git a/HanddleAI/HandleAiUi-new/back/triggerManager.h b/HanddleAI/HandleAiUi-new/back/triggerManager.h index 05c8381b..4417ecdd 100644 --- a/HanddleAI/HandleAiUi-new/back/triggerManager.h +++ b/HanddleAI/HandleAiUi-new/back/triggerManager.h @@ -6,6 +6,7 @@ #include #include #include +#include class backEndManager; class cameraManager; @@ -64,6 +65,7 @@ private: class triggerManager : public QThread { public: + appConfig* _appConfig; bool armIsRunning = false; bool initFlag = false; QString triggerFileName; diff --git a/HanddleAI/HandleAiUi-new/front/loadingWidget.h b/HanddleAI/HandleAiUi-new/front/loadingWidget.h index 5ce66bdf..945b133d 100644 --- a/HanddleAI/HandleAiUi-new/front/loadingWidget.h +++ b/HanddleAI/HandleAiUi-new/front/loadingWidget.h @@ -15,6 +15,7 @@ public: QMovie* movie = nullptr; QTextEdit* initLog = nullptr; fancyButtonText* retryBtn = new fancyButtonText(100,50,"重试","重新进行初始化"); + fancyButtonText* manualBtn = new fancyButtonText(180, 50, "离线模式", "离线模式"); QGridLayout* glayout = new QGridLayout(this); QVBoxLayout* vlayout = new QVBoxLayout(this); loadingWidget() @@ -23,6 +24,7 @@ public: connect(retryBtn, &QPushButton::clicked, [=]() { retryBtn->setDisabled(true); + manualBtn->setDisabled(true); start(); }); } @@ -54,8 +56,13 @@ public: initLog->append("正在初始化..."); vlayout->addWidget(initLog); - vlayout->addWidget(retryBtn); + QHBoxLayout* btnLayout = new QHBoxLayout(); + btnLayout->setAlignment(Qt::AlignLeft); + btnLayout->addWidget(retryBtn); retryBtn->hide(); + btnLayout->addWidget(manualBtn); + manualBtn->hide(); + vlayout->addLayout(btnLayout); glayout->addWidget(sign, 0, 0); glayout->addLayout(vlayout, 1, 0); @@ -89,6 +96,8 @@ public: sign->setPixmap(QPixmap(":/topBar/icon/error.png")); retryBtn->show(); retryBtn->setEnabled(true); + manualBtn->show(); + manualBtn->setEnabled(true); } } protected: diff --git a/HanddleAI/HandleAiUi-new/front/pages/manualDetWidget.cpp b/HanddleAI/HandleAiUi-new/front/pages/manualDetWidget.cpp deleted file mode 100644 index 1e0128ca..00000000 --- a/HanddleAI/HandleAiUi-new/front/pages/manualDetWidget.cpp +++ /dev/null @@ -1,30 +0,0 @@ -#include -#include -#include -void manualDetThread::run() -{ - std::string imgPathStr = imgPathEdit->text().toStdString() + "\\"; - int algoIndex = algoSelect->currentIndex(); - std::vector> mats; - std::vectorfiles; - fileManager::getAllFiles(imgPathStr, files, "jpg"); - for (auto file : files) - { - emit startManualDetSignal(new cv::Mat(cv::imread(file,-1)), algoIndex); - //mats.push_back(std::shared_ptr(std::make_shared(cv::imread(file)))); - logWidget->append(u8"检测到图片:" + QString::fromStdString(file)); - } - fileManager::getAllFiles(imgPathStr, files, "bmp"); - for (auto file : files) - { - emit startManualDetSignal(new cv::Mat(cv::imread(file, -1)), algoIndex); - //mats.push_back(std::shared_ptr(std::make_shared(cv::imread(file)))); - logWidget->append(u8"检测到图片:" + QString::fromStdString(file)); - } - emit finishImgReadSignal(); - -} -void manualDetThread::manualDetSlot() -{ - this->start(); -} \ No newline at end of file diff --git a/HanddleAI/HandleAiUi-new/front/pages/manualDetWidget.h b/HanddleAI/HandleAiUi-new/front/pages/manualDetWidget.h index 19bb6842..539679e5 100644 --- a/HanddleAI/HandleAiUi-new/front/pages/manualDetWidget.h +++ b/HanddleAI/HandleAiUi-new/front/pages/manualDetWidget.h @@ -9,26 +9,9 @@ #include #include #include -class manualDetThread :public QThread -{ - Q_OBJECT -public: - manualDetThread(QLineEdit* imgPathEditIn, QComboBox* algoSelectIn, QTextEdit* logWidgetIn) - { - imgPathEdit = imgPathEditIn; - algoSelect = algoSelectIn; - logWidget = logWidgetIn; - } - QTextEdit* logWidget = nullptr; - QLineEdit* imgPathEdit = nullptr; - QComboBox* algoSelect = nullptr; - void run(); -public slots: - void manualDetSlot(); -signals: - void finishImgReadSignal(); - void startManualDetSignal(cv::Mat*,int); -}; +#include +#include + class manualDetWidget : public QWidget { Q_OBJECT @@ -48,7 +31,7 @@ public: QLineEdit* imgPathEdit = new QLineEdit(this); QComboBox* algoSelect = new QComboBox(this); QTextEdit* logWidget = new QTextEdit(this); - manualDetThread* _manualDetThread = new manualDetThread(imgPathEdit, algoSelect, logWidget); + //manualDetThread* _manualDetThread = new manualDetThread(imgPathEdit, algoSelect, logWidget); fancyButtonText* startEvaluateBtn = new fancyButtonText(100,60,"检测",""); void titleInit() { @@ -106,9 +89,10 @@ public: algoSelect->setFont(font); algoSelect->setPalette(palette); algoSelect->setFixedWidth(componentsWidth); - algoSelect->addItem("小产品"); - algoSelect->addItem("中产品"); - algoSelect->addItem("大产品"); + for (auto data : bridge._appConfig->productDatas) + { + algoSelect->addItem(QString::fromStdString(data.name)); + } leftMainLayout->addWidget(algoSelect); leftMainLayout->addWidget(startEvaluateBtn); @@ -126,19 +110,21 @@ public: leftMainLayout->setAlignment(Qt::AlignTop); mainLayout->addLayout(rightMainLayout); - connect(startEvaluateBtn, &QPushButton::clicked, _manualDetThread, &manualDetThread::manualDetSlot); + connect(startEvaluateBtn, &QPushButton::clicked, this, [=]() {emit startManualDetSignal(imgPathEdit->text().toStdString(), algoSelect->currentIndex()); }); connect(startEvaluateBtn, &QPushButton::clicked, this, [=]() {startEvaluateBtn->setDisabled(true); }); - connect(_manualDetThread, &manualDetThread::finishImgReadSignal,this, &manualDetWidget::finishImgReadSlot); + //connect(_manualDetThread, &manualDetThread::finishImgReadSignal,this, &manualDetWidget::finishImgReadSlot); } ~manualDetWidget() { - delete _manualDetThread; + //delete _manualDetThread; } public slots: void finishImgReadSlot() { startEvaluateBtn->setEnabled(true); } +signals: + void startManualDetSignal(std::string path, int index); }; #pragma once \ No newline at end of file diff --git a/HanddleAI/HandleAiUi-new/globalStruct.h b/HanddleAI/HandleAiUi-new/globalStruct.h index ab148ff8..6cfa7508 100644 --- a/HanddleAI/HandleAiUi-new/globalStruct.h +++ b/HanddleAI/HandleAiUi-new/globalStruct.h @@ -103,4 +103,6 @@ static void cvMatToQPixMap(cv::Mat& src,QPixmap& pixmap) } Q_DECLARE_METATYPE(imgWidgetShowType) Q_DECLARE_METATYPE(cv::Mat*) +Q_DECLARE_METATYPE(cv::Mat) +Q_DECLARE_METATYPE(std::string) #pragma once \ No newline at end of file diff --git a/HanddleAI/HandleAiUi-new/handleAi/handleAiModel.cpp b/HanddleAI/HandleAiUi-new/handleAi/handleAiModel.cpp index 2e1b635a..f6dfdf5f 100644 --- a/HanddleAI/HandleAiUi-new/handleAi/handleAiModel.cpp +++ b/HanddleAI/HandleAiUi-new/handleAi/handleAiModel.cpp @@ -1,19 +1,19 @@ #include #include -handleAiModelManager::handleAiModelManager(appConfig* appData) +handleAiModelManager::handleAiModelManager(appConfig* _appConfig) { - gpuMutex = std::vector(gpuCnt, new std::mutex()); - appData->productDatasMutex.lock(); - this->basePath = appData->handleAiModelPath + "/"; - for (auto& productData : appData->productDatas) + _appConfig->productDatasMutex.lock(); + this->basePath = _appConfig->handleAiModelPath + "/"; + for (auto& productData : _appConfig->productDatas) { - for (auto& handleAiData : productData.handleAiDatas) + insertDetModelPath(productData.handleAiData.detModelName, productData.handleAiData.detGpuIndex); + for (auto& handleAiData : productData.handleAiData.detResultHandle) { - insertDetModelPath(handleAiData.detModelName, handleAiData.detGpuIndex); + insertSegModelPath(handleAiData.segModelName, handleAiData.segGpuIndex); insertClsModelPath(handleAiData.clsModelName, handleAiData.clsGpuIndex); } } - appData->productDatasMutex.unlock(); + _appConfig->productDatasMutex.unlock(); } \ No newline at end of file diff --git a/HanddleAI/HandleAiUi-new/handleAi/handleAiModel.h b/HanddleAI/HandleAiUi-new/handleAi/handleAiModel.h index 27f97059..8bcc7da8 100644 --- a/HanddleAI/HandleAiUi-new/handleAi/handleAiModel.h +++ b/HanddleAI/HandleAiUi-new/handleAi/handleAiModel.h @@ -129,9 +129,7 @@ public: handleAiModelCls* smallCls; handleAiModelDet* smalDet; std::string basePath; - ////////模型放这里/////// handleAiModelManager(appConfig*); - ///////////END///////// bool insertSegModelPath(std::string modelName,int gpuIndex) { auto mapResult = segModels.find(modelName); @@ -157,29 +155,26 @@ public: clsModels.insert(std::make_pair(modelName, clsModel)); } // - bool getSegModel(std::string modelName, handleAiModelSeg* seg) + handleAiModelSeg* getSegModel(std::string modelName) { auto mapResult = segModels.find(modelName); - if (mapResult != segModels.end())//已有数据 - return false; - seg = mapResult->second; - return true; + if (mapResult == segModels.end())//已有数据 + return nullptr; + return mapResult->second; } - bool getDetModel(std::string modelName, handleAiModelDet* det) + handleAiModelDet* getDetModel(std::string modelName) { auto mapResult = detModels.find(modelName); - if (mapResult != detModels.end())//已有数据 - return false; - det = mapResult->second; - return true; + if (mapResult == detModels.end())//已有数据 + return nullptr; + return mapResult->second; } - bool getClsModel(std::string modelName, handleAiModelCls* cls) + handleAiModelCls* getClsModel(std::string modelName) { auto mapResult = clsModels.find(modelName); - if (mapResult != clsModels.end())//已有数据 - return false; - cls = mapResult->second; - return true; + if (mapResult == clsModels.end())//已有数据 + return nullptr; + return mapResult->second; } void initialization(backEndManager* _backEndManagerIn) { @@ -223,7 +218,7 @@ private: std::unordered_map segModels; std::unordered_map clsModels; std::unordered_map detModels; - std::vectorgpuMutex; + std::vectorgpuMutex = std::vector(6, new std::mutex()); int gpuCnt = 1;//gpu数量 }; #endif diff --git a/HanddleAI/HandleAiUi-new/handleAi/handleAiSimpleDet.h b/HanddleAI/HandleAiUi-new/handleAi/handleAiSimpleDet.h index cffdb660..1d02b1e2 100644 --- a/HanddleAI/HandleAiUi-new/handleAi/handleAiSimpleDet.h +++ b/HanddleAI/HandleAiUi-new/handleAi/handleAiSimpleDet.h @@ -2,14 +2,9 @@ #include #include #include - -struct handleAiSimpleDet +struct detResultHandleStruct { - //最后调用模型时是使用路径去查找,请保证规则一致 - - std::string detModelName;//重复时将不会重复初始化 std::vector detResultIndex;//本产品对应det模型训练时的序号 - int detGpuIndex = 0; std::string segModelName;//重复时将不会重复初始化 std::vectorsegNgIndex;//NG的将会进入cls检测 @@ -20,6 +15,14 @@ struct handleAiSimpleDet int clsGpuIndex = 0; //int为Cls的分类结果 string为文本 Scalar为颜色 - std::unordered_map>clsResultHandle;//结果绘制 + std::unordered_map>clsResultHandle;//结果绘制 +}; +struct handleAiSimpleDet +{ + //最后调用模型时是使用路径去查找,请保证规则一致 + std::string detModelName;//重复时将不会重复初始化 + int detGpuIndex = 0; + + std::vectordetResultHandle; }; #pragma once \ No newline at end of file diff --git a/HanddleAI/HandleAiUi-new/main.cpp b/HanddleAI/HandleAiUi-new/main.cpp index 446488ac..212157bf 100644 --- a/HanddleAI/HandleAiUi-new/main.cpp +++ b/HanddleAI/HandleAiUi-new/main.cpp @@ -15,8 +15,7 @@ #include #include #include -#include - +#include void connectSignalAndSlots(MainWindow* front, backEndManager* back) { QObject::connect(back, &backEndManager::sendPixmapImageWidget, front, &MainWindow::recvPixmapImageWidget); @@ -26,11 +25,12 @@ void connectSignalAndSlots(MainWindow* front, backEndManager* back) QObject::connect(back, &backEndManager::addHistoryDataSignal, front, &MainWindow::addDetHistoryData); QObject::connect(back, &backEndManager::switchStartBtnStatusSignal, front->_displayWidget->_switchProductWidget, &switchProductWidget::switchStartBtnStatus); - + QObject::connect(back->_manualDetThread, &manualDetThread::finishImgReadSignal, + front->_manualDetWidget, &manualDetWidget::finishImgReadSlot); QObject::connect(front, &MainWindow::reInitSignal, back, &backEndManager::initialization); QObject::connect(front->_loadingWidget.retryBtn, &QPushButton::clicked, back, &backEndManager::initialization); - QObject::connect(front->_manualDetWidget->_manualDetThread, &manualDetThread::startManualDetSignal, + QObject::connect(front->_manualDetWidget, &manualDetWidget::startManualDetSignal, back, &backEndManager::startManualDetSlot); QObject::connect(front->_displayWidget->_switchProductWidget, &switchProductWidget::startArmProgramSignal, back, &backEndManager::writeArmStartSignal); @@ -55,6 +55,8 @@ int main(int argc, char* argv[]) qRegisterMetaType("imgWidgetShowType"); qRegisterMetaType("showImgPack"); qRegisterMetaType("matPtr"); + qRegisterMetaType("mat"); + qRegisterMetaType("stdString"); appConfig _appConfig; MainWindow w(&_appConfig); w.show(); diff --git a/HanddleAI/HandleAiUi-new/mainwindow.cpp b/HanddleAI/HandleAiUi-new/mainwindow.cpp index 955557da..eafee4cd 100644 --- a/HanddleAI/HandleAiUi-new/mainwindow.cpp +++ b/HanddleAI/HandleAiUi-new/mainwindow.cpp @@ -58,6 +58,7 @@ MainWindow::MainWindow(appConfig* appData, QWidget* parent) blurEffectAnimation->start(); showMaximized(); + QObject::connect(_loadingWidget.manualBtn, &QPushButton::clicked, this, &MainWindow::switchToManulMode); } MainWindow::~MainWindow() diff --git a/HanddleAI/HandleAiUi-new/mainwindow.h b/HanddleAI/HandleAiUi-new/mainwindow.h index 9a507cd1..a8ca44d5 100644 --- a/HanddleAI/HandleAiUi-new/mainwindow.h +++ b/HanddleAI/HandleAiUi-new/mainwindow.h @@ -98,6 +98,11 @@ private: public slots: + void switchToManulMode() + { + _displayWidget->setDisabled(true); + loading(false); + } void minimizeWindow() { showMinimized(); diff --git a/HanddleAI/HandleAiUi-new/uiModule/components/fancyWarnWindow.h b/HanddleAI/HandleAiUi-new/uiModule/components/fancyWarnWindow.h index 60a70c3a..25ad2ad0 100644 --- a/HanddleAI/HandleAiUi-new/uiModule/components/fancyWarnWindow.h +++ b/HanddleAI/HandleAiUi-new/uiModule/components/fancyWarnWindow.h @@ -5,7 +5,7 @@ #include #include #include - +#include class fancyWarnWindow :public QDialog { public: diff --git a/lib/Hd_3DCameraLMI_module_PointLazer.exp b/lib/Hd_3DCameraLMI_module_PointLazer.exp index c128f721..b70953a7 100644 Binary files a/lib/Hd_3DCameraLMI_module_PointLazer.exp and b/lib/Hd_3DCameraLMI_module_PointLazer.exp differ diff --git a/lib/Hd_DalsaCamera_module.exp b/lib/Hd_DalsaCamera_module.exp index d51dd347..9c60276f 100644 Binary files a/lib/Hd_DalsaCamera_module.exp and b/lib/Hd_DalsaCamera_module.exp differ diff --git a/lib/Hd_FinsTcp_module.exp b/lib/Hd_FinsTcp_module.exp index 63243947..2ba9e5fa 100644 Binary files a/lib/Hd_FinsTcp_module.exp and b/lib/Hd_FinsTcp_module.exp differ diff --git a/lib/Hd_MvCamera_module_GENTL.exp b/lib/Hd_MvCamera_module_GENTL.exp index f0a89b55..5b9c4dde 100644 Binary files a/lib/Hd_MvCamera_module_GENTL.exp and b/lib/Hd_MvCamera_module_GENTL.exp differ diff --git a/lib/Hd_MvCamera_module_GIGE.exp b/lib/Hd_MvCamera_module_GIGE.exp index baf010b9..f1841164 100644 Binary files a/lib/Hd_MvCamera_module_GIGE.exp and b/lib/Hd_MvCamera_module_GIGE.exp differ diff --git a/lib/Hd_ResultsSummary_module.exp b/lib/Hd_ResultsSummary_module.exp index 72272a70..4426c915 100644 Binary files a/lib/Hd_ResultsSummary_module.exp and b/lib/Hd_ResultsSummary_module.exp differ diff --git a/lib/Hd_SocketModule_ModbusTcp.exp b/lib/Hd_SocketModule_ModbusTcp.exp index 25890329..e9596cc0 100644 Binary files a/lib/Hd_SocketModule_ModbusTcp.exp and b/lib/Hd_SocketModule_ModbusTcp.exp differ diff --git a/testSet/ASR/Camera1_Pos10_14-24-38-05_Count0.jpg b/testSet/ASR/Camera1_Pos10_14-24-38-05_Count0.jpg new file mode 100644 index 00000000..ac017436 Binary files /dev/null and b/testSet/ASR/Camera1_Pos10_14-24-38-05_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos10_14-37-17-68_Count0.jpg b/testSet/ASR/Camera1_Pos10_14-37-17-68_Count0.jpg new file mode 100644 index 00000000..b81ed6a6 Binary files /dev/null and b/testSet/ASR/Camera1_Pos10_14-37-17-68_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos10_14-40-42-53_Count0.jpg b/testSet/ASR/Camera1_Pos10_14-40-42-53_Count0.jpg new file mode 100644 index 00000000..7c0a47d3 Binary files /dev/null and b/testSet/ASR/Camera1_Pos10_14-40-42-53_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos10_16-34-26-85_Count0.jpg b/testSet/ASR/Camera1_Pos10_16-34-26-85_Count0.jpg new file mode 100644 index 00000000..e0539cf6 Binary files /dev/null and b/testSet/ASR/Camera1_Pos10_16-34-26-85_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos11_14-24-44-52_Count0.jpg b/testSet/ASR/Camera1_Pos11_14-24-44-52_Count0.jpg new file mode 100644 index 00000000..78dc38af Binary files /dev/null and b/testSet/ASR/Camera1_Pos11_14-24-44-52_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos11_14-37-25-86_Count0.jpg b/testSet/ASR/Camera1_Pos11_14-37-25-86_Count0.jpg new file mode 100644 index 00000000..04a74f29 Binary files /dev/null and b/testSet/ASR/Camera1_Pos11_14-37-25-86_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos11_14-40-44-78_Count0.jpg b/testSet/ASR/Camera1_Pos11_14-40-44-78_Count0.jpg new file mode 100644 index 00000000..a47e71d3 Binary files /dev/null and b/testSet/ASR/Camera1_Pos11_14-40-44-78_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos11_16-34-31-36_Count0.jpg b/testSet/ASR/Camera1_Pos11_16-34-31-36_Count0.jpg new file mode 100644 index 00000000..7675a798 Binary files /dev/null and b/testSet/ASR/Camera1_Pos11_16-34-31-36_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos12_14-24-48-25_Count0.jpg b/testSet/ASR/Camera1_Pos12_14-24-48-25_Count0.jpg new file mode 100644 index 00000000..e2a2d9d7 Binary files /dev/null and b/testSet/ASR/Camera1_Pos12_14-24-48-25_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos12_14-37-31-43_Count0.jpg b/testSet/ASR/Camera1_Pos12_14-37-31-43_Count0.jpg new file mode 100644 index 00000000..efdd565a Binary files /dev/null and b/testSet/ASR/Camera1_Pos12_14-37-31-43_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos12_14-40-47-88_Count0.jpg b/testSet/ASR/Camera1_Pos12_14-40-47-88_Count0.jpg new file mode 100644 index 00000000..f8e4f285 Binary files /dev/null and b/testSet/ASR/Camera1_Pos12_14-40-47-88_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos12_16-34-34-65_Count0.jpg b/testSet/ASR/Camera1_Pos12_16-34-34-65_Count0.jpg new file mode 100644 index 00000000..bcb70e74 Binary files /dev/null and b/testSet/ASR/Camera1_Pos12_16-34-34-65_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos1_11-44-51-01_Count0.jpg b/testSet/ASR/Camera1_Pos1_11-44-51-01_Count0.jpg new file mode 100644 index 00000000..7b9590e2 Binary files /dev/null and b/testSet/ASR/Camera1_Pos1_11-44-51-01_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos1_11-45-50-69_Count0.jpg b/testSet/ASR/Camera1_Pos1_11-45-50-69_Count0.jpg new file mode 100644 index 00000000..74cd1885 Binary files /dev/null and b/testSet/ASR/Camera1_Pos1_11-45-50-69_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos1_14-23-50-79_Count0.jpg b/testSet/ASR/Camera1_Pos1_14-23-50-79_Count0.jpg new file mode 100644 index 00000000..7cfff8ab Binary files /dev/null and b/testSet/ASR/Camera1_Pos1_14-23-50-79_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos1_14-36-51-79_Count0.jpg b/testSet/ASR/Camera1_Pos1_14-36-51-79_Count0.jpg new file mode 100644 index 00000000..9efbfa51 Binary files /dev/null and b/testSet/ASR/Camera1_Pos1_14-36-51-79_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos1_14-40-18-03_Count0.jpg b/testSet/ASR/Camera1_Pos1_14-40-18-03_Count0.jpg new file mode 100644 index 00000000..51dbe0f5 Binary files /dev/null and b/testSet/ASR/Camera1_Pos1_14-40-18-03_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos1_16-28-19-93_Count0.jpg b/testSet/ASR/Camera1_Pos1_16-28-19-93_Count0.jpg new file mode 100644 index 00000000..2232ead8 Binary files /dev/null and b/testSet/ASR/Camera1_Pos1_16-28-19-93_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos1_16-31-49-06_Count0.jpg b/testSet/ASR/Camera1_Pos1_16-31-49-06_Count0.jpg new file mode 100644 index 00000000..a09a4d49 Binary files /dev/null and b/testSet/ASR/Camera1_Pos1_16-31-49-06_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos1_16-32-50-67_Count0.jpg b/testSet/ASR/Camera1_Pos1_16-32-50-67_Count0.jpg new file mode 100644 index 00000000..47d41809 Binary files /dev/null and b/testSet/ASR/Camera1_Pos1_16-32-50-67_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos1_16-33-52-98_Count0.jpg b/testSet/ASR/Camera1_Pos1_16-33-52-98_Count0.jpg new file mode 100644 index 00000000..b667e6bf Binary files /dev/null and b/testSet/ASR/Camera1_Pos1_16-33-52-98_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos2_11-45-43-03_Count0.jpg b/testSet/ASR/Camera1_Pos2_11-45-43-03_Count0.jpg new file mode 100644 index 00000000..db1a8d25 Binary files /dev/null and b/testSet/ASR/Camera1_Pos2_11-45-43-03_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos2_11-45-53-44_Count0.jpg b/testSet/ASR/Camera1_Pos2_11-45-53-44_Count0.jpg new file mode 100644 index 00000000..bd69f9d4 Binary files /dev/null and b/testSet/ASR/Camera1_Pos2_11-45-53-44_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos2_14-23-55-86_Count0.jpg b/testSet/ASR/Camera1_Pos2_14-23-55-86_Count0.jpg new file mode 100644 index 00000000..4a69a83f Binary files /dev/null and b/testSet/ASR/Camera1_Pos2_14-23-55-86_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos2_14-36-54-10_Count0.jpg b/testSet/ASR/Camera1_Pos2_14-36-54-10_Count0.jpg new file mode 100644 index 00000000..e7767e09 Binary files /dev/null and b/testSet/ASR/Camera1_Pos2_14-36-54-10_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos2_14-40-20-40_Count0.jpg b/testSet/ASR/Camera1_Pos2_14-40-20-40_Count0.jpg new file mode 100644 index 00000000..2be0f0ed Binary files /dev/null and b/testSet/ASR/Camera1_Pos2_14-40-20-40_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos2_16-28-22-24_Count0.jpg b/testSet/ASR/Camera1_Pos2_16-28-22-24_Count0.jpg new file mode 100644 index 00000000..95628153 Binary files /dev/null and b/testSet/ASR/Camera1_Pos2_16-28-22-24_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos2_16-31-52-36_Count0.jpg b/testSet/ASR/Camera1_Pos2_16-31-52-36_Count0.jpg new file mode 100644 index 00000000..a2b1e86e Binary files /dev/null and b/testSet/ASR/Camera1_Pos2_16-31-52-36_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos2_16-32-53-98_Count0.jpg b/testSet/ASR/Camera1_Pos2_16-32-53-98_Count0.jpg new file mode 100644 index 00000000..c61565ce Binary files /dev/null and b/testSet/ASR/Camera1_Pos2_16-32-53-98_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos2_16-33-56-24_Count0.jpg b/testSet/ASR/Camera1_Pos2_16-33-56-24_Count0.jpg new file mode 100644 index 00000000..50e6ae1d Binary files /dev/null and b/testSet/ASR/Camera1_Pos2_16-33-56-24_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos3_11-45-56-60_Count0.jpg b/testSet/ASR/Camera1_Pos3_11-45-56-60_Count0.jpg new file mode 100644 index 00000000..b3cfa0c3 Binary files /dev/null and b/testSet/ASR/Camera1_Pos3_11-45-56-60_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos3_14-24-01-45_Count0.jpg b/testSet/ASR/Camera1_Pos3_14-24-01-45_Count0.jpg new file mode 100644 index 00000000..2aa8be69 Binary files /dev/null and b/testSet/ASR/Camera1_Pos3_14-24-01-45_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos3_14-36-58-48_Count0.jpg b/testSet/ASR/Camera1_Pos3_14-36-58-48_Count0.jpg new file mode 100644 index 00000000..97078358 Binary files /dev/null and b/testSet/ASR/Camera1_Pos3_14-36-58-48_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos3_14-40-22-63_Count0.jpg b/testSet/ASR/Camera1_Pos3_14-40-22-63_Count0.jpg new file mode 100644 index 00000000..89eb4bc1 Binary files /dev/null and b/testSet/ASR/Camera1_Pos3_14-40-22-63_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos3_16-28-26-45_Count0.jpg b/testSet/ASR/Camera1_Pos3_16-28-26-45_Count0.jpg new file mode 100644 index 00000000..0b5aed3a Binary files /dev/null and b/testSet/ASR/Camera1_Pos3_16-28-26-45_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos3_16-31-55-70_Count0.jpg b/testSet/ASR/Camera1_Pos3_16-31-55-70_Count0.jpg new file mode 100644 index 00000000..dbcf17cf Binary files /dev/null and b/testSet/ASR/Camera1_Pos3_16-31-55-70_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos3_16-32-56-18_Count0.jpg b/testSet/ASR/Camera1_Pos3_16-32-56-18_Count0.jpg new file mode 100644 index 00000000..963c0b78 Binary files /dev/null and b/testSet/ASR/Camera1_Pos3_16-32-56-18_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos3_16-34-00-39_Count0.jpg b/testSet/ASR/Camera1_Pos3_16-34-00-39_Count0.jpg new file mode 100644 index 00000000..c41580be Binary files /dev/null and b/testSet/ASR/Camera1_Pos3_16-34-00-39_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos4_11-46-00-58_Count0.jpg b/testSet/ASR/Camera1_Pos4_11-46-00-58_Count0.jpg new file mode 100644 index 00000000..23dabff2 Binary files /dev/null and b/testSet/ASR/Camera1_Pos4_11-46-00-58_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos4_14-24-06-79_Count0.jpg b/testSet/ASR/Camera1_Pos4_14-24-06-79_Count0.jpg new file mode 100644 index 00000000..842daa08 Binary files /dev/null and b/testSet/ASR/Camera1_Pos4_14-24-06-79_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos4_14-37-00-77_Count0.jpg b/testSet/ASR/Camera1_Pos4_14-37-00-77_Count0.jpg new file mode 100644 index 00000000..493634b5 Binary files /dev/null and b/testSet/ASR/Camera1_Pos4_14-37-00-77_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos4_14-40-26-72_Count0.jpg b/testSet/ASR/Camera1_Pos4_14-40-26-72_Count0.jpg new file mode 100644 index 00000000..cf4a3432 Binary files /dev/null and b/testSet/ASR/Camera1_Pos4_14-40-26-72_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos4_16-28-30-41_Count0.jpg b/testSet/ASR/Camera1_Pos4_16-28-30-41_Count0.jpg new file mode 100644 index 00000000..5f470ae4 Binary files /dev/null and b/testSet/ASR/Camera1_Pos4_16-28-30-41_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos4_16-31-59-54_Count0.jpg b/testSet/ASR/Camera1_Pos4_16-31-59-54_Count0.jpg new file mode 100644 index 00000000..a57c7133 Binary files /dev/null and b/testSet/ASR/Camera1_Pos4_16-31-59-54_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos4_16-33-00-20_Count0.jpg b/testSet/ASR/Camera1_Pos4_16-33-00-20_Count0.jpg new file mode 100644 index 00000000..bc17a687 Binary files /dev/null and b/testSet/ASR/Camera1_Pos4_16-33-00-20_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos4_16-34-04-47_Count0.jpg b/testSet/ASR/Camera1_Pos4_16-34-04-47_Count0.jpg new file mode 100644 index 00000000..94382cf3 Binary files /dev/null and b/testSet/ASR/Camera1_Pos4_16-34-04-47_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos5_11-46-04-49_Count0.jpg b/testSet/ASR/Camera1_Pos5_11-46-04-49_Count0.jpg new file mode 100644 index 00000000..d0dcc2db Binary files /dev/null and b/testSet/ASR/Camera1_Pos5_11-46-04-49_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos5_14-24-11-31_Count0.jpg b/testSet/ASR/Camera1_Pos5_14-24-11-31_Count0.jpg new file mode 100644 index 00000000..6c4c7cc4 Binary files /dev/null and b/testSet/ASR/Camera1_Pos5_14-24-11-31_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos5_14-37-03-99_Count0.jpg b/testSet/ASR/Camera1_Pos5_14-37-03-99_Count0.jpg new file mode 100644 index 00000000..e4c677e5 Binary files /dev/null and b/testSet/ASR/Camera1_Pos5_14-37-03-99_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos5_14-40-28-01_Count0.jpg b/testSet/ASR/Camera1_Pos5_14-40-28-01_Count0.jpg new file mode 100644 index 00000000..630c1a2a Binary files /dev/null and b/testSet/ASR/Camera1_Pos5_14-40-28-01_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos5_16-32-02-87_Count0.jpg b/testSet/ASR/Camera1_Pos5_16-32-02-87_Count0.jpg new file mode 100644 index 00000000..2df7c6c9 Binary files /dev/null and b/testSet/ASR/Camera1_Pos5_16-32-02-87_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos5_16-33-04-49_Count0.jpg b/testSet/ASR/Camera1_Pos5_16-33-04-49_Count0.jpg new file mode 100644 index 00000000..673f3d3d Binary files /dev/null and b/testSet/ASR/Camera1_Pos5_16-33-04-49_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos5_16-34-07-89_Count0.jpg b/testSet/ASR/Camera1_Pos5_16-34-07-89_Count0.jpg new file mode 100644 index 00000000..0a759382 Binary files /dev/null and b/testSet/ASR/Camera1_Pos5_16-34-07-89_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos6_11-46-08-60_Count0.jpg b/testSet/ASR/Camera1_Pos6_11-46-08-60_Count0.jpg new file mode 100644 index 00000000..df3fe09d Binary files /dev/null and b/testSet/ASR/Camera1_Pos6_11-46-08-60_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos6_14-24-16-59_Count0.jpg b/testSet/ASR/Camera1_Pos6_14-24-16-59_Count0.jpg new file mode 100644 index 00000000..299eba3e Binary files /dev/null and b/testSet/ASR/Camera1_Pos6_14-24-16-59_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos6_14-37-06-41_Count0.jpg b/testSet/ASR/Camera1_Pos6_14-37-06-41_Count0.jpg new file mode 100644 index 00000000..9a15d187 Binary files /dev/null and b/testSet/ASR/Camera1_Pos6_14-37-06-41_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos6_14-40-30-94_Count0.jpg b/testSet/ASR/Camera1_Pos6_14-40-30-94_Count0.jpg new file mode 100644 index 00000000..a9605977 Binary files /dev/null and b/testSet/ASR/Camera1_Pos6_14-40-30-94_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos6_16-34-11-12_Count0.jpg b/testSet/ASR/Camera1_Pos6_16-34-11-12_Count0.jpg new file mode 100644 index 00000000..e953603d Binary files /dev/null and b/testSet/ASR/Camera1_Pos6_16-34-11-12_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos7_11-46-11-51_Count0.jpg b/testSet/ASR/Camera1_Pos7_11-46-11-51_Count0.jpg new file mode 100644 index 00000000..bc0654d5 Binary files /dev/null and b/testSet/ASR/Camera1_Pos7_11-46-11-51_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos7_14-24-22-66_Count0.jpg b/testSet/ASR/Camera1_Pos7_14-24-22-66_Count0.jpg new file mode 100644 index 00000000..06c04e05 Binary files /dev/null and b/testSet/ASR/Camera1_Pos7_14-24-22-66_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos7_14-37-09-82_Count0.jpg b/testSet/ASR/Camera1_Pos7_14-37-09-82_Count0.jpg new file mode 100644 index 00000000..4e161a4b Binary files /dev/null and b/testSet/ASR/Camera1_Pos7_14-37-09-82_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos7_14-40-33-34_Count0.jpg b/testSet/ASR/Camera1_Pos7_14-40-33-34_Count0.jpg new file mode 100644 index 00000000..2df32d09 Binary files /dev/null and b/testSet/ASR/Camera1_Pos7_14-40-33-34_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos7_16-34-15-33_Count0.jpg b/testSet/ASR/Camera1_Pos7_16-34-15-33_Count0.jpg new file mode 100644 index 00000000..5d62e6d2 Binary files /dev/null and b/testSet/ASR/Camera1_Pos7_16-34-15-33_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos8_11-46-14-52_Count0.jpg b/testSet/ASR/Camera1_Pos8_11-46-14-52_Count0.jpg new file mode 100644 index 00000000..5eb11acb Binary files /dev/null and b/testSet/ASR/Camera1_Pos8_11-46-14-52_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos8_14-24-27-98_Count0.jpg b/testSet/ASR/Camera1_Pos8_14-24-27-98_Count0.jpg new file mode 100644 index 00000000..a8b2d51d Binary files /dev/null and b/testSet/ASR/Camera1_Pos8_14-24-27-98_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos8_14-37-11-12_Count0.jpg b/testSet/ASR/Camera1_Pos8_14-37-11-12_Count0.jpg new file mode 100644 index 00000000..b8bd6d8b Binary files /dev/null and b/testSet/ASR/Camera1_Pos8_14-37-11-12_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos8_14-40-36-39_Count0.jpg b/testSet/ASR/Camera1_Pos8_14-40-36-39_Count0.jpg new file mode 100644 index 00000000..62f8598f Binary files /dev/null and b/testSet/ASR/Camera1_Pos8_14-40-36-39_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos8_16-34-18-45_Count0.jpg b/testSet/ASR/Camera1_Pos8_16-34-18-45_Count0.jpg new file mode 100644 index 00000000..943899aa Binary files /dev/null and b/testSet/ASR/Camera1_Pos8_16-34-18-45_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos9_11-46-19-43_Count0.jpg b/testSet/ASR/Camera1_Pos9_11-46-19-43_Count0.jpg new file mode 100644 index 00000000..87c38c4d Binary files /dev/null and b/testSet/ASR/Camera1_Pos9_11-46-19-43_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos9_14-24-33-91_Count0.jpg b/testSet/ASR/Camera1_Pos9_14-24-33-91_Count0.jpg new file mode 100644 index 00000000..07f061cc Binary files /dev/null and b/testSet/ASR/Camera1_Pos9_14-24-33-91_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos9_14-37-15-27_Count0.jpg b/testSet/ASR/Camera1_Pos9_14-37-15-27_Count0.jpg new file mode 100644 index 00000000..d446702a Binary files /dev/null and b/testSet/ASR/Camera1_Pos9_14-37-15-27_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos9_14-40-39-53_Count0.jpg b/testSet/ASR/Camera1_Pos9_14-40-39-53_Count0.jpg new file mode 100644 index 00000000..ee60ec1a Binary files /dev/null and b/testSet/ASR/Camera1_Pos9_14-40-39-53_Count0.jpg differ diff --git a/testSet/ASR/Camera1_Pos9_16-34-23-82_Count0.jpg b/testSet/ASR/Camera1_Pos9_16-34-23-82_Count0.jpg new file mode 100644 index 00000000..8b653bf9 Binary files /dev/null and b/testSet/ASR/Camera1_Pos9_16-34-23-82_Count0.jpg differ diff --git a/testSet/ASR/GGHH65434_5_1_ASR1006X20240326_191702.bmp b/testSet/ASR/GGHH65434_5_1_ASR1006X20240326_191702.bmp new file mode 100644 index 00000000..7d184655 Binary files /dev/null and b/testSet/ASR/GGHH65434_5_1_ASR1006X20240326_191702.bmp differ diff --git a/testSet/ASRNG/Camera1_Pos3_16-34-00-39_Count0.jpg b/testSet/ASRNG/Camera1_Pos3_16-34-00-39_Count0.jpg new file mode 100644 index 00000000..c41580be Binary files /dev/null and b/testSet/ASRNG/Camera1_Pos3_16-34-00-39_Count0.jpg differ