From 979799ec36efd3af7fb93f762182c6afdf3450a8 Mon Sep 17 00:00:00 2001
From: CPL <1179393954@qq.com>
Date: Mon, 19 Aug 2024 09:32:41 +0800
Subject: [PATCH] =?UTF-8?q?v2.0.7=20=E4=BF=AE=E5=A4=8D=E5=AF=BC=E5=87=BAex?=
=?UTF-8?q?cel=E9=A2=9C=E8=89=B2bug?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../BanBoShi/SysCtrl/SysMgr.cs | 162 +++++++++++++++++-
.../SysUI/DefectPicShow/DataQueryFrm.cs | 7 +-
2 files changed, 167 insertions(+), 2 deletions(-)
diff --git a/halftoneproject-master/BanBoShi/SysCtrl/SysMgr.cs b/halftoneproject-master/BanBoShi/SysCtrl/SysMgr.cs
index 77d32755..d09da2e6 100644
--- a/halftoneproject-master/BanBoShi/SysCtrl/SysMgr.cs
+++ b/halftoneproject-master/BanBoShi/SysCtrl/SysMgr.cs
@@ -2227,6 +2227,7 @@ namespace MaiMuAOI.SysCtrl
///
public bool StartRun(Form fatherFrm, string detectOrder, int defectCnt, string productCode, string sn, string ms, string xj)
{
+ //TestPic();
bool ret = true;
//Log("运行", $"启动自动检测流程---料号:{productCode},网版编码:{sn}");
//运行前清除过期图片文件
@@ -8960,9 +8961,21 @@ namespace MaiMuAOI.SysCtrl
}
else
{
+ //保存原始大图
+ if (confMgr.SysConfigParams.DefectBigImag.SavePath != "" && Directory.Exists(confMgr.SysConfigParams.DefectBigImag.SavePath))
+ {
+ string path = Util.CreateSubDir(confMgr.SysConfigParams.DefectBigImag.SavePath, new List { order.CreateTime.ToString("yyyyMMdd"), order.SN });
+ path += $"Defect_SN{order.SN}_I{res.index}_X{res.Xmm}_Y{res.Ymm}_C{res.defectCount}_{picName}_Err";
+ lock (ImageSaveObj)
+ {
+ res.bmp.ImWrite(path + ".bmp");
+ //OpenCvSharp.Extensions.BitmapConverter.ToBitmap(res.bmp).Save(path + ".bmp", ImageFormat.Bmp);
+ File.WriteAllText(path + ".json", JsonConvert.SerializeObject(res.informationList));
+ }
+ }
OnAutoRuning(new RunEventArgs(res.stepIndex, $"缺陷检测失败:{res.resultInfo}", new List(), 1, -1, -1, 1, true));
//OnAutoRuning(new RunEventArgs(liStatocStepIndex, $"失败:{res.resultInfo}"));
- Log($"{res.stepIndex + 1}-{res.processName}", $"缺陷检测失败:{res.resultInfo}");
+ Log($"{res.stepIndex + 1}-{res.processName}", $"缺陷检测失败:{res.modelType}-{res.thresholdsClass}-{JsonConvert.SerializeObject(res.recAreaThreshold)}-{res.resultInfo}");
//暂停 这里不能暂停,stepIndex和scannerBmpQueue队列也不对了
}
defectBmpNumResult++;
@@ -11249,6 +11262,153 @@ namespace MaiMuAOI.SysCtrl
}
}
#endregion
+
+ #region 防真
+ public void TestPic()
+ {
+ defectLib = new DefectLib();
+ if (!defectLib.start())
+ throw new Exception("外观检测核心初始化失败...");
+ defectLib.loadModelFile("E:\\CPL\\迈沐智能项目\\2023\\版博士\\版本exe\\推理&标定\\Debug\\ConfigFiles\\onnxFiles\\tw\\rj_0322_tw1.onnx");
+ //var dict = JsonConvert.DeserializeObject>();
+ //"\"dk\":0.07326923," +
+ // "\"zw\":1.70961535," +
+ // "\"xws\":488.4127," +
+ // "\"gsyc\":0.0,\"" +
+ // "qk\":488.4127," +
+ // "\"zk\":488.4127," +
+ // "\"pp\":488.4127," +
+ // "\"hs\":0.0," +
+ // "\"yx\":488.4127," +
+ // "\"xb\":0.0," +
+ // "\"gsdl\":0.0," +
+ // "\"gs\":0.0," +
+ // "\"ds\":0.0," +
+ // "\"cjdk\":0.0," +
+ // "\"na\":0.0," +
+ // "\"nb\":0.0," +
+ // "\"nc\":0.0"
+ Dictionary fty = new Dictionary();
+ fty.Add("dk", 0.07326923f);
+ fty.Add("zw", 1.70961535f);
+ fty.Add("xws", 488.4127f);
+ fty.Add("gsyc", 0.0f);
+ fty.Add("qk", 488.4127f);
+ fty.Add("zk", 488.4127f);
+ fty.Add("pp", 488.4127f);
+ fty.Add("hs", 0.0f);
+ fty.Add("yx", 488.4127f);
+ fty.Add("xb", 0.0f);
+ fty.Add("gsdl", 0.00f);
+ fty.Add("gs", 0.00f);
+ fty.Add("ds", 0.00f);
+ fty.Add("cjdk", 0.00f);
+ fty.Add("na", 0.00f);
+ fty.Add("nb", 0.00f);
+ fty.Add("nc", 0.00f);
+
+ //fty.Add("dk", 0.07326923f);
+ //fty.Add("dk", 0.07326923f);
+ Mat mt = new Mat("C:\\Users\\fang\\Desktop\\12\\Defect_SNCC-CDTW-A-325-L-240814-0012-1_I34_X220.3794_Y-765.5828_C0_TW182M-SP1-10B-000-01(TW182J210F) A0_Err.bmp");
+ defectLib.add(new DefectTask()
+ {
+ stepIndex = 0,
+ processName = "tt",
+ modelType = "rj",
+ drawingPagePath = "5454",
+ //index = defectBmpNum++,
+ index = 0,
+ bmp = mt.Clone(),
+ Xmm = 1,
+ Ymm = 2,
+ cut_size = new System.Drawing.Size(592, 532),
+ resize = new System.Drawing.Size(224, 224),
+ thresholds = 0.4f,
+ thresholdsClass = "0.89,0.3,0.3,0.9,0.9,0.3,0.3,0.3,0.3,0.3,0.3,0.8,0.8,0.3,0.3,0.3",
+ recAreaThreshold = fty, //qxName,面积; qxName,面积; qxName,面积;
+ finishEvent = (res) =>
+ {
+ if (res.isSucceed)
+ {
+
+ //OnAutoRuning(new RunEventArgs(liStatocStepIndex,
+ // $"源图索引:{res.index},缺陷数:{res.defectCount},处理时间(ms):{string.Join("->", res.stopwatch.Select(i => i.ToString()).ToArray())}"));
+ Log($"{res.stepIndex + 1}-{res.processName}", $"缺陷检测完成(源图索引:{res.index}),缺陷数:{res.defectCount},处理时间(ms):{string.Join("->", res.stopwatch.Select(i => i.ToString()).ToArray())}");
+ string path;
+ if (res.defectCount > 0)
+ {
+ //UI显示小图 (含统计缺陷类型数量)
+ AllDefectCount += res.informationList.Count;
+ if (res.defectInfor2RestorationDeskPage != null && res.defectInfor2RestorationDeskPage.Count > 0)
+ {
+ Log($"{res.stepIndex + 1}-{res.processName}", $"转换后坐标数据:{JsonConvert.SerializeObject(res.defectInfor2RestorationDeskPage)}");
+ if (order.DefectInfoList == null)
+ order.DefectInfoList = new List();
+#if false
+ foreach (var item in res.defectInfor2RestorationDeskPage)
+ order.DefectInfoList.Add(new DefectInfo()
+ {
+ Type = 0,
+ Code = item[3],
+ X = double.Parse(item[1]),
+ Y = double.Parse(item[2]),
+ ZXD = double.Parse(item[4]),
+ Index = int.Parse(item[0]),
+ Area = item.Count>5?double.Parse(item[5]):0,
+ ModifyUserCode = UserMgr.LoginUser.Code,
+ CreateUserCode = UserMgr.LoginUser.Code,
+ });
+#else
+ for (int i = 0; i < res.defectInfor2RestorationDeskPage.Count; i++)
+ {
+ double n;
+ order.DefectInfoList.Add(new DefectInfo()
+ {
+ Type = 0,
+ Code = res.defectInfor2RestorationDeskPage[i][3],
+ X = double.Parse(res.defectInfor2RestorationDeskPage[i][1]),
+ Y = double.Parse(res.defectInfor2RestorationDeskPage[i][2]),
+ ZXD = double.Parse(res.defectInfor2RestorationDeskPage[i][4]),
+ Index = int.Parse(res.defectInfor2RestorationDeskPage[i][0]),
+ Area = ((res.defectInfor2RestorationDesk[i].Count > 5) && (double.TryParse(res.defectInfor2RestorationDesk[i][5], out n))) ? double.Parse(res.defectInfor2RestorationDesk[i][5]) : 0,
+ ModifyUserCode = UserMgr.LoginUser.Code,
+ CreateUserCode = UserMgr.LoginUser.Code,
+ });
+ }
+
+#endif
+ }
+ }
+ else//没有缺陷
+ {
+
+ }
+ }
+ else
+ {
+
+ //OnAutoRuning(new RunEventArgs(liStatocStepIndex, $"失败:{res.resultInfo}"));
+ Log($"{res.stepIndex + 1}-{res.processName}", $"缺陷检测失败:{res.modelType}-{res.thresholdsClass}-{JsonConvert.SerializeObject(res.recAreaThreshold)}-{res.resultInfo}");
+ //暂停 这里不能暂停,stepIndex和scannerBmpQueue队列也不对了
+ }
+ defectBmpNumResult++;
+ foreach (var item in res.bmps_cut)
+ item.Dispose();
+ res.bmp.Dispose();
+ res.bmp = null;
+ res.bmps_tag = null;
+ if (res.bmpCompress != null)
+ {
+ res.bmpCompress.Dispose();
+ res.bmpCompress = null;
+ }
+ System.GC.Collect();
+ }
+ });
+
+ Thread.Sleep(600000);
+ }
+ #endregion
}
#region 系统事件
diff --git a/halftoneproject-master/BanBoShi/SysUI/DefectPicShow/DataQueryFrm.cs b/halftoneproject-master/BanBoShi/SysUI/DefectPicShow/DataQueryFrm.cs
index 3f73de80..4fb7ff6b 100644
--- a/halftoneproject-master/BanBoShi/SysUI/DefectPicShow/DataQueryFrm.cs
+++ b/halftoneproject-master/BanBoShi/SysUI/DefectPicShow/DataQueryFrm.cs
@@ -30,11 +30,13 @@ using DataTable = System.Data.DataTable;
using Point = System.Drawing.Point;
using Excel = Microsoft.Office.Interop.Excel;
using Microsoft.Office.Interop.Excel;
+using Service;
namespace MaiMuAOI.SysUI.DefectPicShow
{
public partial class DataQueryFrm : Form
{
+ ProductService PdtService = new ProductService();
Service.OrderService OrderService = new Service.OrderService();
List QueryOrders = new List();
List QueryAllOrders = new List();
@@ -646,7 +648,10 @@ namespace MaiMuAOI.SysUI.DefectPicShow
{
tempd = item.SizeDefectInfoList.Where(q => q.StepName == tdata.Key).ToList();
- var tempstep = item.StepInfo.ProcessList.Where(q => q.ProcessName == tdata.Key).FirstOrDefault();
+ var md = PdtService.GetModelNav(item.ProductId);
+ var tempstep = md.StepInfo.ProcessList.Where(q => q.ProcessName == tdata.Key).FirstOrDefault();
+
+ var tempstep22 = item.StepInfo.ProcessList.Where(q => q.ProcessName == tdata.Key).FirstOrDefault();
if (tempstep != null)
{
JObject processParam = JObject.Parse(tempstep.ProcessParams);