This commit is contained in:
2024-07-26 11:47:31 +08:00
parent ff88b948b5
commit d74de2ccf5
9 changed files with 170 additions and 47 deletions
+32 -30
View File
@@ -11,7 +11,7 @@ cv::Mat pinHandleAiEvaluate(std::shared_ptr <detData> data, cv::Mat& src,
bool pinHalconEvaluate(std::shared_ptr <detData> data, cv::Rect& Result, cv::Mat& src, cv::Mat& out, int productType);
//公头定位
std::vector<handdleAI::Bbox> pinDetEvaluate(std::shared_ptr <detData> data ,cv::Mat& src, handleAiModelManager* _handleAiModelManager)
std::vector<handdleAI::Bbox> pinDetEvaluate(std::shared_ptr <detData> data, cv::Mat& src, handleAiModelManager* _handleAiModelManager)
{
std::vector<handdleAI::Bbox> result;
handleAiModelDet* detPtr = _handleAiModelManager->getDetModel(data->_productDataStruct.handleAiData.detModelName);
@@ -27,7 +27,7 @@ std::vector<handdleAI::Bbox> getpinHandleAiEvaluateRect(std::shared_ptr <detData
int totalWidth = 0;
for (auto detResult : detResult)
totalWidth += detResult.w;
int avgWidth= totalWidth / detResult.size();
int avgWidth = totalWidth / detResult.size();
cv::Point centerPos(src.rows / 2, src.cols / 2);
cv::Rect targetRect(src.cols / 3, src.rows / 3, src.cols / 3, src.rows / 3);
@@ -84,7 +84,7 @@ std::vector<cv::Rect> getTopPoints(std::vector<cv::Rect>& rectangles)
{
double minX, maxX, avgX;
double minY, maxY, avgY;
for (auto data : rectangles)
for (auto data : rectangles)
{
std::cout << data.y << std::endl;
}
@@ -98,9 +98,9 @@ void halconPaint(cv::Mat& out, const std::vector<cv::Rect>& AllPos)
std::vector<int>eachLineX;//记录
for (auto& vec : groupedRectangles)//画竖线
{
cv::line(out,
cv::Point(vec[0].x + vec[0].width / 2, 0),
cv::Point(vec[0].x + vec[0].width / 2, out.rows),
cv::line(out,
cv::Point(vec[0].x + vec[0].width / 2, 0),
cv::Point(vec[0].x + vec[0].width / 2, out.rows),
cv::Scalar(255, 255, 255), 1);
eachLineX.push_back(vec[0].x + vec[0].width / 2);
}
@@ -110,9 +110,9 @@ void halconPaint(cv::Mat& out, const std::vector<cv::Rect>& AllPos)
std::to_string(eachLineX[i] - eachLineX[i - 1]),
cv::Point(eachLineX[i - 1], 20), 1, 2,
cv::Scalar(255, 255, 255));
cv::line(out,
cv::Point(eachLineX[i - 1],20),
cv::Point(eachLineX[i], 20),
cv::line(out,
cv::Point(eachLineX[i - 1], 20),
cv::Point(eachLineX[i], 20),
cv::Scalar(255, 255, 255), 1);
}
for (int i = 0; i < groupedRectangles.size(); i++)//画竖线间的横线
@@ -129,23 +129,23 @@ void halconPaint(cv::Mat& out, const std::vector<cv::Rect>& AllPos)
cv::Scalar(0, 255, 0), 1);
cv::putText(out,
std::to_string(range),
cv::Point(eachLineX[i], mid.y-5), 1, 2,
cv::Point(eachLineX[i], mid.y - 5), 1, 2,
cv::Scalar(0, 255, 0));
}
}
}
void halconEvaluate(std::shared_ptr <detData> data, std::vector<handdleAI::Bbox>connectorPos,std::vector<cv::Mat>&halconImgResult)
void halconEvaluate(std::shared_ptr <detData> data, std::vector<handdleAI::Bbox>connectorPos, std::vector<cv::Mat>& halconImgResult)
{
cv::Mat src = data->oriImgs[0];
for (auto& box : connectorPos)
{
cv::Mat halconMatResult;
bool halconBoolResult = pinHalconEvaluate(data,BboxToRect(box), src, halconMatResult, 5);
bool halconBoolResult = pinHalconEvaluate(data, BboxToRect(box), src, halconMatResult, 5);
if (halconBoolResult == true)
halconImgResult.push_back(halconMatResult);//HALCON检测结果
}
}
bool pinHalconEvaluate(std::shared_ptr <detData> data, cv::Rect& Result, cv::Mat& src,cv::Mat& out,int productType)
}
bool pinHalconEvaluate(std::shared_ptr <detData> data, cv::Rect& Result, cv::Mat& src, cv::Mat& out, int productType)
{
#pragma region halcon变量定义
//测量
@@ -183,7 +183,7 @@ bool pinHalconEvaluate(std::shared_ptr <detData> data, cv::Rect& Result, cv::Mat
hv_in_ShapePath = "./halconModel";
//
HTuple hv_in_FilePath=".\\halconFiles\\";
HTuple hv_in_FilePath = ".\\halconFiles\\";
HTuple hv_out_OK_Pings;
HTuple hv_out_NG_Pings;
//
@@ -211,27 +211,27 @@ bool pinHalconEvaluate(std::shared_ptr <detData> data, cv::Rect& Result, cv::Mat
break;
}
int flag = hv_out_Flag_INS.D();
if(flag ==1)
if (flag == 1)
{
if (productType == 5)
{
halconImg.copyTo(out);
if (out.channels() == 1)
cv::cvtColor(out, out, cv::COLOR_GRAY2BGR);
int hv_out_OK_PingsSize = hv_out_OK_Pings.Length(), hv_out_NG_PingsSize = hv_out_NG_Pings.Length();
std::cout << "OKSize"<< hv_out_OK_PingsSize<<"NGSize"<< hv_out_NG_PingsSize << std::endl;
std::vector<cv::Rect>okPos, ngPos,AllPoints;
for (int i = 0; i < hv_out_OK_PingsSize/4; i++)
int hv_out_OK_PingsSize = hv_out_OK_Pings.Length(), hv_out_NG_PingsSize = hv_out_NG_Pings.Length();
std::cout << "OKSize" << hv_out_OK_PingsSize << "NGSize" << hv_out_NG_PingsSize << std::endl;
std::vector<cv::Rect>okPos, ngPos, AllPoints;
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].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);
}
for (int i = 0; i < hv_out_NG_PingsSize/4; i++)
for (int i = 0; i < hv_out_NG_PingsSize / 4; i++)
{
cv::Rect rect(
hv_out_NG_Pings[i + 1].D(),
@@ -250,6 +250,7 @@ bool pinHalconEvaluate(std::shared_ptr <detData> data, cv::Rect& Result, cv::Mat
}
if (hv_out_Pings_X.Length() > 0)
data->halconOK = false;
std::cout << "HALCON FAILURE" << std::endl;
out = halconImg;
return false;
//Pings_ROI(ho_in_Image, hv_in_ShapePath, hv_in_Parameter, &hv_out_ROI_Value, &hv_out_Flag_ROI);
@@ -292,6 +293,7 @@ cv::Mat pinHandleAiEvaluate(std::shared_ptr <detData> data, cv::Mat& src,
cv::Rect rect = originRect;
cv::Mat clsImg = cutImg2Cls(rect, src);
int clsRes = clsPtr->Evaluate(clsImg);
clsRes = 1;
cv::Scalar color = cv::Scalar(0, 0, 255, 30);
std::string clsFileName;
switch (clsRes)
@@ -315,10 +317,10 @@ cv::Mat pinHandleAiEvaluate(std::shared_ptr <detData> data, cv::Mat& src,
//返回结果图
return Paint;
}
void handleAiEvaluate(std::shared_ptr <detData> data, handleAiModelManager* _handleAiModelManager, std::vector<handdleAI::Bbox>connectorPos, std::vector<cv::Mat>&aiImgResult)
void handleAiEvaluate(std::shared_ptr <detData> data, handleAiModelManager* _handleAiModelManager, std::vector<handdleAI::Bbox>connectorPos, std::vector<cv::Mat>& aiImgResult)
{
cv::Mat src = data->oriImgs[0];
for(auto& handleAiData: data->_productDataStruct.handleAiData.detResultHandle)
for (auto& handleAiData : data->_productDataStruct.handleAiData.detResultHandle)
{
handleAiModelSeg* segPtr = _handleAiModelManager->getSegModel(handleAiData.segModelName);
handleAiModelCls* clsPtr = _handleAiModelManager->getClsModel(handleAiData.clsModelName);
@@ -353,21 +355,21 @@ void ALGO_Inspection(std::shared_ptr <detData> data, handleAiModelManager* _hand
int errorCode = ALGO_InspectionErrorCheck(data);
if (errorCode != 0)
{
qDebug() << __FUNCDNAME__ << __LINE__ << "errorCheck ERR"<< errorCode;
qDebug() << __FUNCDNAME__ << __LINE__ << "errorCheck ERR" << errorCode;
return;
}
data->algoStartTime = std::chrono::high_resolution_clock::now();
cv::Mat src = data->oriImgs[0];
//使用det获取每个公头的位置
std::vector<handdleAI::Bbox> detResult = pinDetEvaluate(data,src, _handleAiModelManager);
std::vector<handdleAI::Bbox> detResult = pinDetEvaluate(data, src, _handleAiModelManager);
//std::vector<handdleAI::Bbox> detResult = { { 2101.71411,1821.34961,1245.11145 ,1453.68127},
// {3365.11548,1816.07214,1240.55957,1454.79187} };
if (detResult.size() == 0)
{
return;
}
}
//过滤结果,获取用于handleAi/HALCON检测的rect
std::vector<handdleAI::Bbox> pinPos = getpinHandleAiEvaluateRect(data,src, detResult);
std::vector<handdleAI::Bbox> pinPos = getpinHandleAiEvaluateRect(data, src, detResult);
//HANDLEAI
std::vector<cv::Mat>aiImgResult;
@@ -384,6 +386,6 @@ void ALGO_Inspection(std::shared_ptr <detData> data, handleAiModelManager* _hand
data->resultImgs.push_back(tiledImages(aiImgResult));
if (halconImgResult.size() > 0)
data->resultImgs.push_back(tiledImages(halconImgResult));
}
@@ -188,7 +188,7 @@ public:
mutex->unlock();
return result;
}
int currentProductIndex;//switchProductWidget
int currentProductIndex = 0;//switchProductWidget
std::vector<productDataStruct>* productDatasPtr = nullptr;//appConfig
std::mutex* mutex = nullptr;//appConfig
};
+1 -1
View File
@@ -9,7 +9,7 @@
#include <appCoreQtFunction.h>
#include <qtimer.h>
#define enableHandleAiModel 0
#define enableHandleAiModel 1
#define disableBackEndCheck 1
#define disableeAlgo 0
#define enableHideConsle 1
+6 -5
View File
@@ -177,7 +177,7 @@ public:
emit _core._qtFunc.uiModuleLocationMapSetProductSignStatus(Pos,1);
std::cout << "arm @Pos:" << Pos;
std::shared_ptr <detData> data = _detDataManager.insertDetData("Camera1", "TEST", 1, 1);
std::shared_ptr <detData> data = _detDataManager.insertDetData("Camera1", currentSn, 1, 1);
data->oriShowIndex = 0;
data->resShowIndex = 0;
data->armPos = Pos;
@@ -267,15 +267,15 @@ public:
emit _core._qtFunc.addDashBoardData(1, data->aiDetOK);
emit _core._qtFunc.uiModuleLocationMapSetProductSignStatus(data->armPos,
(data->halconOK==true&& data->aiDetOK==true)?2:3);
bool finalOk = (data->halconOK == true && data->aiDetOK == true)? true :false;
if(finalOk=true)
bool finalOk = (data->halconOK == true || data->aiDetOK == true)? true :false;
if(finalOk=false)
{
for (auto showMat : data->resultImgs)
{
QPixmap pixmap;
cvMatToQPixMap(showMat, pixmap);
showImgPack* pack = new showImgPack();
emit _core._qtFunc.uiModuleImageDoubleCheckQdialogShowWindows(pixmap);
emit _core._qtFunc.uiModuleImageDoubleCheckQdialogShowWindows(pixmap);
}
}
auto productData = _core._productDataCache.get(currentSn);
@@ -319,7 +319,8 @@ public slots:
_core._detGlobalData.productTypeStr = _core._appConfig.productDatas[productTypeIn].name;
_core._appConfig.productDatasMutex.unlock();
_core._detGlobalData.productType = productTypeIn;
_core._detGlobalData.currentSn = SN.toStdString();
if(_core._detGlobalData.currentSn!="")
_core._detGlobalData.currentSn = SN.toStdString();
currentSn = SN.toStdString();
_triggerManager.sendFinsMsg("write_short_350_" + QString::number(_core._appConfig.productDatas[productTypeIn].indexOfArm));
_triggerManager.sendFinsMsg("write_short_351_1");
+2
View File
@@ -271,6 +271,8 @@ signals:
protected:
void mouseDoubleClickEvent(QMouseEvent* event) override
{
if (event->pos().y() > 35)
return
toggleMaximize(reverse);
QMainWindow::mouseDoubleClickEvent(event);
}
@@ -91,7 +91,7 @@ public:
});
connect(productNameTypeSwitch, &QComboBox::currentTextChanged, this, [=]()
{
productSelectFresh(productNameTypeSwitch->currentIndex());
//productSelectFresh(productNameTypeSwitch->currentIndex());
});
}
void productSelectFresh(int index)
@@ -43,7 +43,7 @@
}
]
},
"imgPosPath":"./imgPosTip/Test1.jpg",
"imgPosPath":"./imgPosTip/asr1006.png",
"productSign":
{
"0":
+64 -4
View File
@@ -2,7 +2,7 @@
"productName":"APEX18",
"customerPartNumber":"DS-C9718",
"foxconnPartNumber":"800-102754-03",
"imgPosPath":"./imgPosTip/Test1.jpg",
"imgPosPath":"./imgPosTip/apex18.png",
"productIndex":6,
"baseX":0.00,
"baseY":0.00,
@@ -10,7 +10,7 @@
"baseRx":0.00,
"baseRy":0.00,
"baseRz":0.00,
"connectorAmout":-1,
"connectorAmout":96,
"halconAlgoIndex":0,
"cameraSetting":
{
@@ -31,7 +31,7 @@
[
{
"detResultIndex":[0],
"segModelName":"ASR-Seg.BHD",
"segModelName":"APEX-Seg.BHD",
"segNgIndex":[0,1,2],
"segGpuIndex":0,
"clsModelName":"ASR-Cls.BHD",
@@ -43,7 +43,67 @@
}
}
]
},
"productSign":
{
"1": {
"x": 1305,
"y": 10,
"w": 150,
"h": 160,
"sign": "列1行1"
},
"2": {
"x": 1305,
"y": 170,
"w": 150,
"h": 160,
"sign": "列1行2"
},
"3": {
"x": 1305,
"y": 330,
"w": 150,
"h": 160,
"sign": "列1行3"
},
"4": {
"x": 1305,
"y": 490,
"w": 150,
"h": 160,
"sign": "列1行4"
},
"5": {
"x": 1305,
"y": 650,
"w": 150,
"h": 160,
"sign": "列1行5"
},
"6": {
"x": 1305,
"y": 810,
"w": 150,
"h": 160,
"sign": "列1行6"
},
"7": {
"x": 1305,
"y": 970,
"w": 150,
"h": 160,
"sign": "列1行7"
},
"8": {
"x": 1305,
"y": 1130,
"w": 150,
"h": 160,
"sign": "列1行8"
}
}
}
@@ -2,7 +2,7 @@
"productName":"APEX18B",
"customerPartNumber":"DS-C9718B",
"foxconnPartNumber":"800-102754-03B",
"imgPosPath":"./imgPosTip/Test1.jpg",
"imgPosPath":"./imgPosTip/apex18.png",
"productIndex":7,
"baseX":0.00,
"baseY":0.00,
@@ -10,7 +10,7 @@
"baseRx":0.00,
"baseRy":0.00,
"baseRz":0.00,
"connectorAmout":-1,
"connectorAmout":96,
"halconAlgoIndex":0,
"cameraSetting":
{
@@ -31,7 +31,7 @@
[
{
"detResultIndex":[0],
"segModelName":"ASR-Seg.BHD",
"segModelName":"APEX-Seg.BHD",
"segNgIndex":[0,1,2],
"segGpuIndex":0,
"clsModelName":"ASR-Cls.BHD",
@@ -43,7 +43,65 @@
}
}
]
},
"productSign":
{
"1": {
"x": 1305,
"y": 10,
"w": 150,
"h": 160,
"sign": "列1行1"
},
"2": {
"x": 1305,
"y": 170,
"w": 150,
"h": 160,
"sign": "列1行2"
},
"3": {
"x": 1305,
"y": 330,
"w": 150,
"h": 160,
"sign": "列1行3"
},
"4": {
"x": 1305,
"y": 490,
"w": 150,
"h": 160,
"sign": "列1行4"
},
"5": {
"x": 1305,
"y": 650,
"w": 150,
"h": 160,
"sign": "列1行5"
},
"6": {
"x": 1305,
"y": 810,
"w": 150,
"h": 160,
"sign": "列1行6"
},
"7": {
"x": 1305,
"y": 970,
"w": 150,
"h": 160,
"sign": "列1行7"
},
"8": {
"x": 1305,
"y": 1130,
"w": 150,
"h": 160,
"sign": "列1行8"
}
}
}