暂存
This commit is contained in:
@@ -5,8 +5,8 @@
|
||||
#include <algo/simpleAlgo.h>
|
||||
cv::Mat pinHandleAiEvaluate(std::shared_ptr <detData> data, cv::Mat& src,
|
||||
handleAiModelSeg* segPtr, handleAiModelCls* clsPtr);
|
||||
bool pinHalconEvaluate(cv::Rect& Result, cv::Mat& src, cv::Mat& out, int productType, int type1, int type2);
|
||||
/////////////////HALCON////////////////////////
|
||||
bool pinHalconEvaluate(cv::Rect& Result, cv::Mat& src, cv::Mat& out, int productType);
|
||||
|
||||
//公头定位
|
||||
std::vector<handdleAI::Bbox> pinDetEvaluate(cv::Mat& src, handleAiModelManager* _handleAiModelManager)
|
||||
{
|
||||
@@ -15,45 +15,40 @@ std::vector<handdleAI::Bbox> pinDetEvaluate(cv::Mat& src, handleAiModelManager*
|
||||
_handleAiModelManager->smalDet->Evaluate(src, result);
|
||||
return result;
|
||||
}
|
||||
std::vector<cv::Rect> getpinHandleAiEvaluateRect(std::shared_ptr <detData> data, cv::Mat& src, std::vector<handdleAI::Bbox>& result)
|
||||
std::vector<handdleAI::Bbox> getpinHandleAiEvaluateRect(std::shared_ptr <detData> data, cv::Mat& src, std::vector<handdleAI::Bbox>& detResult)
|
||||
{
|
||||
//Bbox转Rect
|
||||
std::vector<cv::Rect> rectVec;
|
||||
for (auto detResult : result)
|
||||
rectVec.push_back(cv::Rect(detResult.x - detResult.w / 2, detResult.y - detResult.h / 2, detResult.w, detResult.h));
|
||||
|
||||
std::vector<handdleAI::Bbox> result;
|
||||
//计算过滤条件
|
||||
int totalWidth = 0;
|
||||
for (auto detResult : result)
|
||||
for (auto detResult : detResult)
|
||||
totalWidth += detResult.w;
|
||||
int avgWidth= totalWidth / rectVec.size();
|
||||
int avgWidth= totalWidth / detResult.size();
|
||||
|
||||
std::vector<cv::Rect> resultRectVec;
|
||||
cv::Point centerPos(src.rows / 2, src.cols / 2);
|
||||
cv::Rect targetRect(src.cols / 3, src.rows / 3, src.cols / 3, src.rows / 3);
|
||||
for (auto detResult : result)
|
||||
for (auto detData : detResult)
|
||||
{
|
||||
if ((detResult.x< targetRect.x || detResult.x > targetRect.x + targetRect.width ||
|
||||
detResult.y < targetRect.y || detResult.y > targetRect.y + targetRect.height) == false)
|
||||
if ((detData.x< targetRect.x || detData.x > targetRect.x + targetRect.width ||
|
||||
detData.y < targetRect.y || detData.y > targetRect.y + targetRect.height) == false)
|
||||
{
|
||||
resultRectVec.push_back(cv::Rect(detResult.x - detResult.w / 2, detResult.y - detResult.h / 2, detResult.w, detResult.h));
|
||||
result.push_back(detData);
|
||||
}
|
||||
}
|
||||
return resultRectVec;
|
||||
return result;
|
||||
}
|
||||
//HALCON检测
|
||||
void halconEvaluate(std::shared_ptr <detData> data, std::vector<cv::Rect>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& rect : connectorPos)
|
||||
for (auto& box : connectorPos)
|
||||
{
|
||||
cv::Mat halconMatResult;
|
||||
bool halconBoolResult = pinHalconEvaluate(rect, src, halconMatResult, data->productType, 1, 1);
|
||||
bool halconBoolResult = pinHalconEvaluate(BboxToRect(box), src, halconMatResult, box.classes);
|
||||
if (halconBoolResult == true)
|
||||
halconImgResult.push_back(halconMatResult);//HALCON检测结果
|
||||
}
|
||||
}
|
||||
bool pinHalconEvaluate(cv::Rect& Result, cv::Mat& src,cv::Mat& out,int productType,int type1,int type2)
|
||||
bool pinHalconEvaluate(cv::Rect& Result, cv::Mat& src,cv::Mat& out,int productType)
|
||||
{
|
||||
#pragma region halcon变量定义
|
||||
//测量
|
||||
@@ -83,18 +78,29 @@ bool pinHalconEvaluate(cv::Rect& Result, cv::Mat& src,cv::Mat& out,int productTy
|
||||
//[4]-ping针偏移判NG阈值(mm);
|
||||
//[5]-切图存图开关
|
||||
hv_in_Parameter.Append(3);
|
||||
hv_in_Parameter.Append(type1);
|
||||
hv_in_Parameter.Append(type2);
|
||||
hv_in_Parameter.Append(1);
|
||||
hv_in_Parameter.Append(1);
|
||||
hv_in_Parameter.Append(0.0135);
|
||||
hv_in_Parameter.Append(0.2);
|
||||
hv_in_Parameter.Append(2);
|
||||
|
||||
hv_in_ShapePath = "./halconModel";
|
||||
|
||||
|
||||
Pings_Inspection_2_Front_New(ho_in_Image, hv_in_ShapePath, hv_in_Parameter, &hv_out_Pings_X,
|
||||
&hv_out_Pings_Y, &hv_out_NG_Pings_X, &hv_out_NG_Pings_Y, &hv_out_Pings_Num,
|
||||
&hv_out_NG_Pings_Num, &hv_out_Flag_INS, &hv_out_Img_INS);
|
||||
switch (productType)
|
||||
{
|
||||
case 0:
|
||||
Pings_Inspection_2_Front_New(ho_in_Image, hv_in_ShapePath, hv_in_Parameter, &hv_out_Pings_X,
|
||||
&hv_out_Pings_Y, &hv_out_NG_Pings_X, &hv_out_NG_Pings_Y, &hv_out_Pings_Num,
|
||||
&hv_out_NG_Pings_Num, &hv_out_Flag_INS, &hv_out_Img_INS);
|
||||
break;
|
||||
case 2:
|
||||
Pings_Inspection_1_Front_New(ho_in_Image, hv_in_ShapePath, hv_in_Parameter, &hv_out_Pings_X,
|
||||
&hv_out_Pings_Y, &hv_out_NG_Pings_X, &hv_out_NG_Pings_Y, &hv_out_Pings_Num,
|
||||
&hv_out_NG_Pings_Num, &hv_out_Flag_INS, &hv_out_Img_INS);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if(hv_out_Flag_INS.D()==1)
|
||||
{
|
||||
out = HObject2Mat(hv_out_Img_INS);
|
||||
@@ -115,28 +121,28 @@ bool pinHalconEvaluate(cv::Rect& Result, cv::Mat& src,cv::Mat& out,int productTy
|
||||
//}
|
||||
}
|
||||
//缺陷检测
|
||||
void handleAiEvaluate(std::shared_ptr <detData> data, handleAiModelManager* _handleAiModelManager, std::vector<cv::Rect>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 rect : connectorPos)
|
||||
for (auto box : connectorPos)
|
||||
{
|
||||
cv::Mat handleAiMat;
|
||||
switch (data->productType)
|
||||
{
|
||||
case 0://AFront
|
||||
handleAiMat = pinHandleAiEvaluate(data, src(rect),
|
||||
handleAiMat = pinHandleAiEvaluate(data, src(BboxToRect(box)),
|
||||
_handleAiModelManager->largeSeg, _handleAiModelManager->largeCls);
|
||||
break;
|
||||
case 1://ABack
|
||||
handleAiMat = pinHandleAiEvaluate(data, src(rect),
|
||||
handleAiMat = pinHandleAiEvaluate(data, src(BboxToRect(box)),
|
||||
_handleAiModelManager->largeSeg, _handleAiModelManager->largeCls);
|
||||
break;
|
||||
case 2://B
|
||||
handleAiMat = pinHandleAiEvaluate(data, src(rect),
|
||||
handleAiMat = pinHandleAiEvaluate(data, src(BboxToRect(box)),
|
||||
_handleAiModelManager->midSeg, _handleAiModelManager->midCls);
|
||||
break;
|
||||
case 3://C
|
||||
handleAiMat = pinHandleAiEvaluate(data, src(rect),
|
||||
handleAiMat = pinHandleAiEvaluate(data, src(BboxToRect(box)),
|
||||
_handleAiModelManager->smallSeg, _handleAiModelManager->smallCls);
|
||||
break;
|
||||
}
|
||||
@@ -226,19 +232,19 @@ void ALGO_Inspection(std::shared_ptr <detData> data, handleAiModelManager* _hand
|
||||
}
|
||||
cv::Mat src = data->oriImgs[0];
|
||||
//使用det获取每个公头的位置
|
||||
std::vector<handdleAI::Bbox> pinPos= pinDetEvaluate(src, _handleAiModelManager);
|
||||
std::vector<handdleAI::Bbox> detResult = pinDetEvaluate(src, _handleAiModelManager);
|
||||
//过滤结果,获取用于handleAi/HALCON检测的rect
|
||||
std::vector<cv::Rect> detRects = getpinHandleAiEvaluateRect(data,src,pinPos);
|
||||
std::vector<handdleAI::Bbox> pinPos = getpinHandleAiEvaluateRect(data,src, detResult);
|
||||
//HANDLEAI
|
||||
std::vector<cv::Mat>aiImgResult;
|
||||
#if disableeHandleAiAlgo
|
||||
handleAiEvaluate(data, _handleAiModelManager, detRects, aiImgResult);
|
||||
#if enableHandleAiAlgo
|
||||
handleAiEvaluate(data, _handleAiModelManager, pinPos, aiImgResult);
|
||||
#endif
|
||||
data->handleAiEndTime = std::chrono::high_resolution_clock::now();
|
||||
//HALCON
|
||||
std::vector<cv::Mat>halconImgResult;
|
||||
#if disableHalconAlgo
|
||||
halconEvaluate(data, detRects, halconImgResult);
|
||||
#if enableHalconAlgo
|
||||
halconEvaluate(data, pinPos, halconImgResult);
|
||||
#endif
|
||||
data->halconEndTime = std::chrono::high_resolution_clock::now();
|
||||
//平铺结果图
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include <HalconCpp.h>
|
||||
#include <opencv.hpp>
|
||||
#include <ios>
|
||||
#include <handleAI.h>
|
||||
using namespace HalconCpp;
|
||||
struct MatchResult {
|
||||
cv::Rect boundingRect;
|
||||
@@ -639,6 +640,10 @@ static std::vector<cv::Point> contourPlusContour(const std::vector<cv::Point>& c
|
||||
return res;
|
||||
}
|
||||
|
||||
static Rect BboxToRect(handdleAI::Bbox input)
|
||||
{
|
||||
return Rect(input.x - input.w / 2, input.y - input.h / 2, input.w, input.h);
|
||||
}
|
||||
enum ngTypeEnum
|
||||
{
|
||||
OK,
|
||||
|
||||
@@ -20,8 +20,8 @@
|
||||
#define enableHandleAiModel 1
|
||||
#define disableBackEndCheck 1
|
||||
#define disableeAlgo 0
|
||||
#define disableeHalconAlgo 1
|
||||
#define disableeHandleAiAlgo 0
|
||||
#define enableHalconAlgo 1
|
||||
#define enableHandleAiAlgo 0
|
||||
|
||||
//窗口设置
|
||||
#define windowMoveFreshRate 100//窗口移动每秒的刷新率
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -8,8 +8,8 @@ class switchProductWidget : public QWidget
|
||||
Q_OBJECT
|
||||
public:
|
||||
QLabel* staticLabel = new QLabel(this);
|
||||
std::vector<QString>productName ={"asr1006","asr1009","cs9600","MDS9710"};
|
||||
std::vector<int>productCode = { 1,2,3,4};
|
||||
std::vector<QString>productName ={"asr1006","asr1009","cs9600","MDS9710","MDS9706","C9504"};
|
||||
std::vector<int>productCode = { 1,2,3,4,5,6};
|
||||
int* currentProductIndexPtr;
|
||||
QVBoxLayout* layout = new QVBoxLayout(this);
|
||||
fancyButtonText* switchBtn = new fancyButtonText(100, 60, "修改", "修改当前机型");
|
||||
|
||||
Reference in New Issue
Block a user