diff --git a/Doc/新增机型æµ�程.doc b/Doc/新增机型æµ�程.doc new file mode 100644 index 00000000..fa37895c Binary files /dev/null and b/Doc/新增机型æµ�程.doc differ diff --git a/HanddleAI/HandleAiUi-new/algo/CISCO_BATTLESTAR.hpp b/HanddleAI/HandleAiUi-new/algo/CISCO_BATTLESTAR.hpp new file mode 100644 index 00000000..872dcbf7 --- /dev/null +++ b/HanddleAI/HandleAiUi-new/algo/CISCO_BATTLESTAR.hpp @@ -0,0 +1,547 @@ +#include +#include +#include +#include +cv::Size BattleStarF1_Max(30, 30), BattleStarF1_Min(400, 400); +cv::Size BattleStarF2_Max(30, 30), BattleStarF2_Min(400, 400); +cv::Size BattleStarB1_Max(30, 30), BattleStarB1_Min(400, 400); +cv::Size BattleStarB2_Max(30, 30), BattleStarB2_Min(400, 400); +//ÊäÈëdetÇгöµÄÁ¬½ÓÆ÷ͼƬ +static cv::Mat BattleStar_Halcon_F1(std::shared_ptrdata, cv::Mat& src) +{ + //cv::Mat halconImg; + //src(cv::Rect(50, 50, src.cols - 100, src.rows - 150)).copyTo(halconImg); + //HTuple hv_out_OK_Pings; + //HTuple hv_out_NG_Pings; + //HTuple hv_out_Flag_INS; + //HTuple hv_out_Line; + //HTuple hv_pin_number; + //HTuple hv_out_Pings; + //HObject ho_in_Image = MatToHObject(halconImg); + //cv::Mat r = HObject2Mat(ho_in_Image); + //sk_APEX_Pin(ho_in_Image, &hv_out_OK_Pings, &hv_out_NG_Pings, + // &hv_out_Line, &hv_pin_number, &hv_out_Pings, &hv_out_Flag_INS); + //int flag = hv_out_Flag_INS.D(); + //if (halconImg.channels() == 1) + // cv::cvtColor(halconImg, halconImg, cv::COLOR_GRAY2BGR); + //int hv_out_OK_PingsSize = hv_out_OK_Pings.Length(), + // hv_out_NG_PingsSize = hv_out_NG_Pings.Length(); + //int lineSize = hv_out_Line.Length(); + //int hv_out_PingsSize = hv_out_Pings.Length(); + //int hv_pin_numberSize = hv_pin_number.Length(); + //std::cout << "OKSize" << hv_out_OK_PingsSize << "NGSize" << hv_out_NG_PingsSize << std::endl; + //std::vector AllBaseRects; + //std::vector AllPoints; + //std::vectorokPos; + //for (int i = 0; i < hv_out_OK_PingsSize / 4; i++) + //{ + // cv::Rect rect( + // hv_out_OK_Pings[i * 4].D(), + // hv_out_OK_Pings[i * 4 + 1].D(), + // hv_out_OK_Pings[i * 4 + 2].D(), + // hv_out_OK_Pings[i * 4 + 3].D()); + // okPos.push_back(rect); + // AllBaseRects.push_back(rectAndResult(rect, true)); + //} + //std::vectorngPos; + //for (int i = 0; i < hv_out_NG_PingsSize / 4; i++) + //{ + // cv::Rect rect( + // hv_out_NG_Pings[i * 4].D(), + // hv_out_NG_Pings[i * 4 + 1].D(), + // hv_out_NG_Pings[i * 4 + 2].D(), + // hv_out_NG_Pings[i * 4 + 3].D()); + // ngPos.push_back(rect); + // AllBaseRects.push_back(rectAndResult(rect, false)); + //} + + //for (int i = 0; i < hv_out_OK_PingsSize / 4; i++) + //{ + // cv::Rect rect( + // hv_out_OK_Pings[i * 4].D(), + // hv_out_OK_Pings[i * 4 + 1].D(), + // hv_out_OK_Pings[i * 4 + 2].D(), + // hv_out_OK_Pings[i * 4 + 3].D()); + // okPos.push_back(rect); + // AllPoints.push_back(rect); + //} + //std::vectorxLines; + //for (int i = 0; i < lineSize / 4; i++) + //{ + // startAndEndPoints p; + // p.start.x = hv_out_Line[i * 4 + 1].D(); + // p.start.y = hv_out_Line[i * 4].D(); + // p.end.x = hv_out_Line[i * 4 + 3].D(); + // p.end.y = hv_out_Line[i * 4 + 2].D(); + // xLines.push_back(p); + //} + ////»­Ïß + //double maxRange = 0; + //apexHalconPaint(halconImg, xLines, AllPoints, AllBaseRects, maxRange); + //data->maxPinDetValue = maxRange; + //return halconImg; +} +//ÊäÈëdetÇгöµÄÁ¬½ÓÆ÷ͼƬ +static cv::Mat BattleStar_HandleAi_F1(std::shared_ptrdata, cv::Mat& src, handleAiModelManager* _handleAiModelManager) +{ + //handleAiModelSeg* segPtr = _handleAiModelManager->getSegModel("APEX-Seg.BHD"); + //handleAiModelCls* clsPtr = _handleAiModelManager->getClsModel("APEX-Cls.BHD"); + //cv::Mat img; + //src(cv::Rect(50, 50, src.cols - 100, src.rows - 150)).copyTo(img); + ////½á¹ûͼ + //cv::Mat Paint; + //if (img.channels() == 3) + // img.copyTo(Paint); + //else + // cvtColor(img, Paint, cv::COLOR_GRAY2BGR); + ////´¦Àí + //auto start = std::chrono::high_resolution_clock::now(); + //cv::Mat segRes = ~segPtr->Evaluate(img); + //std::vector> contours; + //cv::findContours(segRes, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_NONE); + //int cnt = 0; + //if (contours.size())//Èç¹ûÓÐȱÏÝ + // data->segOriginImgs.push_back(img); + //bool finalOK = true; + //for (auto contour : contours) + //{ + // cv::Rect originRect = cv::boundingRect(contour); + // if (originRect.width < apexMinPin.width || originRect.height < apexMinPin.height || originRect.width > apexMaxPin.width || originRect.height > apexMaxPin.height) + // continue; + // cv::Rect rect = originRect; + // cv::Mat clsImg = cutImg2Cls(rect, img); + // 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"; + // finalOK = false; + // break; + // default: + // clsFileName = std::to_string(clsRes); + // finalOK = false; + // } + // data->clsOriginImgs.push_back(std::make_pair(clsFileName, clsImg)); + // cv::rectangle(Paint, originRect, color, 2); + //} + //if (finalOK == false) + //{ + // data->halconOK = false; + // data->aiDetOK = false; + // data->aiNgCount++; + //} + ////·µ»Ø½á¹ûͼ + //return Paint; +} + +//ÊäÈëdetÇгöµÄÁ¬½ÓÆ÷ͼƬ +static cv::Mat BattleStar_Halcon_F2(std::shared_ptrdata, cv::Mat& src) +{ + //cv::Mat halconImg; + //src(cv::Rect(50, 50, src.cols - 100, src.rows - 150)).copyTo(halconImg); + //HTuple hv_out_OK_Pings; + //HTuple hv_out_NG_Pings; + //HTuple hv_out_Flag_INS; + //HTuple hv_out_Line; + //HTuple hv_pin_number; + //HTuple hv_out_Pings; + //HObject ho_in_Image = MatToHObject(halconImg); + //cv::Mat r = HObject2Mat(ho_in_Image); + //sk_APEX_Pin(ho_in_Image, &hv_out_OK_Pings, &hv_out_NG_Pings, + // &hv_out_Line, &hv_pin_number, &hv_out_Pings, &hv_out_Flag_INS); + //int flag = hv_out_Flag_INS.D(); + //if (halconImg.channels() == 1) + // cv::cvtColor(halconImg, halconImg, cv::COLOR_GRAY2BGR); + //int hv_out_OK_PingsSize = hv_out_OK_Pings.Length(), + // hv_out_NG_PingsSize = hv_out_NG_Pings.Length(); + //int lineSize = hv_out_Line.Length(); + //int hv_out_PingsSize = hv_out_Pings.Length(); + //int hv_pin_numberSize = hv_pin_number.Length(); + //std::cout << "OKSize" << hv_out_OK_PingsSize << "NGSize" << hv_out_NG_PingsSize << std::endl; + //std::vector AllBaseRects; + //std::vector AllPoints; + //std::vectorokPos; + //for (int i = 0; i < hv_out_OK_PingsSize / 4; i++) + //{ + // cv::Rect rect( + // hv_out_OK_Pings[i * 4].D(), + // hv_out_OK_Pings[i * 4 + 1].D(), + // hv_out_OK_Pings[i * 4 + 2].D(), + // hv_out_OK_Pings[i * 4 + 3].D()); + // okPos.push_back(rect); + // AllBaseRects.push_back(rectAndResult(rect, true)); + //} + //std::vectorngPos; + //for (int i = 0; i < hv_out_NG_PingsSize / 4; i++) + //{ + // cv::Rect rect( + // hv_out_NG_Pings[i * 4].D(), + // hv_out_NG_Pings[i * 4 + 1].D(), + // hv_out_NG_Pings[i * 4 + 2].D(), + // hv_out_NG_Pings[i * 4 + 3].D()); + // ngPos.push_back(rect); + // AllBaseRects.push_back(rectAndResult(rect, false)); + //} + + //for (int i = 0; i < hv_out_OK_PingsSize / 4; i++) + //{ + // cv::Rect rect( + // hv_out_OK_Pings[i * 4].D(), + // hv_out_OK_Pings[i * 4 + 1].D(), + // hv_out_OK_Pings[i * 4 + 2].D(), + // hv_out_OK_Pings[i * 4 + 3].D()); + // okPos.push_back(rect); + // AllPoints.push_back(rect); + //} + //std::vectorxLines; + //for (int i = 0; i < lineSize / 4; i++) + //{ + // startAndEndPoints p; + // p.start.x = hv_out_Line[i * 4 + 1].D(); + // p.start.y = hv_out_Line[i * 4].D(); + // p.end.x = hv_out_Line[i * 4 + 3].D(); + // p.end.y = hv_out_Line[i * 4 + 2].D(); + // xLines.push_back(p); + //} + ////»­Ïß + //double maxRange = 0; + //apexHalconPaint(halconImg, xLines, AllPoints, AllBaseRects, maxRange); + //data->maxPinDetValue = maxRange; + //return halconImg; +} +//ÊäÈëdetÇгöµÄÁ¬½ÓÆ÷ͼƬ +static cv::Mat BattleStar_HandleAi_F2(std::shared_ptrdata, cv::Mat& src, handleAiModelManager* _handleAiModelManager) +{ + //handleAiModelSeg* segPtr = _handleAiModelManager->getSegModel("APEX-Seg.BHD"); + //handleAiModelCls* clsPtr = _handleAiModelManager->getClsModel("APEX-Cls.BHD"); + //cv::Mat img; + //src(cv::Rect(50, 50, src.cols - 100, src.rows - 150)).copyTo(img); + ////½á¹ûͼ + //cv::Mat Paint; + //if (img.channels() == 3) + // img.copyTo(Paint); + //else + // cvtColor(img, Paint, cv::COLOR_GRAY2BGR); + ////´¦Àí + //auto start = std::chrono::high_resolution_clock::now(); + //cv::Mat segRes = ~segPtr->Evaluate(img); + //std::vector> contours; + //cv::findContours(segRes, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_NONE); + //int cnt = 0; + //if (contours.size())//Èç¹ûÓÐȱÏÝ + // data->segOriginImgs.push_back(img); + //bool finalOK = true; + //for (auto contour : contours) + //{ + // cv::Rect originRect = cv::boundingRect(contour); + // if (originRect.width < apexMinPin.width || originRect.height < apexMinPin.height || originRect.width > apexMaxPin.width || originRect.height > apexMaxPin.height) + // continue; + // cv::Rect rect = originRect; + // cv::Mat clsImg = cutImg2Cls(rect, img); + // 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"; + // finalOK = false; + // break; + // default: + // clsFileName = std::to_string(clsRes); + // finalOK = false; + // } + // data->clsOriginImgs.push_back(std::make_pair(clsFileName, clsImg)); + // cv::rectangle(Paint, originRect, color, 2); + //} + //if (finalOK == false) + //{ + // data->halconOK = false; + // data->aiDetOK = false; + // data->aiNgCount++; + //} + ////·µ»Ø½á¹ûͼ + //return Paint; +} + +//ÊäÈëdetÇгöµÄÁ¬½ÓÆ÷ͼƬ +static cv::Mat BattleStar_Halcon_B1(std::shared_ptrdata, cv::Mat& src) +{ + //cv::Mat halconImg; + //src(cv::Rect(50, 50, src.cols - 100, src.rows - 150)).copyTo(halconImg); + //HTuple hv_out_OK_Pings; + //HTuple hv_out_NG_Pings; + //HTuple hv_out_Flag_INS; + //HTuple hv_out_Line; + //HTuple hv_pin_number; + //HTuple hv_out_Pings; + //HObject ho_in_Image = MatToHObject(halconImg); + //cv::Mat r = HObject2Mat(ho_in_Image); + //sk_APEX_Pin(ho_in_Image, &hv_out_OK_Pings, &hv_out_NG_Pings, + // &hv_out_Line, &hv_pin_number, &hv_out_Pings, &hv_out_Flag_INS); + //int flag = hv_out_Flag_INS.D(); + //if (halconImg.channels() == 1) + // cv::cvtColor(halconImg, halconImg, cv::COLOR_GRAY2BGR); + //int hv_out_OK_PingsSize = hv_out_OK_Pings.Length(), + // hv_out_NG_PingsSize = hv_out_NG_Pings.Length(); + //int lineSize = hv_out_Line.Length(); + //int hv_out_PingsSize = hv_out_Pings.Length(); + //int hv_pin_numberSize = hv_pin_number.Length(); + //std::cout << "OKSize" << hv_out_OK_PingsSize << "NGSize" << hv_out_NG_PingsSize << std::endl; + //std::vector AllBaseRects; + //std::vector AllPoints; + //std::vectorokPos; + //for (int i = 0; i < hv_out_OK_PingsSize / 4; i++) + //{ + // cv::Rect rect( + // hv_out_OK_Pings[i * 4].D(), + // hv_out_OK_Pings[i * 4 + 1].D(), + // hv_out_OK_Pings[i * 4 + 2].D(), + // hv_out_OK_Pings[i * 4 + 3].D()); + // okPos.push_back(rect); + // AllBaseRects.push_back(rectAndResult(rect, true)); + //} + //std::vectorngPos; + //for (int i = 0; i < hv_out_NG_PingsSize / 4; i++) + //{ + // cv::Rect rect( + // hv_out_NG_Pings[i * 4].D(), + // hv_out_NG_Pings[i * 4 + 1].D(), + // hv_out_NG_Pings[i * 4 + 2].D(), + // hv_out_NG_Pings[i * 4 + 3].D()); + // ngPos.push_back(rect); + // AllBaseRects.push_back(rectAndResult(rect, false)); + //} + + //for (int i = 0; i < hv_out_OK_PingsSize / 4; i++) + //{ + // cv::Rect rect( + // hv_out_OK_Pings[i * 4].D(), + // hv_out_OK_Pings[i * 4 + 1].D(), + // hv_out_OK_Pings[i * 4 + 2].D(), + // hv_out_OK_Pings[i * 4 + 3].D()); + // okPos.push_back(rect); + // AllPoints.push_back(rect); + //} + //std::vectorxLines; + //for (int i = 0; i < lineSize / 4; i++) + //{ + // startAndEndPoints p; + // p.start.x = hv_out_Line[i * 4 + 1].D(); + // p.start.y = hv_out_Line[i * 4].D(); + // p.end.x = hv_out_Line[i * 4 + 3].D(); + // p.end.y = hv_out_Line[i * 4 + 2].D(); + // xLines.push_back(p); + //} + ////»­Ïß + //double maxRange = 0; + //apexHalconPaint(halconImg, xLines, AllPoints, AllBaseRects, maxRange); + //data->maxPinDetValue = maxRange; + //return halconImg; +} +//ÊäÈëdetÇгöµÄÁ¬½ÓÆ÷ͼƬ +static cv::Mat BattleStar_HandleAi_B1(std::shared_ptrdata, cv::Mat& src, handleAiModelManager* _handleAiModelManager) +{ + //handleAiModelSeg* segPtr = _handleAiModelManager->getSegModel("APEX-Seg.BHD"); + //handleAiModelCls* clsPtr = _handleAiModelManager->getClsModel("APEX-Cls.BHD"); + //cv::Mat img; + //src(cv::Rect(50, 50, src.cols - 100, src.rows - 150)).copyTo(img); + ////½á¹ûͼ + //cv::Mat Paint; + //if (img.channels() == 3) + // img.copyTo(Paint); + //else + // cvtColor(img, Paint, cv::COLOR_GRAY2BGR); + ////´¦Àí + //auto start = std::chrono::high_resolution_clock::now(); + //cv::Mat segRes = ~segPtr->Evaluate(img); + //std::vector> contours; + //cv::findContours(segRes, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_NONE); + //int cnt = 0; + //if (contours.size())//Èç¹ûÓÐȱÏÝ + // data->segOriginImgs.push_back(img); + //bool finalOK = true; + //for (auto contour : contours) + //{ + // cv::Rect originRect = cv::boundingRect(contour); + // if (originRect.width < apexMinPin.width || originRect.height < apexMinPin.height || originRect.width > apexMaxPin.width || originRect.height > apexMaxPin.height) + // continue; + // cv::Rect rect = originRect; + // cv::Mat clsImg = cutImg2Cls(rect, img); + // 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"; + // finalOK = false; + // break; + // default: + // clsFileName = std::to_string(clsRes); + // finalOK = false; + // } + // data->clsOriginImgs.push_back(std::make_pair(clsFileName, clsImg)); + // cv::rectangle(Paint, originRect, color, 2); + //} + //if (finalOK == false) + //{ + // data->halconOK = false; + // data->aiDetOK = false; + // data->aiNgCount++; + //} + ////·µ»Ø½á¹ûͼ + //return Paint; +} + +//ÊäÈëdetÇгöµÄÁ¬½ÓÆ÷ͼƬ +static cv::Mat BattleStar_Halcon_B2(std::shared_ptrdata, cv::Mat& src) +{ + //cv::Mat halconImg; + //src(cv::Rect(50, 50, src.cols - 100, src.rows - 150)).copyTo(halconImg); + //HTuple hv_out_OK_Pings; + //HTuple hv_out_NG_Pings; + //HTuple hv_out_Flag_INS; + //HTuple hv_out_Line; + //HTuple hv_pin_number; + //HTuple hv_out_Pings; + //HObject ho_in_Image = MatToHObject(halconImg); + //cv::Mat r = HObject2Mat(ho_in_Image); + //sk_APEX_Pin(ho_in_Image, &hv_out_OK_Pings, &hv_out_NG_Pings, + // &hv_out_Line, &hv_pin_number, &hv_out_Pings, &hv_out_Flag_INS); + //int flag = hv_out_Flag_INS.D(); + //if (halconImg.channels() == 1) + // cv::cvtColor(halconImg, halconImg, cv::COLOR_GRAY2BGR); + //int hv_out_OK_PingsSize = hv_out_OK_Pings.Length(), + // hv_out_NG_PingsSize = hv_out_NG_Pings.Length(); + //int lineSize = hv_out_Line.Length(); + //int hv_out_PingsSize = hv_out_Pings.Length(); + //int hv_pin_numberSize = hv_pin_number.Length(); + //std::cout << "OKSize" << hv_out_OK_PingsSize << "NGSize" << hv_out_NG_PingsSize << std::endl; + //std::vector AllBaseRects; + //std::vector AllPoints; + //std::vectorokPos; + //for (int i = 0; i < hv_out_OK_PingsSize / 4; i++) + //{ + // cv::Rect rect( + // hv_out_OK_Pings[i * 4].D(), + // hv_out_OK_Pings[i * 4 + 1].D(), + // hv_out_OK_Pings[i * 4 + 2].D(), + // hv_out_OK_Pings[i * 4 + 3].D()); + // okPos.push_back(rect); + // AllBaseRects.push_back(rectAndResult(rect, true)); + //} + //std::vectorngPos; + //for (int i = 0; i < hv_out_NG_PingsSize / 4; i++) + //{ + // cv::Rect rect( + // hv_out_NG_Pings[i * 4].D(), + // hv_out_NG_Pings[i * 4 + 1].D(), + // hv_out_NG_Pings[i * 4 + 2].D(), + // hv_out_NG_Pings[i * 4 + 3].D()); + // ngPos.push_back(rect); + // AllBaseRects.push_back(rectAndResult(rect, false)); + //} + + //for (int i = 0; i < hv_out_OK_PingsSize / 4; i++) + //{ + // cv::Rect rect( + // hv_out_OK_Pings[i * 4].D(), + // hv_out_OK_Pings[i * 4 + 1].D(), + // hv_out_OK_Pings[i * 4 + 2].D(), + // hv_out_OK_Pings[i * 4 + 3].D()); + // okPos.push_back(rect); + // AllPoints.push_back(rect); + //} + //std::vectorxLines; + //for (int i = 0; i < lineSize / 4; i++) + //{ + // startAndEndPoints p; + // p.start.x = hv_out_Line[i * 4 + 1].D(); + // p.start.y = hv_out_Line[i * 4].D(); + // p.end.x = hv_out_Line[i * 4 + 3].D(); + // p.end.y = hv_out_Line[i * 4 + 2].D(); + // xLines.push_back(p); + //} + ////»­Ïß + //double maxRange = 0; + //apexHalconPaint(halconImg, xLines, AllPoints, AllBaseRects, maxRange); + //data->maxPinDetValue = maxRange; + //return halconImg; +} +//ÊäÈëdetÇгöµÄÁ¬½ÓÆ÷ͼƬ +static cv::Mat BattleStar_HandleAi_B2(std::shared_ptrdata, cv::Mat& src, handleAiModelManager* _handleAiModelManager) +{ + //handleAiModelSeg* segPtr = _handleAiModelManager->getSegModel("APEX-Seg.BHD"); + //handleAiModelCls* clsPtr = _handleAiModelManager->getClsModel("APEX-Cls.BHD"); + //cv::Mat img; + //src(cv::Rect(50, 50, src.cols - 100, src.rows - 150)).copyTo(img); + ////½á¹ûͼ + //cv::Mat Paint; + //if (img.channels() == 3) + // img.copyTo(Paint); + //else + // cvtColor(img, Paint, cv::COLOR_GRAY2BGR); + ////´¦Àí + //auto start = std::chrono::high_resolution_clock::now(); + //cv::Mat segRes = ~segPtr->Evaluate(img); + //std::vector> contours; + //cv::findContours(segRes, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_NONE); + //int cnt = 0; + //if (contours.size())//Èç¹ûÓÐȱÏÝ + // data->segOriginImgs.push_back(img); + //bool finalOK = true; + //for (auto contour : contours) + //{ + // cv::Rect originRect = cv::boundingRect(contour); + // if (originRect.width < apexMinPin.width || originRect.height < apexMinPin.height || originRect.width > apexMaxPin.width || originRect.height > apexMaxPin.height) + // continue; + // cv::Rect rect = originRect; + // cv::Mat clsImg = cutImg2Cls(rect, img); + // 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"; + // finalOK = false; + // break; + // default: + // clsFileName = std::to_string(clsRes); + // finalOK = false; + // } + // data->clsOriginImgs.push_back(std::make_pair(clsFileName, clsImg)); + // cv::rectangle(Paint, originRect, color, 2); + //} + //if (finalOK == false) + //{ + // data->halconOK = false; + // data->aiDetOK = false; + // data->aiNgCount++; + //} + ////·µ»Ø½á¹ûͼ + //return Paint; +} \ No newline at end of file diff --git a/HanddleAI/HandleAiUi-new/algo/CISCO_CORTINA4.hpp b/HanddleAI/HandleAiUi-new/algo/CISCO_CORTINA4.hpp new file mode 100644 index 00000000..e76b6904 --- /dev/null +++ b/HanddleAI/HandleAiUi-new/algo/CISCO_CORTINA4.hpp @@ -0,0 +1,411 @@ +#include +#include +#include +#include +cv::Size cornitaD_Max(30, 30), cornitaD_Min(400, 400); +cv::Size cornitaF_Max(30, 30), cornitaF_Min(400, 400); +cv::Size cornitaB_Max(30, 30), cornitaB_Min(400, 400); +//ÊäÈëdetÇгöµÄÁ¬½ÓÆ÷ͼƬ +static cv::Mat cornita_Halcon_D(std::shared_ptrdata, cv::Mat& src) +{ + cv::Mat halconImg; + src(cv::Rect(50, 50, src.cols - 100, src.rows - 150)).copyTo(halconImg); + HTuple hv_out_OK_Pings; + HTuple hv_out_NG_Pings; + HTuple hv_out_Flag_INS; + HTuple hv_out_Line; + HTuple hv_pin_number; + HTuple hv_out_Pings; + HObject ho_in_Image = MatToHObject(halconImg); + cv::Mat r = HObject2Mat(ho_in_Image); + sk_APEX_Pin(ho_in_Image, &hv_out_OK_Pings, &hv_out_NG_Pings, + &hv_out_Line, &hv_pin_number, &hv_out_Pings, &hv_out_Flag_INS); + int flag = hv_out_Flag_INS.D(); + if (halconImg.channels() == 1) + cv::cvtColor(halconImg, halconImg, cv::COLOR_GRAY2BGR); + int hv_out_OK_PingsSize = hv_out_OK_Pings.Length(), + hv_out_NG_PingsSize = hv_out_NG_Pings.Length(); + int lineSize = hv_out_Line.Length(); + int hv_out_PingsSize = hv_out_Pings.Length(); + int hv_pin_numberSize = hv_pin_number.Length(); + std::cout << "OKSize" << hv_out_OK_PingsSize << "NGSize" << hv_out_NG_PingsSize << std::endl; + std::vector AllBaseRects; + std::vector AllPoints; + std::vectorokPos; + for (int i = 0; i < hv_out_OK_PingsSize / 4; i++) + { + cv::Rect rect( + hv_out_OK_Pings[i * 4].D(), + hv_out_OK_Pings[i * 4 + 1].D(), + hv_out_OK_Pings[i * 4 + 2].D(), + hv_out_OK_Pings[i * 4 + 3].D()); + okPos.push_back(rect); + AllBaseRects.push_back(rectAndResult(rect, true)); + } + std::vectorngPos; + for (int i = 0; i < hv_out_NG_PingsSize / 4; i++) + { + cv::Rect rect( + hv_out_NG_Pings[i * 4].D(), + hv_out_NG_Pings[i * 4 + 1].D(), + hv_out_NG_Pings[i * 4 + 2].D(), + hv_out_NG_Pings[i * 4 + 3].D()); + ngPos.push_back(rect); + AllBaseRects.push_back(rectAndResult(rect, false)); + } + + for (int i = 0; i < hv_out_OK_PingsSize / 4; i++) + { + cv::Rect rect( + hv_out_OK_Pings[i * 4].D(), + hv_out_OK_Pings[i * 4 + 1].D(), + hv_out_OK_Pings[i * 4 + 2].D(), + hv_out_OK_Pings[i * 4 + 3].D()); + okPos.push_back(rect); + AllPoints.push_back(rect); + } + std::vectorxLines; + for (int i = 0; i < lineSize / 4; i++) + { + startAndEndPoints p; + p.start.x = hv_out_Line[i * 4 + 1].D(); + p.start.y = hv_out_Line[i * 4].D(); + p.end.x = hv_out_Line[i * 4 + 3].D(); + p.end.y = hv_out_Line[i * 4 + 2].D(); + xLines.push_back(p); + } + //»­Ïß + double maxRange = 0; + apexHalconPaint(halconImg, xLines, AllPoints, AllBaseRects, maxRange); + data->maxPinDetValue = maxRange; + return halconImg; +} +//ÊäÈëdetÇгöµÄÁ¬½ÓÆ÷ͼƬ +static cv::Mat cornita_HandleiAi_D(std::shared_ptrdata, cv::Mat& src, handleAiModelManager* _handleAiModelManager) +{ + handleAiModelSeg* segPtr = _handleAiModelManager->getSegModel("APEX-Seg.BHD"); + handleAiModelCls* clsPtr = _handleAiModelManager->getClsModel("APEX-Cls.BHD"); + cv::Mat img; + src(cv::Rect(50, 50, src.cols - 100, src.rows - 150)).copyTo(img); + //½á¹ûͼ + cv::Mat Paint; + if (img.channels() == 3) + img.copyTo(Paint); + else + cvtColor(img, Paint, cv::COLOR_GRAY2BGR); + //´¦Àí + auto start = std::chrono::high_resolution_clock::now(); + cv::Mat segRes = ~segPtr->Evaluate(img); + std::vector> contours; + cv::findContours(segRes, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_NONE); + int cnt = 0; + if (contours.size())//Èç¹ûÓÐȱÏÝ + data->segOriginImgs.push_back(img); + bool finalOK = true; + for (auto contour : contours) + { + cv::Rect originRect = cv::boundingRect(contour); + if (originRect.width < apexMinPin.width || originRect.height < apexMinPin.height || originRect.width > apexMaxPin.width || originRect.height > apexMaxPin.height) + continue; + cv::Rect rect = originRect; + cv::Mat clsImg = cutImg2Cls(rect, img); + 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"; + finalOK = false; + break; + default: + clsFileName = std::to_string(clsRes); + finalOK = false; + } + data->clsOriginImgs.push_back(std::make_pair(clsFileName, clsImg)); + cv::rectangle(Paint, originRect, color, 2); + } + if (finalOK == false) + { + data->halconOK = false; + data->aiDetOK = false; + data->aiNgCount++; + } + //·µ»Ø½á¹ûͼ + return Paint; +} + +//ÊäÈëdetÇгöµÄÁ¬½ÓÆ÷ͼƬ +static cv::Mat cornita_Halcon_F(std::shared_ptrdata, cv::Mat& src) +{ + //cv::Mat halconImg; + //src(cv::Rect(50, 50, src.cols - 100, src.rows - 150)).copyTo(halconImg); + //HTuple hv_out_OK_Pings; + //HTuple hv_out_NG_Pings; + //HTuple hv_out_Flag_INS; + //HTuple hv_out_Line; + //HTuple hv_pin_number; + //HTuple hv_out_Pings; + //HObject ho_in_Image = MatToHObject(halconImg); + //cv::Mat r = HObject2Mat(ho_in_Image); + //sk_APEX_Pin(ho_in_Image, &hv_out_OK_Pings, &hv_out_NG_Pings, + // &hv_out_Line, &hv_pin_number, &hv_out_Pings, &hv_out_Flag_INS); + //int flag = hv_out_Flag_INS.D(); + //if (halconImg.channels() == 1) + // cv::cvtColor(halconImg, halconImg, cv::COLOR_GRAY2BGR); + //int hv_out_OK_PingsSize = hv_out_OK_Pings.Length(), + // hv_out_NG_PingsSize = hv_out_NG_Pings.Length(); + //int lineSize = hv_out_Line.Length(); + //int hv_out_PingsSize = hv_out_Pings.Length(); + //int hv_pin_numberSize = hv_pin_number.Length(); + //std::cout << "OKSize" << hv_out_OK_PingsSize << "NGSize" << hv_out_NG_PingsSize << std::endl; + //std::vector AllBaseRects; + //std::vector AllPoints; + //std::vectorokPos; + //for (int i = 0; i < hv_out_OK_PingsSize / 4; i++) + //{ + // cv::Rect rect( + // hv_out_OK_Pings[i * 4].D(), + // hv_out_OK_Pings[i * 4 + 1].D(), + // hv_out_OK_Pings[i * 4 + 2].D(), + // hv_out_OK_Pings[i * 4 + 3].D()); + // okPos.push_back(rect); + // AllBaseRects.push_back(rectAndResult(rect, true)); + //} + //std::vectorngPos; + //for (int i = 0; i < hv_out_NG_PingsSize / 4; i++) + //{ + // cv::Rect rect( + // hv_out_NG_Pings[i * 4].D(), + // hv_out_NG_Pings[i * 4 + 1].D(), + // hv_out_NG_Pings[i * 4 + 2].D(), + // hv_out_NG_Pings[i * 4 + 3].D()); + // ngPos.push_back(rect); + // AllBaseRects.push_back(rectAndResult(rect, false)); + //} + + //for (int i = 0; i < hv_out_OK_PingsSize / 4; i++) + //{ + // cv::Rect rect( + // hv_out_OK_Pings[i * 4].D(), + // hv_out_OK_Pings[i * 4 + 1].D(), + // hv_out_OK_Pings[i * 4 + 2].D(), + // hv_out_OK_Pings[i * 4 + 3].D()); + // okPos.push_back(rect); + // AllPoints.push_back(rect); + //} + //std::vectorxLines; + //for (int i = 0; i < lineSize / 4; i++) + //{ + // startAndEndPoints p; + // p.start.x = hv_out_Line[i * 4 + 1].D(); + // p.start.y = hv_out_Line[i * 4].D(); + // p.end.x = hv_out_Line[i * 4 + 3].D(); + // p.end.y = hv_out_Line[i * 4 + 2].D(); + // xLines.push_back(p); + //} + ////»­Ïß + //double maxRange = 0; + //apexHalconPaint(halconImg, xLines, AllPoints, AllBaseRects, maxRange); + //data->maxPinDetValue = maxRange; + //return halconImg; +} +//ÊäÈëdetÇгöµÄÁ¬½ÓÆ÷ͼƬ +static cv::Mat cornita_HandleiAi_F(std::shared_ptrdata, cv::Mat& src, handleAiModelManager* _handleAiModelManager) +{ + //handleAiModelSeg* segPtr = _handleAiModelManager->getSegModel("APEX-Seg.BHD"); + //handleAiModelCls* clsPtr = _handleAiModelManager->getClsModel("APEX-Cls.BHD"); + //cv::Mat img; + //src(cv::Rect(50, 50, src.cols - 100, src.rows - 150)).copyTo(img); + ////½á¹ûͼ + //cv::Mat Paint; + //if (img.channels() == 3) + // img.copyTo(Paint); + //else + // cvtColor(img, Paint, cv::COLOR_GRAY2BGR); + ////´¦Àí + //auto start = std::chrono::high_resolution_clock::now(); + //cv::Mat segRes = ~segPtr->Evaluate(img); + //std::vector> contours; + //cv::findContours(segRes, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_NONE); + //int cnt = 0; + //if (contours.size())//Èç¹ûÓÐȱÏÝ + // data->segOriginImgs.push_back(img); + //bool finalOK = true; + //for (auto contour : contours) + //{ + // cv::Rect originRect = cv::boundingRect(contour); + // if (originRect.width < apexMinPin.width || originRect.height < apexMinPin.height || originRect.width > apexMaxPin.width || originRect.height > apexMaxPin.height) + // continue; + // cv::Rect rect = originRect; + // cv::Mat clsImg = cutImg2Cls(rect, img); + // 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"; + // finalOK = false; + // break; + // default: + // clsFileName = std::to_string(clsRes); + // finalOK = false; + // } + // data->clsOriginImgs.push_back(std::make_pair(clsFileName, clsImg)); + // cv::rectangle(Paint, originRect, color, 2); + //} + //if (finalOK == false) + //{ + // data->halconOK = false; + // data->aiDetOK = false; + // data->aiNgCount++; + //} + ////·µ»Ø½á¹ûͼ + //return Paint; +} + +//ÊäÈëdetÇгöµÄÁ¬½ÓÆ÷ͼƬ +static cv::Mat cornita_Halcon_B(std::shared_ptrdata, cv::Mat& src) +{ + //cv::Mat halconImg; + //src(cv::Rect(50, 50, src.cols - 100, src.rows - 150)).copyTo(halconImg); + //HTuple hv_out_OK_Pings; + //HTuple hv_out_NG_Pings; + //HTuple hv_out_Flag_INS; + //HTuple hv_out_Line; + //HTuple hv_pin_number; + //HTuple hv_out_Pings; + //HObject ho_in_Image = MatToHObject(halconImg); + //cv::Mat r = HObject2Mat(ho_in_Image); + //sk_APEX_Pin(ho_in_Image, &hv_out_OK_Pings, &hv_out_NG_Pings, + // &hv_out_Line, &hv_pin_number, &hv_out_Pings, &hv_out_Flag_INS); + //int flag = hv_out_Flag_INS.D(); + //if (halconImg.channels() == 1) + // cv::cvtColor(halconImg, halconImg, cv::COLOR_GRAY2BGR); + //int hv_out_OK_PingsSize = hv_out_OK_Pings.Length(), + // hv_out_NG_PingsSize = hv_out_NG_Pings.Length(); + //int lineSize = hv_out_Line.Length(); + //int hv_out_PingsSize = hv_out_Pings.Length(); + //int hv_pin_numberSize = hv_pin_number.Length(); + //std::cout << "OKSize" << hv_out_OK_PingsSize << "NGSize" << hv_out_NG_PingsSize << std::endl; + //std::vector AllBaseRects; + //std::vector AllPoints; + //std::vectorokPos; + //for (int i = 0; i < hv_out_OK_PingsSize / 4; i++) + //{ + // cv::Rect rect( + // hv_out_OK_Pings[i * 4].D(), + // hv_out_OK_Pings[i * 4 + 1].D(), + // hv_out_OK_Pings[i * 4 + 2].D(), + // hv_out_OK_Pings[i * 4 + 3].D()); + // okPos.push_back(rect); + // AllBaseRects.push_back(rectAndResult(rect, true)); + //} + //std::vectorngPos; + //for (int i = 0; i < hv_out_NG_PingsSize / 4; i++) + //{ + // cv::Rect rect( + // hv_out_NG_Pings[i * 4].D(), + // hv_out_NG_Pings[i * 4 + 1].D(), + // hv_out_NG_Pings[i * 4 + 2].D(), + // hv_out_NG_Pings[i * 4 + 3].D()); + // ngPos.push_back(rect); + // AllBaseRects.push_back(rectAndResult(rect, false)); + //} + + //for (int i = 0; i < hv_out_OK_PingsSize / 4; i++) + //{ + // cv::Rect rect( + // hv_out_OK_Pings[i * 4].D(), + // hv_out_OK_Pings[i * 4 + 1].D(), + // hv_out_OK_Pings[i * 4 + 2].D(), + // hv_out_OK_Pings[i * 4 + 3].D()); + // okPos.push_back(rect); + // AllPoints.push_back(rect); + //} + //std::vectorxLines; + //for (int i = 0; i < lineSize / 4; i++) + //{ + // startAndEndPoints p; + // p.start.x = hv_out_Line[i * 4 + 1].D(); + // p.start.y = hv_out_Line[i * 4].D(); + // p.end.x = hv_out_Line[i * 4 + 3].D(); + // p.end.y = hv_out_Line[i * 4 + 2].D(); + // xLines.push_back(p); + //} + ////»­Ïß + //double maxRange = 0; + //apexHalconPaint(halconImg, xLines, AllPoints, AllBaseRects, maxRange); + //data->maxPinDetValue = maxRange; + //return halconImg; +} +//ÊäÈëdetÇгöµÄÁ¬½ÓÆ÷ͼƬ +static cv::Mat cornita_HandleiAi_B(std::shared_ptrdata, cv::Mat& src, handleAiModelManager* _handleAiModelManager) +{ + //handleAiModelSeg* segPtr = _handleAiModelManager->getSegModel("APEX-Seg.BHD"); + //handleAiModelCls* clsPtr = _handleAiModelManager->getClsModel("APEX-Cls.BHD"); + //cv::Mat img; + //src(cv::Rect(50, 50, src.cols - 100, src.rows - 150)).copyTo(img); + ////½á¹ûͼ + //cv::Mat Paint; + //if (img.channels() == 3) + // img.copyTo(Paint); + //else + // cvtColor(img, Paint, cv::COLOR_GRAY2BGR); + ////´¦Àí + //auto start = std::chrono::high_resolution_clock::now(); + //cv::Mat segRes = ~segPtr->Evaluate(img); + //std::vector> contours; + //cv::findContours(segRes, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_NONE); + //int cnt = 0; + //if (contours.size())//Èç¹ûÓÐȱÏÝ + // data->segOriginImgs.push_back(img); + //bool finalOK = true; + //for (auto contour : contours) + //{ + // cv::Rect originRect = cv::boundingRect(contour); + // if (originRect.width < apexMinPin.width || originRect.height < apexMinPin.height || originRect.width > apexMaxPin.width || originRect.height > apexMaxPin.height) + // continue; + // cv::Rect rect = originRect; + // cv::Mat clsImg = cutImg2Cls(rect, img); + // 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"; + // finalOK = false; + // break; + // default: + // clsFileName = std::to_string(clsRes); + // finalOK = false; + // } + // data->clsOriginImgs.push_back(std::make_pair(clsFileName, clsImg)); + // cv::rectangle(Paint, originRect, color, 2); + //} + //if (finalOK == false) + //{ + // data->halconOK = false; + // data->aiDetOK = false; + // data->aiNgCount++; + //} + ////·µ»Ø½á¹ûͼ + //return Paint; +} \ No newline at end of file diff --git a/HanddleAI/HandleAiUi-new/detProcess.hpp b/HanddleAI/HandleAiUi-new/detProcess.hpp index afeec8aa..f9d3cf1a 100644 --- a/HanddleAI/HandleAiUi-new/detProcess.hpp +++ b/HanddleAI/HandleAiUi-new/detProcess.hpp @@ -7,43 +7,93 @@ #include #include #include - +struct backDetLaserAcc +{ + std::string SN; + std::string productType; + pointsOffsetStruct lastPointsOffsetStruct_; +}; class detProcess : public QThread { public: - detProcess() - { - _threadManager.initialization(this); - _manualDetThread.initialization(this); - _cameraManager.initialization(); - _handleAiModelManager.initialization(); - _triggerManager.initialization(this); + detProcess() + { + _threadManager.initialization(this); + _manualDetThread.initialization(this); + _cameraManager.initialization(); + _triggerManager.initialization(this); detProcessCallbackRegister(); - - } + } //³õʼ»¯ - void run() - { - std::vector>futures; - futures.push_back(std::async(std::launch::async, &handleAiModelManager::start, &_handleAiModelManager)); - futures.push_back(std::async(std::launch::async, &cameraManager::start, &_cameraManager)); - futures.push_back(std::async(std::launch::async, &lightSourceManager::start, &_lightSourceManager)); - futures.push_back(std::async(std::launch::async, &triggerManager::connectHost, &_triggerManager)); - - } + void run() + { + _cameraManager.start(); + _handleAiModelManager.start(); + _lightSourceManager.start(); + _triggerManager.start(); + QThread::msleep(1000); + bool res1 = waitrForInitResult(&_cameraManager); + bool res2 = waitrForInitResult(&_handleAiModelManager); + bool res3 = waitrForInitResult(&_triggerManager); + if (res3 == false)//Á¬²»ÉϾÍÖØÊÔÒ»´Î + { + _triggerManager.start(); + res3 = waitrForInitResult(&_triggerManager); + } + std::cout << "_cameraManager-initReuslt-->" << std::to_string(res1) << "\n" + << "_handleAiModelManager-initReuslt-->" << std::to_string(res2) << "\n" + << "_triggerManager-initReuslt-->" << std::to_string(res3) << "\n" << std::endl; + if (res1 == true && res2 == true && res3 == true) + emit _core._qtFunc.sendInitFinished(InitOK); + else + emit _core._qtFunc.sendInitFinished(InitFailure); + } + //µÈ´ý·þÎñ·µ»ØOK/NGÖ±µ½³¬Ê± + bool waitrForInitResult(serviceModule* ptr, int timeout = -1) + { + if (timeout == -1)//²»»á³¬Ê± + { + while (1) + { + if (ptr->status == InitFailure) + return false; + else if (ptr->status == InitOK) + return true; + QThread::msleep(100); + } + } + else + { + int timecnt = 0; + while (timecnt <= timeout) + { + if (ptr->status != NotInit) + break; + QThread::msleep(100); + timecnt++; + } + if (timecnt > 100) + return false; + if (ptr->status == InitFailure) + return false; + return true; + } + } simpleSiemensTcp _simpleSiemensTcp; - detDataManager _detDataManager;//¼ì²âÖеÄÊý¾Ý ²»ÐèÒª³õʼ»¯ - imgSaveThreadManager _imgSaveThreadManager;//´æÍ¼Ïß³Ì ²»ÐèÒª³õʼ»¯ - detThreadManager _threadManager;//Òì²½¼ì²âÏß³Ì ²»ÐèÒª³õʼ»¯ - - handleAiModelManager _handleAiModelManager;//Ä£ÐÍ - cameraManager _cameraManager;//Ïà»ú - lightSourceManager _lightSourceManager;//¹âÔ´ + detDataManager _detDataManager;//¼ì²âÖеÄÊý¾Ý ²»ÐèÒª³õʼ»¯ + imgSaveThreadManager _imgSaveThreadManager;//´æÍ¼Ïß³Ì ²»ÐèÒª³õʼ»¯ + detThreadManager _threadManager;//Òì²½¼ì²âÏß³Ì ²»ÐèÒª³õʼ»¯ - triggerManager _triggerManager;//MODBUS´¥·¢Æ÷ - manualDetThread _manualDetThread;//ÊÖ¶¯´¥·¢Ïß³Ì + handleAiModelManager _handleAiModelManager;//Ä£ÐÍ + cameraManager _cameraManager;//Ïà»ú + lightSourceManager _lightSourceManager;//¹âÔ´ - /////////////////////////////// + triggerManager _triggerManager;//MODBUS´¥·¢Æ÷ + manualDetThread _manualDetThread;//ÊÖ¶¯´¥·¢Ïß³Ì + + /////////////////////////////// + bool startDet = false; + QMutex detMutex; std::string currentSn; void detProcessCallbackRegister() { @@ -53,7 +103,10 @@ public: _triggerManager.registerCallback(361, 1, [this](QByteArray& byteArray) {detectionSwitch1(byteArray); }, "¼ì²â¿ªÊ¼"); _triggerManager.registerCallback(361, 2, [this](QByteArray& byteArray) {detectionSwitch2(byteArray); }, "¼ì²â½áÊø1"); _triggerManager.registerCallback(362, 1, [this](QByteArray& byteArray) {detectionEnd(byteArray); }, "¼ì²â½áÊø2"); + _triggerManager.registerCallback(364, 1, [this](QByteArray& byteArray) {frontBackDet(); }, "¼ì²âÕý·´Ãæ"); + _triggerManager.registerCallback(365, 2, [this](QByteArray& byteArray) {testFunc(byteArray); }, "²âÊÔ1"); + _threadManager.registerCallback([this](std::shared_ptrdata) {correctionResultHandle(data); }); _threadManager.registerCallback([this](std::shared_ptrdata) {detectionResultHandle(data); }); } //¼ì²â³ÌÐòÊÇ·ñÔÚÔËÐÐ @@ -62,6 +115,8 @@ public: bool currentBack = false; //¼¤¹âУ׼Êý¾Ý»º´æ //SN Êý¾Ý correctionStruct laserDataCache; + backDetLaserAcc _backDetLaserAcc; + //×ÜÁ÷³Ì¿ªÊ¼£¬»úÆ÷ÈË·¢ËÍ1ÖÁ¼Ä´æÆ÷259 //ÉÏλ»úÈ·ÈÏOKÖ®ºó£¬ÇåÁã¼Ä´æÆ÷259£¬²¢·¢ËÍ1ÖÁ¼Ä´æÆ÷260 //Èç²úÆ·ÐͺÅΪProduct_1ÇÒΪÕýÃæ£¬ÔòÉÏλ»ú·¢ËÍ1ÖÁ¼Ä´æÆ÷256£¬·¢ËÍ0ÖÁ¼Ä´æÆ÷257 @@ -84,8 +139,8 @@ public: //ÉÏλ»úÈ·ÈÏ»úÆ÷È˵½´ïµãλ1(264)ʱ£¬È·ÈÏOKºó£¬¼Ä´æÆ÷262ÖÁ1£¬261ÖÁ0£¬È¡µãÍê³Éºó£¬·¢ËͼĴæÆ÷263ÖÁ1 //У׼º¯Êý 261 void calibrationFunc(QByteArray& byteArray) - { - QThread::msleep(3000); + { + QThread::msleep(500); int armPos = _triggerManager.getValue(264, byteArray); int xValue1 = _triggerManager.getValue(265, byteArray); @@ -106,31 +161,33 @@ public: auto cameraPtr = _cameraManager.getCamera("181964"); if (cameraPtr == nullptr) return; - std::vector values; - for (int i = 0; i < 10; i++)//ÆúÓà - { - cameraPtr->trigger(); - double rangeData1 = cameraPtr->getCameraValue(); - } - for (int i = 0; i < 100; i++) - { - cameraPtr->trigger(); - double rangeData1 = cameraPtr->getCameraValue(); - values.push_back(rangeData1); - } + cameraPtr->trigger(); + double rangeData = cameraPtr->getCameraValue(); + //std::vector values; + //for (int i = 0; i < 10; i++)//ÆúÓà + //{ + // cameraPtr->trigger(); + // double rangeData1 = cameraPtr->getCameraValue(); + //} + //for (int i = 0; i < 70; i++) + //{ + // cameraPtr->trigger(); + // double rangeData1 = cameraPtr->getCameraValue(); + // values.push_back(rangeData1); + //} - double avgData = 0; - for (auto data : values) - { - avgData += data; - } - avgData /= values.size(); + //double avgData = 0; + //for (auto data : values) + //{ + // avgData += data; + //} + //avgData /= values.size(); - double maxData = *std::max_element(values.begin(), values.end()); - double minData = *std::min_element(values.begin(), values.end()); - double rangeData = avgData; - qDebug() << " max:" << maxData << " min:" << minData << " avg:" << avgData; - std::cout << " max:" << maxData << " min:" << minData << " avg:" << avgData << std::endl; + //double maxData = *std::max_element(values.begin(), values.end()); + //double minData = *std::min_element(values.begin(), values.end()); + //double rangeData = avgData; + /*qDebug() << " max:" << maxData << " min:" << minData << " avg:" << avgData; + std::cout << " max:" << maxData << " min:" << minData << " avg:" << avgData << std::endl;*/ qDebug() << "jiaozhun xValue:" << xValue << " yValue:" << yValue << " zValue:" << zValue << " rangeData:" << rangeData; std::cout << "jiaozhun xValue:" << xValue << " yValue:" << yValue << " zValue:" << zValue << " rangeData:" << rangeData << std::endl; if (rangeData == 0) @@ -140,7 +197,7 @@ public: } if (armPos == 1)//µÚÒ»´Î - laserDataCache = correctionStruct(); + laserDataCache = correctionStruct(); if (armPos <= 3) { @@ -150,19 +207,20 @@ public: laserDataCache.in_Z_X0Y_Value.push_back(rangeData); } else if (armPos <= 6) - { - laserDataCache.in_X_X0Z.push_back(xValue); - laserDataCache.in_Y_X0Z.push_back(yValue); - laserDataCache.in_Z_X0Z.push_back(zValue); - laserDataCache.in_Y_X0Z_Value.push_back(rangeData); - } - else if (armPos <= 9) { laserDataCache.in_X_Y0Z.push_back(xValue); laserDataCache.in_Y_Y0Z.push_back(yValue); laserDataCache.in_Z_Y0Z.push_back(zValue); laserDataCache.in_X_Y0Z_Value.push_back(rangeData); } + else if (armPos <= 9) + { + laserDataCache.in_X_X0Z.push_back(xValue); + laserDataCache.in_Y_X0Z.push_back(yValue); + laserDataCache.in_Z_X0Z.push_back(zValue); + laserDataCache.in_Y_X0Z_Value.push_back(rangeData); + } + _triggerManager.sendFinsMsg("write_short_261_0");//ÇåÁã _triggerManager.sendFinsMsg("write_short_262_1"); _triggerManager.sendFinsMsg("write_short_263_1"); @@ -177,19 +235,21 @@ public: _threadManager.addTask(data);//Ìí¼ÓÈÎÎñ laserDataCache = correctionStruct(); } - } + } //ÅÄÕÕ²¢¼ì²â 300 void captureImageAndDetection(QByteArray& byteArray) { + startDet = true; + //detMutex.lock(); _lightSourceManager.getLightSourcePtr("COM9")->setValue(lightSourceChannel::DChannel, 255); QThread::msleep(2000);//ÑÓʱµÈ´ý»úе±ÛÍ£ÎÈ _triggerManager.sendFinsMsg("write_short_300_0");//´¥·¢ÐźÅÇåÁã _triggerManager.sendFinsMsg("write_short_301_1");//¿ªÊ¼¼ì²âÐźŠint Pos = _triggerManager.getValue(303, byteArray); - emit _core._qtFunc.uiModuleLocationMap_SetProductSignStatus(Pos,1); + emit _core._qtFunc.uiModuleLocationMap_SetProductSignStatus(Pos, 1); std::cout << "arm @Pos:" << Pos; - std::shared_ptr data = _detDataManager.insertDetData("Camera1", currentSn, 1, 1); + std::shared_ptr data = _detDataManager. insertDetData("Camera1", currentSn, 1, 1); data->oriShowIndex = 0; data->resShowIndex = 0; data->armPos = Pos; @@ -205,6 +265,7 @@ public: QThread::msleep(1000);//ÑÓʱһÃëÍê³ÉÅÄÕÕ£¬ºóÐø¸Ä³ÉÅÄÍêÖ±½Ó·¢ËÍ _triggerManager.sendFinsMsg("write_short_302_1");//¿ªÊ¼¼ì²âÐźŠ+ //detMutex.unlock(); } //»úе±Û״̬Çл» 361 1 ¿ÕÏÐ void detectionSwitch1(QByteArray& byteArray) @@ -228,37 +289,79 @@ public: emit _core._qtFunc.simpleSiemensTcp_Write100True(); } } - //»úе±Û½áÊø + //¼ì²â³ÌÐò½áÊø½áÊø void detectionEnd(QByteArray& byteArray) { _simpleSiemensTcp.writeDM100FALSE(); _lightSourceManager.getLightSourcePtr("COM9")->setValue(lightSourceChannel::DChannel, 0); - int currentProductIndex = _core._appConfig._switchProductWidgetDataPtr.currentProductIndex; - if (currentBack == true) - currentBack = false; - else if (_core._appConfig.productDatas[currentProductIndex].isBackExist == true) - { - backArmIndex = _core._appConfig.productDatas[currentProductIndex].backArmIndex; - emit emit _core._qtFunc.uiModuleBackContinueDetDialog_show(); - } + bool result = true; if (armIsRunning == true) { armIsRunning = false; _triggerManager.sendFinsMsg("write_short_362_0"); auto productData = _core._productDataCache.get(currentSn); productData->writeProductData(currentSn, _core._appConfig.productDatas[_core._detGlobalData.productType]); - productData->saveData("D://CCD//result.xlsx"); - if(productData->ngPinCount >0 || productData->ngCount>0) + + QDateTime currentDateTime = QDateTime::currentDateTime(); + std::string dateDirStr = currentDateTime.toString("yyyy-MM-dd").toStdString(); + + productData->saveData("D://CCD//Result//" + dateDirStr + "//result.xlsx"); + + //ÏȲéѯÊý¾Ý¿â + auto sqlData = _core._appConfig._sqlManager.selectRowData(currentSn); + if (sqlData.rowDatas.size() > 1) + for (auto data : sqlData.rowDatas[0]) + if (!data.key.compare("detResult")) + if (!data.value.compare("NG")) + result = false; + //Êý¾Ý¿â½á¹ûΪfalseʱ ²»¸ù¾Ýµ±Ç°ÅÜÁÏÊý¾ÝÅÐ¶Ï + if (result == false) + { emit _core._qtFunc.uiModuleSummaryDataManager_SetSummaryResultText("NG", Qt::red); + return; + } + + //Êý¾Ý¿â½á¹ûΪtrue»òÕßûÓвéѯµ½Êý¾Ýʱʱ ¼ÌÐøÅÐ¶Ï + if (productData->ngPinCount > 0 || productData->ngCount > 0)//NG + { + emit _core._qtFunc.uiModuleSummaryDataManager_SetSummaryResultText("NG", Qt::red); + _core._appConfig._sqlManager.updateData(currentSn, { {"detResult","NG"} }); + } else + { emit _core._qtFunc.uiModuleSummaryDataManager_SetSummaryResultText("OK", Qt::green); + _core._appConfig._sqlManager.updateData(currentSn, { {"detResult","OK"} }); + } std::cout << "detprocess runEnd" << std::endl; } - + //ÊÇ·ñ¼ÌÐøÔËÐб³Ãæ¼ì²â + int currentProductIndex = _core._appConfig._switchProductWidgetDataPtr.currentProductIndex; + if (currentBack == true) + currentBack = false; + else if ( + _core._appConfig.productDatas[currentProductIndex].isBackExist == true + && result == true + && startDet == true) + { + backArmIndex = _core._appConfig.productDatas[currentProductIndex].backArmIndex; + emit _core._qtFunc.uiModuleBackContinueDetDialog_show(); + emit _core._qtFunc.uiModulestartDetBtn_disable(); + } + startDet = false; + } + //У׼½á¹û´¦Àí + void correctionResultHandle(std::shared_ptrdata) + { + _backDetLaserAcc.lastPointsOffsetStruct_ = data->pointsOffsetStruct_; + //дÈëplc + for (auto writeBackStr : data->writeBackData) + _triggerManager.sendFinsMsg(writeBackStr); } //¼ì²â½á¹û´¦Àí void detectionResultHandle(std::shared_ptrdata) { + data->sqlVec.push_back({ "SN",data->SNcode }); + data->sqlVec.push_back({ "ARMPOS",std::to_string(data->armPos) }); //·¢ËÍͼƬ if (data->resultImgs.size() > 0) { @@ -288,29 +391,43 @@ public: //·¢Ëͼì²â½á¹û·¢Ë͵½½çÃæ if (data->armPos != -1) { - emit _core._qtFunc.addDashBoardData(0, data->halconOK); - emit _core._qtFunc.addDashBoardData(1, data->aiDetOK); - emit _core._qtFunc.uiModuleLocationMap_SetProductSignStatus(data->armPos, - (data->halconOK==true&& data->aiDetOK==true)?2:3); - bool finalOk = (data->halconOK == true || data->aiDetOK == true)? true :false; - if(finalOk=false) + //Èç¹ûΪNG£¬ÔòµÈµ½°´Ï°´Å¥Ê±ÔÚ·¢ËÍ + bool finalOk = (data->halconOK == true && data->aiDetOK == true); + + if (data->aiDetOK == true) + emit _core._qtFunc.addDashBoardData(1, data->aiDetOK); + else if (data->resultImgs.size() >= 1) { - for (auto showMat : data->resultImgs) - { - QPixmap pixmap; - cvMatToQPixMap(showMat, pixmap); - showImgPack* pack = new showImgPack(); - emit _core._qtFunc.uiModuleImageDoubleCheckQdialog_ShowWindows(pixmap); - } + imageDoubleCheckPack pack; + pack.armPos = data->armPos; + cvMatToQPixMap(data->resultImgs[0], pack.img); + pack.type = 1; + emit _core._qtFunc.uiModuleImageDoubleCheckQdialog_ShowWindows(pack); + } - auto productData = _core._productDataCache.get(currentSn); - if (finalOk = false) - productData->ngCount++; + + if (data->halconOK == true) + emit _core._qtFunc.addDashBoardData(0, data->halconOK); + else if (data->resultImgs.size() >= 2) + { + imageDoubleCheckPack pack; + pack.armPos = data->armPos; + cvMatToQPixMap(data->resultImgs[1], pack.img); + pack.type = 2; + emit _core._qtFunc.uiModuleImageDoubleCheckQdialog_ShowWindows(pack); + + } + if (finalOk == true) + emit _core._qtFunc.uiModuleLocationMap_SetProductSignStatus(data->armPos, 2); + + perConnector _perConnectorData; _perConnectorData.aiOk = data->aiDetOK; _perConnectorData.halconOk = data->halconOK; _perConnectorData.maxPinDetValue = data->maxPinDetValue; + auto productData = _core._productDataCache.get(currentSn); productData->connectorResults.push_back(_perConnectorData); + data->sqlVec.push_back({ "Result",std::to_string(finalOk) }); } //ct¼ÆËãÒÔ¼°·¢Ë͵½½çÃæ auto totalCt = std::chrono::duration_cast(data->halconEndTime - data->algoStartTime); @@ -322,11 +439,13 @@ public: emit _core._qtFunc.addCtData(1, aiCt.count()); if (halconCt.count() > 0) emit _core._qtFunc.addCtData(2, halconCt.count()); - + data->sqlVec.push_back({ "totalCt",std::to_string(totalCt.count()) }); + data->sqlVec.push_back({ "aiCt",std::to_string(aiCt.count()) }); + data->sqlVec.push_back({ "halconCt",std::to_string(halconCt.count()) }); //SQL std::vector sqlDatas; for (auto sqlData : data->sqlVec) - sqlDatas.push_back({ sqlData.first, std::to_string(sqlData.second) }); + sqlDatas.push_back({ sqlData.first, sqlData.second }); _core._appConfig._sqlManager.addData(data->SNcode, sqlDatas); //дÈëplc @@ -340,8 +459,56 @@ public: detDataManager* dManager = data->dManager; data->dManager->deleteDetData(data->timeCode); } + //ʹÓõ㼤¹â²âÁ¿¼ì²âÊÇ·ñΪÕýÃæ£¬Ã»Êý¾Ý¾ÍÊÇÕýÃæ + void frontBackDet() + { + QThread::msleep(1000); + _triggerManager.sendFinsMsg("write_short_364_0"); + _triggerManager.sendFinsMsg("write_short_365_0"); + auto cameraPtr = _cameraManager.getCamera("181964"); + if (cameraPtr == nullptr) + return; + //for (int i = 0; i < 10; i++)//ÆúÓà + //{ + // cameraPtr->trigger(); + // cameraPtr->getCameraValue(); + //} + //for (int i = 0; i < 100; i++)//¼ì²âÊÇ·ñÓÐÊý¾Ý + //{ + // cameraPtr->trigger(); + // if (cameraPtr->getCameraValue() > -100)//ÓÐÊý¾Ý ÊÇ·´Ãæ + // { + // _triggerManager.sendFinsMsg("write_short_365_2"); + // break; + // } + //} + + //1ÊÇÕýÃæ£¬¶Á²»µ½£¬2ÊÇ·´Ã棬¿ÉÒÔ¶Áµ½ + //edit 1ÊǶÁ²»µ½Êý¾Ý 2ÊǶÁµÄµ½Êý¾Ý + cameraPtr->trigger(); + double value = cameraPtr->getCameraValue(); + std::cout << "camera value" << value; + if (value > -100)//ÓÐÊý¾Ý ÊÇ·´Ãæ + { + _triggerManager.sendFinsMsg("write_short_365_2"); + return; + } + _triggerManager.sendFinsMsg("write_short_365_1");//ÎÞÊý¾Ý ÊÇÕýÃæ + //ÕýÃæ·´ÃæÊÇ·ñ¼ÌÐø¼ì²â£¬ÔÚ»úе±Û½Å±¾Öоö¶¨ + } + //365 + void testFunc(QByteArray& byteArray) + { + _triggerManager.sendFinsMsg("write_short_365_0"); + imageDoubleCheckPack pack; + pack.armPos = 1; + cv::Mat img = cv::imread("I:/CCD/2024-08-09/15H/APEX10-1/Camera1_APEX10_Pos1_15-13-48-47_Count0.bmp",-1); + cvMatToQPixMap(img, pack.img); + pack.type = 1; + emit _core._qtFunc.uiModuleImageDoubleCheckQdialog_ShowWindows(pack); + } public slots: void runBackDet() { @@ -350,6 +517,22 @@ public slots: currentBack = true; _triggerManager.sendFinsMsg("write_short_350_" + QString::number(backArmIndex));//ÇåÁã _triggerManager.sendFinsMsg("write_short_351_1"); + qDebug() << "ÔËÐб³ºó¼ì²â³ÌÐò"; + + _triggerManager.sendFinsMsg("write_short_310_" + QString::number(_backDetLaserAcc.lastPointsOffsetStruct_.baseOffsetX < 0 ? 2 : 1)); + _triggerManager.sendFinsMsg("write_short_311_"+QString::number(abs(static_cast(_backDetLaserAcc.lastPointsOffsetStruct_.baseOffsetX)))); + double pvalueX = _backDetLaserAcc.lastPointsOffsetStruct_.baseOffsetX - static_cast(_backDetLaserAcc.lastPointsOffsetStruct_.baseOffsetX); + _triggerManager.sendFinsMsg("write_short_312_" + QString::number(static_cast(abs(pvalueX * 100)))); + + _triggerManager.sendFinsMsg("write_short_313_" + QString::number(_backDetLaserAcc.lastPointsOffsetStruct_.baseOffsetY < 0 ? 2 : 1)); + _triggerManager.sendFinsMsg("write_short_314_" + QString::number(abs(static_cast(_backDetLaserAcc.lastPointsOffsetStruct_.baseOffsetY)))); + double pvalueY = _backDetLaserAcc.lastPointsOffsetStruct_.baseOffsetY - static_cast(_backDetLaserAcc.lastPointsOffsetStruct_.baseOffsetY); + _triggerManager.sendFinsMsg("write_short_315_" + QString::number(static_cast(abs(pvalueY * 100)))); + + _triggerManager.sendFinsMsg("write_short_316_" + QString::number(_backDetLaserAcc.lastPointsOffsetStruct_.baseOffsetZ < 0 ? 2 : 1)); + _triggerManager.sendFinsMsg("write_short_317_" + QString::number(abs(static_cast(_backDetLaserAcc.lastPointsOffsetStruct_.baseOffsetZ)))); + double pvalueZ = _backDetLaserAcc.lastPointsOffsetStruct_.baseOffsetZ - static_cast(_backDetLaserAcc.lastPointsOffsetStruct_.baseOffsetZ); + _triggerManager.sendFinsMsg("write_short_318_" + QString::number(static_cast(abs(pvalueZ * 100)))); } } void writeArmStartSignal(int productTypeIn, QString SN) @@ -363,6 +546,37 @@ public slots: currentSn = SN.toStdString(); _triggerManager.sendFinsMsg("write_short_350_" + QString::number(_core._appConfig.productDatas[productTypeIn].indexOfArm)); _triggerManager.sendFinsMsg("write_short_351_1"); + + qDebug() << "SN:" << SN << "¿ªÊ¼ÔËÐУ¬ÐͺÅ->" << QString::fromStdString(_core._detGlobalData.productTypeStr); + std::cout << "SN:" << SN.toStdString() << "¿ªÊ¼ÔËÐУ¬ÐͺÅ->" << _core._detGlobalData.productTypeStr <ngCount++; + std::cout << "TYPE:" << std::to_string(type) << std::endl; + //detMutex.unlock(); + } + //È˹¤¸´Åа´ÏÂOK + void uiModuleImageDoubleCheckQdialog_pressOK(int armPos, int type)//1 halcon 2ai + { + if (type == 1) + emit _core._qtFunc.addDashBoardData(0, true); + else if (type == 2) + emit _core._qtFunc.addDashBoardData(1, true); + emit _core._qtFunc.uiModuleLocationMap_SetProductSignStatus(armPos, 2); + emit _core._qtFunc.uiModulestartDetBtn_enable(); + std::cout << "TYPE:" << std::to_string(type) << std::endl; + //detMutex.unlock(); + } }; #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 ac0b8425..de9ef463 100644 --- a/HanddleAI/HandleAiUi-new/handleAi/handleAiModel.cpp +++ b/HanddleAI/HandleAiUi-new/handleAi/handleAiModel.cpp @@ -1,20 +1,40 @@ -#include -#include -#include +#include +#include -handleAiModelManager::handleAiModelManager() +#define enableHandleAiModel 0 +void handleAiModelManager::handleAiModelManager::run() { - _core._appConfig.productDatasMutex.lock(); - this->basePath = _core._appConfig.handleAiModelPath + "/"; - for (auto& productData : _core._appConfig.productDatas) + if (init == true) + return; + handleAiModelinitialization(this); +#if enableHandleAiModel + + std::vector> futures; + for (auto& model : segModels) { - insertDetModelPath(productData.handleAiData.detModelName, productData.handleAiData.detGpuIndex); - for (auto& handleAiData : productData.handleAiData.detResultHandle) - { - - insertSegModelPath(handleAiData.segModelName, handleAiData.segGpuIndex); - insertClsModelPath(handleAiData.clsModelName, handleAiData.clsGpuIndex); - } + futures.push_back(std::async(std::launch::async, &handleAiModelSeg::init, model.second)); + emit _core._qtFunc.sendInitString(QString::fromStdString(fileManager::getFileName(model.second->path) + "³õʼ»¯ÖÐ...")); } - _core._appConfig.productDatasMutex.unlock(); + for (auto& model : clsModels) + { + futures.push_back(std::async(std::launch::async, &handleAiModelCls::init, model.second)); + emit _core._qtFunc.sendInitString(QString::fromStdString(fileManager::getFileName(model.second->path) + "³õʼ»¯ÖÐ...")); + } + for (auto& model : detModels) + { + futures.push_back(std::async(std::launch::async, &handleAiModelDet::init, model.second)); + emit _core._qtFunc.sendInitString(QString::fromStdString(fileManager::getFileName(model.second->path) + "³õʼ»¯ÖÐ...")); + } + + for (auto& func : futures) + { + func.wait(); + std::string result = func.get(); + emit _core._qtFunc.sendInitString(QString::fromStdString(fileManager::getFileName(result) + "³É¹¦")); + qDebug() << QString::fromStdString(fileManager::getFileName(result) + "³É¹¦"); + std::cout << fileManager::getFileName(result) + "³É¹¦" << std::endl; + } + init = true; + status = InitOK; +#endif } \ No newline at end of file diff --git a/HanddleAI/HandleAiUi-new/main.cpp b/HanddleAI/HandleAiUi-new/main.cpp index 911dad3b..7c863c50 100644 --- a/HanddleAI/HandleAiUi-new/main.cpp +++ b/HanddleAI/HandleAiUi-new/main.cpp @@ -17,7 +17,7 @@ #include #include - +#include #pragma region 程åº�å�¯åŠ¨åŠŸèƒ½ bool appIsRuning() { @@ -107,14 +107,29 @@ void connectSignalAndSlots(MainWindow* front, appCore* _core, detProcess* _detPr front->_displayWidget->_uiModuleLocationMap, &uiModuleLocationMap::resetToDefault); QObject::connect(&_core->_qtFunc, &qtFunction::uiModuleLocationMap_SetProductSignStatus, front, &MainWindow::uiModuleLocationMapSetProductSignStatus); + //uiModuleImageDoubleCheckQdialog QObject::connect(&_core->_qtFunc, &qtFunction::uiModuleImageDoubleCheckQdialog_ShowWindows, - front, [=](QPixmap map) {front->_imageDoubleCheckQdialog->showAndSetImg(map); }); + front, [=](imageDoubleCheckPack pack) {front->_imageDoubleCheckQdialog->showAndSetImg(pack); }); + QObject::connect(front->_imageDoubleCheckQdialog,&imageDoubleCheckQdialog::ngSignal, + _detProcess, &detProcess::uiModuleImageDoubleCheckQdialog_pressNG); + QObject::connect(front->_imageDoubleCheckQdialog, &imageDoubleCheckQdialog::okSignal, + _detProcess, &detProcess::uiModuleImageDoubleCheckQdialog_pressOK); + //uiModuleSummaryDataManager QObject::connect(&_core->_qtFunc, &qtFunction::uiModuleSummaryDataManager_SetSummaryResultText, front, [=](QString text, Qt::GlobalColor color) {front->_displayWidget->_summaryDataManager->setSummaryResult(text, color); }); QObject::connect(&_core->_qtFunc, &qtFunction::uiModuleSummaryDataManager_Reset, front, [=]() {front->_displayWidget->_summaryDataManager->resetAllValue(); }); + QObject::connect(&_core->_qtFunc, &qtFunction::uiModulestartDetBtn_disable, + front, [=]() {front->_displayWidget->_switchProductWidget->startBtn->setDisabled(true); + front->_displayWidget->_switchProductWidget->disableTextChange = true; + front->_displayWidget->_switchProductWidget->startBtn->setText(" "); }); + QObject::connect(&_core->_qtFunc, &qtFunction::uiModulestartDetBtn_enable, + front, [=]() {front->_displayWidget->_switchProductWidget->startBtn->setEnabled(true); + front->_displayWidget->_switchProductWidget->disableTextChange = false; + front->_displayWidget->_switchProductWidget->startBtn->setText("è¿�行"); }); + QObject::connect(&_core->_qtFunc, &qtFunction::uiModuleBackContinueDetDialog_show, front, [=]() {front->_backContinueDetDialog->show(); }); QObject::connect(&_core->_qtFunc, &qtFunction::uiModuleBackContinueDetDialog_hide, @@ -145,39 +160,78 @@ void connectSignalAndSlots(MainWindow* front, appCore* _core, detProcess* _detPr QObject::connect(front->_backContinueDetDialog, &backContinueDetDialog::continueClickedSignal, _detProcess, &detProcess::runBackDet); } +#include + +LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { + if (msg == WM_QUERYENDSESSION) { + // 阻止关机 + return FALSE; + } + return DefWindowProc(hwnd, msg, wParam, lParam); +} appCore _core; + int main(int argc, char* argv[]) { - - if (!isRunAsAdmin()) + if (!isRunAsAdmin()) { - restartAsAdmin(); + restartAsAdmin(); exit(0); } -#if enableHideConsle - HWND hWnd = GetConsoleWindow(); - if (hWnd) { - ShowWindow(hWnd, SW_HIDE); - }// éš�è—�控制å�°çª—å�£ -#endif - QApplication a(argc, argv); - //检测是å�¦å·²è¿�行 - if (appIsRuning() == false) - exit(0); - ////////// - qRegisterMetaType("imgWidgetShowType"); - qRegisterMetaType("showImgPack"); - qRegisterMetaType("matPtr"); - qRegisterMetaType("mat"); - qRegisterMetaType("stdString"); - qRegisterMetaType("historyPack"); - qRegisterMetaType("QtGlobalColor"); - //_core.initTimer(); - MainWindow w; - w.show(); - detProcess _detProcess; - connectSignalAndSlots(&w,&_core,&_detProcess); - _detProcess.start(); - return a.exec(); + // 注册窗å�£ç±» + WNDCLASS wc = { 0 }; + wc.lpfnWndProc = WndProc; + wc.hInstance = GetModuleHandle(NULL); + wc.lpszClassName = (LPCSTR)L"BlockShutdown"; + RegisterClass(&wc); + + // 创建窗å�£ + HWND hwnd = CreateWindow(wc.lpszClassName, (LPCSTR)L"BlockShutdown", WS_OVERLAPPEDWINDOW, + CW_USEDEFAULT, CW_USEDEFAULT, 200, 200, NULL, NULL, wc.hInstance, NULL); + + // 消æ�¯å¾ªçޝ + MSG msg; + while (GetMessage(&msg, NULL, 0, 0)) { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + + return 0; } +//int main(int argc, char* argv[]) +//{ +// if (!isRunAsAdmin()) +// { +// restartAsAdmin(); +// exit(0); +// } +//#if enableHideConsle +// HWND hWnd = GetConsoleWindow(); +// if (hWnd) { +// ShowWindow(hWnd, SW_HIDE); +// }// éš�è—�控制å�°çª—å�£ +//#endif +// QApplication a(argc, argv); +// //检测是å�¦å·²è¿�行 +// if (appIsRuning() == false) +// exit(0); +// ////////// +// cv::utils::logging::setLogLevel(cv::utils::logging::LOG_LEVEL_ERROR); +// qRegisterMetaType("imgWidgetShowType"); +// qRegisterMetaType("showImgPack"); +// qRegisterMetaType("matPtr"); +// qRegisterMetaType("mat"); +// qRegisterMetaType("stdString"); +// qRegisterMetaType("historyPack"); +// qRegisterMetaType("QtGlobalColor"); +// qRegisterMetaType("imageDoubleCheckPack"); +// +// //_core.initTimer(); +// MainWindow w; +// w.show(); +// detProcess _detProcess; +// connectSignalAndSlots(&w,&_core,&_detProcess); +// _detProcess.start(); +// return a.exec(); +////} diff --git a/HanddleAI/HandleAiUi-new/uiModule/uiModule_backContinueDetDialog.h b/HanddleAI/HandleAiUi-new/uiModule/uiModule_backContinueDetDialog.h index 680cd358..308f1d76 100644 --- a/HanddleAI/HandleAiUi-new/uiModule/uiModule_backContinueDetDialog.h +++ b/HanddleAI/HandleAiUi-new/uiModule/uiModule_backContinueDetDialog.h @@ -8,28 +8,35 @@ class backContinueDetDialog : public QObject public: fancyWarnWindow* _fancyWarnWindow; QTimer* timer; + QString SN; backContinueDetDialog() { timer = new QTimer(this); - _fancyWarnWindow = new fancyWarnWindow(fancyWarnWindow::tip, "ÊÇ·ñ¼ÌÐø±³Ãæ¼ì²â", "", true); + _fancyWarnWindow = new fancyWarnWindow(fancyWarnWindow::tip, "ÊÇ·ñ¼ÌÐø±³Ãæ¼ì²â", "", false); _fancyWarnWindow->disableHideAfterClicked(); _fancyWarnWindow->hide(); + _fancyWarnWindow->closeBtn->hide(); QObject::connect(_fancyWarnWindow->continueBtn, &QPushButton::clicked, this, &backContinueDetDialog::continueClicked); - + QObject::connect(_fancyWarnWindow->cancelBtn, &QPushButton::clicked, this, &backContinueDetDialog::cancelClicked); } private: public slots: + void cancelClicked() + { + qDebug() << "µã»÷ÁËÈ¡Ïû¼ì²â±³Ãæ"; + } void continueClicked() { timer->start(10000); emit continueClickedSignal(); _fancyWarnWindow->continueBtn->setDisabled(true); QObject::connect(timer, &QTimer::timeout, this, [=]() {_fancyWarnWindow->continueBtn->setEnabled(true); }); - } + qDebug() << "µã»÷ÔËÐб³Ãæ"; + } void show() { - _fancyWarnWindow->show(); + _fancyWarnWindow->show(); } void hide() { diff --git a/HanddleAI/HandleAiUi-new/uiModule/uiModule_imageDoubleCheckQdialog.h b/HanddleAI/HandleAiUi-new/uiModule/uiModule_imageDoubleCheckQdialog.h index 9025dd05..e48059ec 100644 --- a/HanddleAI/HandleAiUi-new/uiModule/uiModule_imageDoubleCheckQdialog.h +++ b/HanddleAI/HandleAiUi-new/uiModule/uiModule_imageDoubleCheckQdialog.h @@ -7,7 +7,6 @@ #include #include #include - class imageDoubleCheckQdialog :public QDialog { Q_OBJECT @@ -17,6 +16,9 @@ public: QPushButton* closeBtn = new QPushButton(this); fancyButtonText* okBtn = new fancyButtonText(120, 40, "OK", "¼ÌÐø"); fancyButtonText* ngBtn = new fancyButtonText(120, 40, "NG", "¼ÌÐø"); + QMutex mutex; + QQueue< imageDoubleCheckPack>imgqueue; + imageDoubleCheckPack currentPack; imageDoubleCheckQdialog() { QPalette paletteWhite, paletteRed, paletteGreen; @@ -81,21 +83,21 @@ public: menuBarLayoutRight->addWidget(closeBtn); QObject::connect(closeBtn, &QPushButton::clicked, this, &QDialog::close); - + closeBtn->hide();//Òþ²Ø¹Ø±Õ°´Å¥ QHBoxLayout* imageViewLayout = new QHBoxLayout(); imageViewLayout->addWidget(_ImageWidgetManager); _ImageWidgetManager->createViewer(""); _ImageWidgetManager->disableAllSwitchBtn(); - + QHBoxLayout* okngBtnLayout = new QHBoxLayout(); okngBtnLayout->addWidget(okBtn); okngBtnLayout->addWidget(ngBtn); - QObject::connect(okBtn, &QPushButton::clicked, this, &QDialog::close); - QObject::connect(ngBtn, &QPushButton::clicked, this, &QDialog::close); - QObject::connect(okBtn, &QPushButton::clicked, this, [=]() {emit okSignal(); }); - QObject::connect(ngBtn, &QPushButton::clicked, this, [=]() {emit ngSignal(); }); + //QObject::connect(okBtn, &QPushButton::clicked, this, &QDialog::close); + //QObject::connect(ngBtn, &QPushButton::clicked, this, &QDialog::close); + QObject::connect(okBtn, &QPushButton::clicked, this, [=]() {pressOK(); }); + QObject::connect(ngBtn, &QPushButton::clicked, this, [=]() {pressNG(); }); layout->addWidget(menuBarWidget, 0, 0); layout->addLayout(imageViewLayout, 1, 0); @@ -103,15 +105,61 @@ public: this->setWindowFlags(this->windowFlags() | Qt::WindowStaysOnTopHint); //this->show(); } - void showAndSetImg(QPixmap img) + void showAndSetImg(imageDoubleCheckPack pack) { - _ImageWidgetManager->showImg(img, imgWidgetShowType::imgWidgetOri, 0); - this->show(); + mutex.lock(); + std::cout << isShowing<<"-" << imgqueue.size()<< std::endl; + if (isShowing == false && imgqueue.size() == 0) + { + currentPack = pack; + _ImageWidgetManager->showImg(pack.img, imgWidgetShowType::imgWidgetOri, 0); + _ImageWidgetManager->showImg(pack.img, imgWidgetShowType::imgWidgetRes, 0); + this->show(); + isShowing = true; + } + else + { + imgqueue.enqueue(pack); + } + mutex.unlock(); } signals: - void okSignal(); - void ngSignal(); + void okSignal(int armPos, int type); + void ngSignal(int armPos, int type); private: + void pressOK() + { + mutex.lock(); + emit okSignal(currentPack.armPos , currentPack.type); + if (imgqueue.size() > 0) + { + currentPack = imgqueue.dequeue(); + _ImageWidgetManager->showImg(currentPack.img, imgWidgetShowType::imgWidgetOri, 0); + } + else + { + isShowing = false; + close(); + } + mutex.unlock(); + } + void pressNG() + { + mutex.lock(); + emit ngSignal(currentPack.armPos, currentPack.type); + if (imgqueue.size() > 0) + { + currentPack = imgqueue.dequeue(); + _ImageWidgetManager->showImg(currentPack.img, imgWidgetShowType::imgWidgetOri, 0); + } + else + { + isShowing = false; + close(); + } + mutex.unlock(); + } + bool isShowing = false; bool isMoving = false; bool isResizing = false; int minWidth = 720, minHeight = 480; diff --git a/HanddleAI/HandleAiUi-new/uiModule/uiModule_switchProduct.h b/HanddleAI/HandleAiUi-new/uiModule/uiModule_switchProduct.h index 331336c4..5ae49dfb 100644 --- a/HanddleAI/HandleAiUi-new/uiModule/uiModule_switchProduct.h +++ b/HanddleAI/HandleAiUi-new/uiModule/uiModule_switchProduct.h @@ -8,7 +8,6 @@ #include #include #include -#include #include #include #include @@ -16,11 +15,13 @@ #include #include #include +#include class switchProductWidget : public QWidget { Q_OBJECT public: // + bool disableTextChange = false; QMutex mutex; std::vectorproductDatas; int* currentProductIndexPtr; @@ -29,13 +30,25 @@ public: QVBoxLayout* layout = new QVBoxLayout(this); fancyButtonText* switchBtn = new fancyButtonText(100, 60, "ÐÞ¸Ä", "Ð޸ĵ±Ç°»úÐÍ"); QLabel* armHeartBeatSign = new QLabel(); + //ÁϺÅÌõÂëÊäÈë + QLineEdit* partNumberIntputLine = new QLineEdit(); + + //ÔËÐа´Å¥ fancyButtonText* startBtn; + //SNÌõÂëÊäÈë QLineEdit* snIntputLine = new QLineEdit(); + //SNÍê³ÉÊäÈëºó1Ãë´¥·¢ + QTimer* timer; //ÁϺÅÏÔʾ - QComboBox* productSelect = new QComboBox(this); + QComboBox* productSelect = new QComboBox(this); QLabel* currentProduct = new QLabel(this); //ÁϺÅÀàÐÍ QComboBox* productNameTypeSwitch = new QComboBox(this); + void clear() + { + partNumberIntputLine->clear(); + snIntputLine->clear(); + } switchProductWidget() { currentProductIndexPtr = &_core._appConfig._switchProductWidgetDataPtr.currentProductIndex; @@ -68,19 +81,28 @@ public: layout->addLayout(switchLayout); } - snIntputLine->setFixedHeight(50); - snIntputLine->setFont(font); + + + QHBoxLayout* hBtnLayout2 = new QHBoxLayout(); + partNumberIntputLine->setFixedHeight(50); + partNumberIntputLine->setFont(font); + partNumberIntputLine->setPlaceholderText("ÁϺÅÌõÂëÊäÈë"); + hBtnLayout2->addWidget(partNumberIntputLine); QHBoxLayout* hBtnLayout = new QHBoxLayout(); startBtn = new fancyButtonText(80, -1, "ÔËÐÐ", "ÔËÐмì²â³ÌÐò"); + snIntputLine->setFixedHeight(50); + snIntputLine->setFont(font); + snIntputLine->setPlaceholderText("SNÌõÂëÊäÈë"); hBtnLayout->addWidget(snIntputLine); hBtnLayout->addWidget(startBtn); + layout->addLayout(hBtnLayout2); layout->addLayout(hBtnLayout); productSelectFresh(0); connect(startBtn, &QPushButton::clicked, this, [=]() { - emit startArmProgramSignal(productSelect->currentIndex(), snIntputLine->text()); + emit startArmProgramSignal(indexFromPartNumber, snIntputLine->text()); std::cout << "°´Ï°´Å¥" << std::endl; }); connect(switchBtn, &QPushButton::clicked, this, &switchProductWidget::startSwitch); @@ -93,6 +115,22 @@ public: { productSelectFresh(productNameTypeSwitch->currentIndex()); }); + connect(partNumberIntputLine, &QLineEdit::textChanged, this, [=]() + { + timer->start(); + //partNumberIntputLineSlot(partNumberIntputLine->text().toStdString()); + }); + timer = new QTimer(this); + timer->setInterval(300); // ÉèÖÃ1Ã볬ʱ + timer->setSingleShot(true); // ¶¨Ê±Æ÷Ö»´¥·¢Ò»´Î + connect(timer, &QTimer::timeout, this, [=]() + { + partNumberIntputLineSlot(partNumberIntputLine->text().toStdString()); + }); + currentProduct->setText("ÇëÊäÈëÁϺÅ"); + productSelect->hide(); + switchBtn->hide(); + startBtn->setDisabled(true); } void productSelectFresh(int index) { @@ -138,15 +176,19 @@ public slots: if (status == true) { startBtn->toDefault(); - startBtn->setText("ÔËÐÐ"); + if (disableTextChange == false) + startBtn->setText("ÔËÐÐ"); snIntputLine->setDisabled(false); + partNumberIntputLine->setDisabled(false); std::cout << "°´ÏÂÈí¼þÔËÐÐ" << std::endl; } else { startBtn->toRed(); - startBtn->setText("¼±Í£"); + if (disableTextChange == false) + startBtn->setText("¼±Í£"); snIntputLine->setDisabled(true); + partNumberIntputLine->setDisabled(true); std::cout << "°´ÏÂÈí¼þ¼±Í£" << std::endl; } } @@ -154,8 +196,34 @@ signals: void startArmProgramSignal(int,QString); void switchProductSignal(int); private: + int indexFromPartNumber = -1; int siwtchBtnState = 0; private slots: + void partNumberIntputLineSlot(std::string partNumber) + { + int PartNumber_Count = partNumber.length();//Ñ­»·´ÎÊý + for (auto i = 0; i < PartNumber_Count; i++) + { + std::string partNumber_Split = partNumber.substr(0, PartNumber_Count - i); + auto it = _core._appConfig.partNumberWithIndex.find(partNumber_Split); + if (it != _core._appConfig.partNumberWithIndex.end()) + { + int index = _core._appConfig.partNumberWithIndex.find(partNumber_Split)->second; + currentProduct->setText(QString::fromStdString(_core._appConfig.productDatas[index].name)); + *currentProductIndexPtr = index; + startBtn->setEnabled(true); + indexFromPartNumber = index; + snIntputLine->setFocus(); + emit switchProductSignal(index); + return; + } + } + + { + currentProduct->setText("δÕÒµ½¶ÔÓ¦ÁϺţ¡"); + startBtn->setDisabled(true); + } + } void startSwitch() { if(siwtchBtnState == 0)