From 61a9d5230e107c1001249d5570557924120393b5 Mon Sep 17 00:00:00 2001 From: YZJ Date: Thu, 27 Jun 2024 09:22:31 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=9C=80=E6=96=B0=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../HisenceYoloDetection.csproj | 1 + HisenceYoloDetection/MLResultDisplay.cs | 216 +++++ HisenceYoloDetection/MainForm.Designer.cs | 38 +- HisenceYoloDetection/MainForm.cs | 902 +++++++++++++++--- HisenceYoloDetection/ManagerModelHelper.cs | 454 ++++----- HisenceYoloDetection/MelsecPLCTCPDriver.cs | 2 +- HisenceYoloDetection/PaddleOcrModel.cs | 5 +- HisenceYoloDetection/PaddleOcrModelCountry.cs | 64 +- HisenceYoloDetection/SimboObjectDetection.cs | 2 + HisenceYoloDetection/SimboVisionMLBase.cs | 11 +- HisenceYoloDetection/StaticHelper.cs | 2 + HisenceYoloDetection/VirtualPLCTCPDriver.cs | 2 +- HisenceYoloDetection/yyb.douyin.ico | Bin 2880 -> 0 bytes 13 files changed, 1240 insertions(+), 459 deletions(-) create mode 100644 HisenceYoloDetection/MLResultDisplay.cs delete mode 100644 HisenceYoloDetection/yyb.douyin.ico diff --git a/HisenceYoloDetection/HisenceYoloDetection.csproj b/HisenceYoloDetection/HisenceYoloDetection.csproj index 8d806fa..3727869 100644 --- a/HisenceYoloDetection/HisenceYoloDetection.csproj +++ b/HisenceYoloDetection/HisenceYoloDetection.csproj @@ -12,6 +12,7 @@ + diff --git a/HisenceYoloDetection/MLResultDisplay.cs b/HisenceYoloDetection/MLResultDisplay.cs new file mode 100644 index 0000000..36b2c2e --- /dev/null +++ b/HisenceYoloDetection/MLResultDisplay.cs @@ -0,0 +1,216 @@ + +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + + +namespace HisenceYoloDetection +{ + public class DetectResultDisplay + { + //深度学习 显示结果 + private List mlResultList = null; + public List MLResultList + { + get => mlResultList; + set + { + if (mlResultList != value) + { + mlResultList = value; + } + } + } + + + + string DisplayTxt = ""; + Bitmap ResultImage = null; + PointF StartPoint = new PointF(); + Brush FontBrush = new SolidBrush(Color.Green); + Pen DetectResultRectPen = new Pen(new SolidBrush(Color.Green)); + + public Font Font { get; private set; } + ResultState ResultState = ResultState.DetectNG; + + Font DetectResultFont = new Font(new FontFamily("Tahoma"), 15, GraphicsUnit.World); + + public int ImageWidth { get; set; } + public int ImageHeight { get; set; } + public DetectResultDisplay() { } + + //public DetectResultDisplay(NetResult result, List specs, ResultState resultState, int imageWidth) + //{ + // ImageWidth = imageWidth; + + // ResultState = resultState; + + // displayTxt = resultState.ToString() + "\r\n"; + // if (resultState != ResultState.OK) + // { + // fontBrush = new SolidBrush(Color.Red); + // } + + // NetResult = result; + // SpecList = specs; + + // Font = new Font(new FontFamily("Tahoma"), 35 * ImageWidth / 1400, GraphicsUnit.World); + // startPoint = new PointF(150 * ImageWidth / 1400, 150 * ImageWidth / 1400); + //} + + public DetectResultDisplay(List ResultDetails, Bitmap resultImage, string displayTxt) + { + ImageWidth = resultImage.Width; + ImageHeight = resultImage.Height; + var longSide = ImageWidth > ImageHeight ? ImageWidth : ImageHeight; + + MLResultList = ResultDetails; + + ResultImage = resultImage; + DisplayTxt = displayTxt; + if (ResultState != ResultState.OK) + { + FontBrush = new SolidBrush(Color.Red); + DetectResultRectPen = new Pen(new SolidBrush(Color.Red)); + } + Font = new Font(new FontFamily("Tahoma"), 35 * longSide / 1400, GraphicsUnit.World); + DetectResultFont = new Font(new FontFamily("Tahoma"), 25 * longSide / 1400, GraphicsUnit.World); + StartPoint = new PointF(100 * ImageWidth / 1400, 100 * ImageHeight / 1400); + } + + public object Clone() + { + return null; + } + + + public void Draw(Graphics g) + { + //画检测结果图 + if (ResultImage != null && ResultState != ResultState.OK) + { + g.DrawImage(ResultImage, new Point(0, 0)); + } + //画文字 + if (!string.IsNullOrWhiteSpace(DisplayTxt)) + { + g.DrawString(DisplayTxt, Font, FontBrush, StartPoint); + } + //画外接矩形+label 深度学习 + if (MLResultList != null && MLResultList.Count > 0) + { + MLResultList.ForEach(d => + { + g.DrawRectangle(DetectResultRectPen, d.Rect); + + string locationTxt = $"{d.LabelDisplay}"; + var locationX = d.Rect.X; + var locationY = d.Rect.Y <= 20 ? d.Rect.Y + 20 : d.Rect.Y - 20; + g.DrawString(locationTxt, DetectResultFont, FontBrush, locationX, locationY); + }); + } + //画spec信息 + + //if (DetectResult != null && DetectResult.NetResult?.DetectDetails?.Count > 0) + //{ + // DetectResult.NetResult?.DetectDetails.ForEach(d => + // { + // g.DrawRectangle(defectRectPen, d.Rect); + + // string locationTxt = $"{d.Rect.X},{d.Rect.Y}"; + // g.DrawString(locationTxt, defectFont, fontBrush, d.Rect.X, d.Rect.Y - 5); + // }); + //} + + //float fontHeight = g.MeasureString(displayTxt, Font).Height; + //startPoint.Y += fontHeight * 1.2f; + + //var defects = DetectResult.NetResult?.DetectDetails; + //if (defects != null && defects.Count > 0) + //{ + // defects.ForEach(d => + // { + // g.DrawString($"{d.ClassName} X:{d.Rect.X.ToString("f2")} Y:{d.Rect.Y.ToString("f2")} S:{d.Area}", Font, d.FinalResult == EnumHelper.ResultState.OK ? fontBrushOK : fontBrushNG, startPoint); + + // startPoint.Y += fontHeight; + // }); + //} + + //DetectResult.Specs.ForEach(s => + //{ + // g.DrawString($"{s.Code}:{(s.ActualValue ?? 0).ToString("f2")}", Font, s.MeasureResult ?? false == true ? fontBrushOK : fontBrushNG, startPoint); + + // startPoint.Y += fontHeight; + //}); + } + + public string GetDisplayText() + { + return ""; + } + + + } + + public class RectResultDisplay + { + ResultState ResultState = ResultState.DetectNG; + public string DisplayTxt = ""; + Color FillColor = Color.Lime; + int FontSize = 15; + RectangleF Rect = new RectangleF(); + bool IsFilled = false; + + public RectResultDisplay() { } + + public RectResultDisplay(ResultState _resultState, RectangleF _rect, string _displayTxt, Color _fillColor, bool _isFilled, int _fontSize) + { + ResultState = _resultState; + Rect = _rect; + DisplayTxt = _displayTxt; + FillColor = _fillColor; + IsFilled = _isFilled; + FontSize = _fontSize; + } + + public object Clone() + { + RectResultDisplay rect = new RectResultDisplay(); + + rect.ResultState = ResultState; + rect.Rect = Rect; + rect.DisplayTxt = DisplayTxt; + rect.FillColor = FillColor; + rect.FontSize = FontSize; + rect.IsFilled = IsFilled; + + return rect; + } + + public void Draw(Graphics g) + { + g.DrawRectangle(new Pen(FillColor, 1), Rect.X, Rect.Y, Rect.Width, Rect.Height); + + if (IsFilled) + { + g.FillRectangle(new SolidBrush(Color.FromArgb(20, FillColor)), Rect); + } + + Font font = new Font("Tahoma", FontSize); + var txtSize = g.MeasureString(DisplayTxt, font); + + g.DrawString(DisplayTxt, font, new SolidBrush(FillColor), (float)(Rect.X + Rect.Width / 2.0 - txtSize.Width / 2.0), Rect.Y + Rect.Height + 5); + } + + public string GetDisplayText() + { + return $"{ResultState} {DisplayTxt} ({Rect.X},{Rect.Y},{Rect.Width},{Rect.Height})"; + } + + + } +} diff --git a/HisenceYoloDetection/MainForm.Designer.cs b/HisenceYoloDetection/MainForm.Designer.cs index d49c6ff..c244e44 100644 --- a/HisenceYoloDetection/MainForm.Designer.cs +++ b/HisenceYoloDetection/MainForm.Designer.cs @@ -230,7 +230,7 @@ tabPage2.Location = new Point(4, 26); tabPage2.Name = "tabPage2"; tabPage2.Padding = new Padding(3); - tabPage2.Size = new Size(1319, 765); + tabPage2.Size = new Size(1276, 765); tabPage2.TabIndex = 1; tabPage2.Text = "PLC"; tabPage2.UseVisualStyleBackColor = true; @@ -288,9 +288,9 @@ // // txtSetValue // - txtSetValue.Location = new Point(670, 78); + txtSetValue.Location = new Point(574, 78); txtSetValue.Name = "txtSetValue"; - txtSetValue.Size = new Size(100, 23); + txtSetValue.Size = new Size(196, 23); txtSetValue.TabIndex = 14; // // groupBox4 @@ -686,11 +686,11 @@ XZerorbx.Text = "X归零"; XZerorbx.TextAlign = ContentAlignment.MiddleCenter; XZerorbx.UseVisualStyleBackColor = true; - XZerorbx.Click += radioButton1_Click; + XZerorbx.Click += XZerorbx_Click; // // PLCPostion // - PLCPostion.Location = new Point(6, 258); + PLCPostion.Location = new Point(6, 266); PLCPostion.Name = "PLCPostion"; PLCPostion.Size = new Size(97, 101); PLCPostion.TabIndex = 2; @@ -828,7 +828,7 @@ tabPage1.Location = new Point(4, 26); tabPage1.Name = "tabPage1"; tabPage1.Padding = new Padding(3); - tabPage1.Size = new Size(1319, 765); + tabPage1.Size = new Size(1276, 765); tabPage1.TabIndex = 0; tabPage1.Text = "相机"; tabPage1.UseVisualStyleBackColor = true; @@ -1105,7 +1105,7 @@ tabControl1.Location = new Point(0, 0); tabControl1.Name = "tabControl1"; tabControl1.SelectedIndex = 0; - tabControl1.Size = new Size(1327, 795); + tabControl1.Size = new Size(1284, 795); tabControl1.TabIndex = 0; // // tabPage5 @@ -1113,7 +1113,7 @@ tabPage5.Controls.Add(panel4); tabPage5.Location = new Point(4, 26); tabPage5.Name = "tabPage5"; - tabPage5.Size = new Size(1319, 765); + tabPage5.Size = new Size(1276, 765); tabPage5.TabIndex = 3; tabPage5.Text = "流程"; tabPage5.UseVisualStyleBackColor = true; @@ -1124,7 +1124,7 @@ panel4.Dock = DockStyle.Fill; panel4.Location = new Point(0, 0); panel4.Name = "panel4"; - panel4.Size = new Size(1319, 765); + panel4.Size = new Size(1276, 765); panel4.TabIndex = 0; // // panel5 @@ -1135,7 +1135,7 @@ panel5.Dock = DockStyle.Top; panel5.Location = new Point(0, 0); panel5.Name = "panel5"; - panel5.Size = new Size(1319, 762); + panel5.Size = new Size(1276, 762); panel5.TabIndex = 0; // // DefetShow5 @@ -1471,7 +1471,7 @@ tabPage3.Controls.Add(panel2); tabPage3.Location = new Point(4, 26); tabPage3.Name = "tabPage3"; - tabPage3.Size = new Size(1319, 765); + tabPage3.Size = new Size(1276, 765); tabPage3.TabIndex = 4; tabPage3.Text = "录入新型号"; tabPage3.UseVisualStyleBackColor = true; @@ -1641,9 +1641,9 @@ // // QueryoneBtn // - QueryoneBtn.Location = new Point(896, 245); + QueryoneBtn.Location = new Point(838, 222); QueryoneBtn.Name = "QueryoneBtn"; - QueryoneBtn.Size = new Size(93, 23); + QueryoneBtn.Size = new Size(115, 53); QueryoneBtn.TabIndex = 25; QueryoneBtn.Text = "条件查询"; QueryoneBtn.UseVisualStyleBackColor = true; @@ -1668,9 +1668,9 @@ // // InsertBtn // - InsertBtn.Location = new Point(896, 155); + InsertBtn.Location = new Point(838, 92); InsertBtn.Name = "InsertBtn"; - InsertBtn.Size = new Size(93, 23); + InsertBtn.Size = new Size(115, 47); InsertBtn.TabIndex = 22; InsertBtn.Text = "插入"; InsertBtn.UseVisualStyleBackColor = true; @@ -1796,9 +1796,9 @@ // // queryALLBtn // - queryALLBtn.Location = new Point(896, 196); + queryALLBtn.Location = new Point(838, 157); queryALLBtn.Name = "queryALLBtn"; - queryALLBtn.Size = new Size(93, 23); + queryALLBtn.Size = new Size(115, 59); queryALLBtn.TabIndex = 2; queryALLBtn.Text = "查询全部"; queryALLBtn.UseVisualStyleBackColor = true; @@ -1827,7 +1827,7 @@ richTextBox1.Dock = DockStyle.Bottom; richTextBox1.Location = new Point(0, 801); richTextBox1.Name = "richTextBox1"; - richTextBox1.Size = new Size(1327, 176); + richTextBox1.Size = new Size(1284, 176); richTextBox1.TabIndex = 1; richTextBox1.Text = ""; // @@ -1840,7 +1840,7 @@ // AutoScaleDimensions = new SizeF(7F, 17F); AutoScaleMode = AutoScaleMode.Font; - ClientSize = new Size(1327, 977); + ClientSize = new Size(1284, 977); Controls.Add(richTextBox1); Controls.Add(tabControl1); Icon = (Icon)resources.GetObject("$this.Icon"); diff --git a/HisenceYoloDetection/MainForm.cs b/HisenceYoloDetection/MainForm.cs index 1961bf4..dc3ff59 100644 --- a/HisenceYoloDetection/MainForm.cs +++ b/HisenceYoloDetection/MainForm.cs @@ -1,10 +1,12 @@ using DVPCameraType; using Microsoft.VisualBasic.Logging; +using Newtonsoft.Json.Linq; using OpenCvSharp; using OpenCvSharp.Dnn; using OpenCvSharp.Extensions; using OpenCvSharp.XFeatures2D; using System; +using System.ComponentModel; using System.Data; using System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder; using System.Data.SQLite; @@ -12,12 +14,15 @@ using System.Diagnostics; using System.Diagnostics.Eventing.Reader; using System.Drawing; using System.Drawing.Drawing2D; +using System.IO; +using System.Linq; using System.Net; using System.Numerics; using System.Text; using System.Text.RegularExpressions; using System.Windows.Forms; using XKRS.Device.SimboVision.SimboHelper; +using XKRS.UI; using static HisenceYoloDetection.MainForm; using static System.Runtime.InteropServices.JavaScript.JSType; using static System.Windows.Forms.VisualStyles.VisualStyleElement; @@ -31,10 +36,15 @@ namespace HisenceYoloDetection public MainForm() { InitializeComponent(); + this.Load += (s, e) => + { + // OnDetectionDone -= Defet_OnDetectionDone; + //OnDetectionDone += Defet_OnDetectionDone; + }; } MGSCameraDriver Cam1 = new MGSCameraDriver(); MGSCameraDriver Cam2 = new MGSCameraDriver(); - + public static string RootPath = "D:\\Hisence\\SQLImages\\"; // HikCameraDriver Cam1 = new HikCameraDriver(); //HikCameraDriver Cam2 = new HikCameraDriver(); @@ -90,6 +100,7 @@ namespace HisenceYoloDetection string Cam1OnePath = ""; string Cam1TwoPath = ""; string ModelChangePath = ""; + /// /// 鿴б /// @@ -145,7 +156,7 @@ namespace HisenceYoloDetection } System.Timers.Timer SpeedTimer = new System.Timers.Timer(); System.Timers.Timer PostionTimer = new System.Timers.Timer(); - + System.Timers.Timer t; public delegate void MyDelegateUI(); //ί MyDelegateUI myDelegateUI; //ίж @@ -169,6 +180,7 @@ namespace HisenceYoloDetection } + /// /// /// @@ -177,8 +189,15 @@ namespace HisenceYoloDetection private void MainForm_Load(object sender, EventArgs e) { + string s1 = "ECO4060##Coton20##Rapide15mns"; + string s2 = "Eco4060##Coton20##Rapide15mns"; + bool st = ManagerModelHelper.StrMatch2(s1, s2); + //Rect rect = new Rect(0, 0, 0, 0); + //string path2 = "D:\\Hisence\\SQLImages\\W80WXWJ060539V0WW80WX120293\\2\\W80WXWJ060539V0WW80WX120293result.jpg"; + //Mat cameraMat = Cv2.ImRead(path2); + //bool ifg = CheckDiffSciHelper.CheckDiffSci(path2, cameraMat, rect, rect, false, "D://Hisence//Test"); string vBarPath = "D:\\Hisence\\\\Lp\\202452414231.jpg"; string vCam1OnePath = "D:\\Hisence\\\\Lp\\001.jpg"; @@ -186,9 +205,10 @@ namespace HisenceYoloDetection string vModelChangePath = "D:\\Hisence\\config\\chinese.json"; string LablePathstr = "D:\\Hisence\\ClassName.txt";//ǩ· string LablePathButtonstr = "D:\\Hisence\\ClassNameButton.txt";//ǩ· - //Mat cameraMat = Cv2.ImRead(vCam1TwoPath); - // canvas1.ImagePath = vCam1TwoPath; - // DefetShow.ImaMAt = cameraMat; + // Mat cameraMat = Cv2.ImRead(vCam1TwoPath); + //Defet_OnDetectionDone(cameraMat, DefetShow1); + // canvas1.ImagePath = vCam1TwoPath; + // DefetShow.ImaMAt = cameraMat; if (File.Exists(LablePathButtonstr) && File.Exists(vBarPath) && File.Exists(vCam1OnePath) && File.Exists(vCam1TwoPath) && File.Exists(vModelChangePath)) { @@ -220,6 +240,11 @@ namespace HisenceYoloDetection paddleOcrModelCountry.Load(CountryStr, "CPU"); paddleOcrModel.Load(CountryStr, "CPU"); IfChangeLanguage = CountryStr; + + MLRequest req = new MLRequest(); + string path = "D:\\Hisence\\\\12\\202461417146451.jpg"; + req.currentMat = Cv2.ImRead(path); + string BarT = DetMachineBar(ref req); // StartDecBtn.Enabled = false; @@ -239,6 +264,80 @@ namespace HisenceYoloDetection OnSpeedShow();//߳̿ٶʾڽ OnPostionShow();//߳̿λʾڽ + //t = new System.Timers.Timer(10000);//ʵTimer࣬üʱΪ10000룻 + //t.Elapsed += new System.Timers.ElapsedEventHandler(Execute);//ʱʱִ¼ + //t.AutoReset = true;//ִһΣfalseһֱִ(true) + //t.Enabled = true;//ǷִSystem.Timers.Timer.Elapsed¼ + //t.Start(); //ʱ + + } + public void Execute(object source, System.Timers.ElapsedEventArgs e) + { + t.Stop(); //ȹرնʱ + //melsecPLCTCPDriver.WriteInt("548", 1); + //Thread.Sleep(1000); + //melsecPLCTCPDriver.WriteInt("548", 0); + //myLog("д" + WriteAdress.Text.ToString() + "", DateTime.Now); + MessageBox.Show("OK!"); + t.Start(); //ִϺٿ + } + + + private string DetMachineBar(ref MLRequest req) + { + + // req.currentMat = Cv2.ImRead("D:\\Hisence\\\\Lp\\202453015229201.jpg"); + MLResult mL = paddleOcrModelCountry.RunInferenceFixed(req); + // DisplayResult(mL); + + //ʶַ + string IOcrBAr = string.Empty; + string[] BarListOne = new string[10]; + int Ypos = 0; + int mid = 9999999; + for (int v = 0; v < Enumerable.Count(mL.ResultDetails); v++) + { + if (mL.ResultDetails.Count() > 0) + { + int Pos = mL.ResultDetails[v].Rect.Y; + if (Pos < mid) + { + mid = Pos; + } + + } + + } + + for (int v = 0; v < Enumerable.Count(mL.ResultDetails); v++) + { + if (mL.ResultDetails.Count() > 0) + { + int Pos = mL.ResultDetails[v].Rect.Y; + + + + if (Math.Abs(Pos - mid) < 80) + { + string iv = mL.ResultDetails[v].LabelDisplay; + string result = Regex.Replace(iv, "[ \\[ \\] \\^ \\-_*DD(^)$%~!@#$&%+=<>!??:?`,.;/\"-]", ""); + + IOcrBAr += result; + + + } + else + { + continue; + } + + + } + + } + //һΪBAr + return IOcrBAr; + } private void initAll() //Ϣ { @@ -448,7 +547,8 @@ namespace HisenceYoloDetection int TimesCalled = 0; Bitmap OKbitmap = new Bitmap("OK.jpg"); Bitmap NGbitmap = new Bitmap("NG.jpg"); - + Mat OKMat = Cv2.ImRead("OK.jpg"); + Mat NGMat = Cv2.ImRead("OK.jpg"); /// /// ̵߳ /// @@ -566,7 +666,7 @@ namespace HisenceYoloDetection //OCRʶüͼƬ MLRequest reqcut = new MLRequest(); reqcut.currentMat = matroi.Clone(); - MLResult mLcut = IOcrModel.RunInferenceFixed(reqcut); + MLResult mLcut = paddleOcrModel.RunInference(reqcut); for (int j = 0; j < mLcut.ResultDetails.Count; j++) @@ -909,8 +1009,34 @@ namespace HisenceYoloDetection }); } - int YPos = 6715; - int ZPos = 18857; + #region ʾ + /// + /// ʾ + /// + /// + private void DisplayResult(MLResult detectResult) + { + string displayTxt = ""; + detectResult.ResultDetails.ForEach(d => + { + displayTxt += $"{d.LabelName} score:{d.Score.ToString("f2")} area:{d.Area.ToString("f2")}\r\n"; + }); + + var resultMask = detectResult.ResultMap; + //Clone(new Rectangle(0, 0, detectResult.VisionImageSet.DetectionResultImage.Width, detectResult.VisionImageSet.DetectionResultImage.Height), detectResult.VisionImageSet.DetectionResultImage.PixelFormat); + + // List detectionResultShapes = new List(detectResult.DetectionResultShapes); + DetectResultDisplay resultDisplay = new DetectResultDisplay(detectResult.ResultDetails, resultMask, displayTxt); + // detectionResultShapes.Add(resultDisplay); + + Graphics g = Graphics.FromImage(resultMask); + resultDisplay.Draw(g); + // resultMask.Save("D://save.png"); + // var resultMap = GetResultImage(resultMask, detectionResultShapes); + } + #endregion + int YPos = 8715; + int ZPos = 25000; /// /// ϴ»544Ƿ񴥷䴫 /// @@ -959,7 +1085,7 @@ namespace HisenceYoloDetection //if (bBarTriger) { - +#if true myLog("һβɼͼ", DateTime.Now); //ƶģ βĵַ Ƿǰƶ MoveToP(5815, YPos, ZPos); @@ -988,7 +1114,7 @@ namespace HisenceYoloDetection // Thread.Sleep(500); Cam1.SnapshotCount = 0; Cam1.Snapshot(); - IfCam2Triger = true; + Cam2.SnapshotCount = 0; Cam2.Snapshot(); myLog("ڶβɼͼ", DateTime.Now); @@ -1013,6 +1139,65 @@ namespace HisenceYoloDetection iNum0 = 0; iNum1 = 0; break; +#else + myLog("һβɼͼ", DateTime.Now); + //ƶģ βĵַ Ƿǰƶ + //MoveToP(5815, YPos, ZPos); + Thread.Sleep(1000);//ɾ + + + + //List DisList = new List(); + //for (int i = 0; i < 5; i++) + //{ + // int m600 = melsecPLCTCPDriver.ReadInt("600"); + // DisList.Add(m600); + //} + //DisList.Remove(DisList.Max()); + //DisList.Remove(DisList.Min()); + //// ʣֵƽ + //double average = DisList.Average(); + //double disreal = average * (-0.54054) + 1324.3232; + ////-׼=Ҫƶľ + //double dismove = disreal - 876; + //if (dismove > 0 && dismove < 4000) + //{ + // MoveToP(5815, YPos, ZPos + (int)(dismove)); + //} + Thread.Sleep(1000);//ɾ + // Thread.Sleep(500); + Cam1.SnapshotCount = 0; + Cam1.Snapshot(); + + // Cam2.SnapshotCount = 0; + //Cam2.Snapshot(); + IfCam2Triger = true; + myLog("ڶβɼͼ", DateTime.Now); + //if (xKNow != null) + //{ + // MoveToP(xKNow.MoveTwoX, xKNow.MoveTwoY, xKNow.MoveTwoZ); + //} + //currentXP = 54964; + Thread.Sleep(2000);//ɾ + + //MoveToP(51043, YPos, ZPos + (int)(dismove)); + Cam1.Snapshot(); + //MoveToP(5815, YPos, ZPos); + //if (xKNow != null) + //{ + // MoveToP(xKNow.MoveX, xKNow.MoveY, xKNow.MoveZ); + //} + myLog("ɼͼɹ", DateTime.Now); + //ģ鸴λ + + bTriger = true;//Խмʶ + bBarTriger = false;//Բ + iNum0 = 0; + iNum1 = 0; + break; + +#endif + } @@ -1043,12 +1228,13 @@ namespace HisenceYoloDetection { if (ifPlcHeart == 1) { + txtSetValue.Text = "PLCʧ" + " ʱ䣺" + DateTime.Now.ToString(); myLog("PLCʧ", DateTime.Now); - + PLCPowerON.BackColor = Color.Red; } else { - + PLCPowerON.BackColor = Color.Green; } } @@ -1069,10 +1255,10 @@ namespace HisenceYoloDetection //һ if (SnapshotCount == 1) { - // Mat mat = Cv2.ImRead("D:\\Hisence\\1\\202451716511.jpg"); - //Mat mat = Cv2.ImRead("D:\\Hisence\\\\Lp\\2024517171911.jpg"); - //Cam1ImgOne = mat; - Cam1ImgOne = cameraMat; + + + // Cam1ImgOne = Cv2.ImRead("D:\\Hisence\\\\1\\202461817464661.jpg"); ; + Cam1ImgOne = cameraMat; IfCam1OneTriger = true; originMatShow.Image = cameraMat.ToBitmap(); //pictureBox1.Image = cameraMat.ToBitmap(); @@ -1082,18 +1268,17 @@ namespace HisenceYoloDetection //ڶ if (SnapshotCount == 2) { - // Mat mat = Cv2.ImRead("D:\\Hisence\\1\\2024517164541.jpg"); - //Mat mat = Cv2.ImRead("D:\\Hisence\\\\Lp\\002.jpg"); + //Mat mat = Cv2.ImRead("D:\\Hisence\\\\1\\002.jpg"); //Cam1ImgTwo = mat; - Cam1ImgTwo = cameraMat; + Cam1ImgTwo = cameraMat; IfCam1TwoTriger = true; originMatShow2.Image = cameraMat.ToBitmap(); - //pictureBox1.Image = cameraMat.ToBitmap(); + } - CamShow1.ImaMAt = cameraMat; + //CamShow1.ImaMAt = cameraMat; cameraMat.ImWrite(fitImageFolder + dt.Year.ToString() + dt.Month.ToString() + dt.Day.ToString() + dt.Hour.ToString() + dt.Minute.ToString() + dt.Millisecond.ToString() + "1.jpg"); } @@ -1115,15 +1300,9 @@ namespace HisenceYoloDetection // Mat mat = Cv2.ImRead("F:\\ϴ»\\cam1\\2024517161641.jpg"); Cam2ImgShowBar = cameraMat; IfCam2Triger = true; - originMat2Show.BackgroundImage = cameraMat.ToBitmap(); - //originMat2Show.Image = cameraMat.ToBitmap(); - //pictureBox1.Image = cameraMat.ToBitmap(); + originMat2Show.Image = cameraMat.ToBitmap(); - - - - - CamShow2.ImaMAt = cameraMat; + // CamShow2.ImaMAt = cameraMat; cameraMat.ImWrite(fitImageFolder + dt.Year.ToString() + dt.Month.ToString() + dt.Day.ToString() + dt.Hour.ToString() + dt.Minute.ToString() + dt.Millisecond.ToString() + "1.jpg"); } @@ -1145,28 +1324,14 @@ namespace HisenceYoloDetection //2һ if (IfCam2Triger) { - + IfCam2Triger = false; //OCRʶ MLRequest req = new MLRequest(); req.currentMat = Cam2ImgShowBar; - // req.currentMat = Cv2.ImRead("D:\\Hisence\\\\Lp\\202453015229201.jpg"); - MLResult mL = paddleOcrModelCountry.RunInferenceFixed(req); + //req.currentMat = Cv2.ImRead("D:\\Hisence\\\\1\\bar.jpg"); + //ʶַ - string IOcrBAr = ""; - for (int v = 0; v < Enumerable.Count(mL.ResultDetails); v++) - { - if (mL.ResultDetails.Count() > 0) - { - if (mL.ResultDetails.Count() > 0) - { - string iv = mL.ResultDetails[0].LabelDisplay; - string result = Regex.Replace(iv, "[ \\[ \\] \\^ \\-_*DD(^)$%~!@#$&%+=<>!??:?`,.;/\"-]", ""); - - IOcrBAr = result; - } - } - - } + string IOcrBAr = DetMachineBar(ref req); DateTime dt = DateTime.Now; using (StreamWriter sw = new StreamWriter("D://Hisence//logsBar.log", true)) { @@ -1175,7 +1340,7 @@ namespace HisenceYoloDetection sw.WriteLine(IOcrBAr + "\n"); sw.Flush(); } - IOcrBAr = "BatchW81XBModelWNHA62SASUASNVWJ060501V0WW81XB120024"; + IOcrBAr = "BatchW825UModelWNHEI74SAS"; //ݿȶ xKNow = GetModeFromBar(IOcrBAr);//ݿвѯֵ List xkWordList = ManagerModelHelper.GetModeWordFromBar(IOcrBAr); @@ -1187,28 +1352,28 @@ namespace HisenceYoloDetection if (xKNow.OcrBar == null) { - myLog("δƥɹ" + IfChangeLanguage, DateTime.Now); + myLog("δƥɹ" + IOcrBAr, DateTime.Now); break; } if (xKNow.Detect != "") { - //ʱеϴ»Ǻ֮ǰһģ - if (IfChangeLanguage == IOcrBAr) - { + ////ʱеϴ»Ǻ֮ǰһģ + //if (IfChangeLanguage == IOcrBAr) + //{ - } - else - { - //شOCR.josn - if (File.Exists(xKNow.OcrParm)) - { - paddleOcrModel.Load(xKNow.OcrParm, "CPU"); + //} + //else + //{ + // //شOCR.josn + // if (File.Exists(xKNow.OcrParm)) + // { + // paddleOcrModel.Load(xKNow.OcrParm, "CPU"); - IfChangeLanguage = IOcrBAr; - } + // IfChangeLanguage = IOcrBAr; + // } - } - myLog("ͺƥɹ" + IfChangeLanguage, DateTime.Now); + //} + myLog("ͺƥɹ" + IOcrBAr, DateTime.Now); bBarTriger = true; } @@ -1216,7 +1381,7 @@ namespace HisenceYoloDetection //ݿƥſԽģƶ //ͺźϴεͺһ Ͳûʶģll - IfCam2Triger = false; + } //1ڶ @@ -1244,8 +1409,12 @@ namespace HisenceYoloDetection List strMatFuzzyListOne = new List(); Mat mResultCut = req.currentMat.Clone(); Mat mCut = new Mat(); - ManagerModelHelper.InsertSqlRunDataButton(false, ref mCut, ref mResultCut, mL, mLButton, ref xK_MatchDet, ref strMatListOne, ref strMatFuzzyListOne, ref paddleOcrModel); - + Stopwatch sw = new Stopwatch(); + sw.Start(); + Dictionary keyValueResult = new Dictionary(); + InsertSqlRunDataButton(ref keyValueResult, false, ref mCut, ref mResultCut, mL, mLButton, ref xK_HisenceSQLWord, ref xK_MatchDet, ref strMatListOne, ref strMatFuzzyListOne, ref paddleOcrModel); + sw.Stop(); + myLog("ʱ" + sw.ElapsedMilliseconds, DateTime.Now); if (mL.ResultMap != null) { mL.ResultMap.Save("D://cam1//" + dt.Year.ToString() + dt.Month.ToString() + dt.Day.ToString() + dt.Hour.ToString() + dt.Minute.ToString() + dt.Millisecond.ToString() + "1result.jpg"); @@ -1266,8 +1435,8 @@ namespace HisenceYoloDetection List strMatListTwo = new List(); List strMatFuzzyListTwo = new List(); Mat mResultCut2 = req2.currentMat.Clone(); - - ManagerModelHelper.InsertSqlRunData(false, ref mResultCut2, mL2, ref xK_MatchDet, /*ref strMatListTwo, ref strMatFuzzyListTwo,*/ ref paddleOcrModel); + Dictionary keyValueResult2 = new Dictionary(); + InsertSqlRunData(ref keyValueResult2, false, ref mResultCut2, mL2, ref xK_HisenceSQLWord, ref xK_MatchDet, ref strMatListTwo, ref strMatFuzzyListTwo, ref paddleOcrModel); if (mL2.ResultMap != null) { @@ -1299,10 +1468,26 @@ namespace HisenceYoloDetection } ///ִбȶ Сͼ - bool MatchStr = ManagerModelHelper.IsMatchSQLText(ref mCut, ref xK_HisenceSQLWord, ref xK_MatchDet); - + //bool MatchStr = ManagerModelHelper.IsMatchSQLText(ref mCut, ref xK_HisenceSQLWord, ref xK_MatchDet); + bool MatchStr = true; + keyValueResult.ForEach(x => + { + if (x.Value == false) + { + MatchStr = false; + return; + } + }); + keyValueResult2.ForEach(x => + { + if (x.Value == false) + { + MatchStr = false; + return; + } + }); IfCam1TwoTriger = false; bBarTriger = false; @@ -1487,14 +1672,31 @@ namespace HisenceYoloDetection // PLCcontrol->WritePlc(500, 0); bOn = false; PLCPowerON.Text = "ʹOn"; - myLog("ʹOn", DateTime.Now); + myLog("ʹ", DateTime.Now); + PLCPowerON.BackColor = Color.Red; } else { + melsecPLCTCPDriver.WriteInt("581", 0);//λɿ + melsecPLCTCPDriver.WriteInt("504", 0);//λɿ + melsecPLCTCPDriver.WriteInt("514", 0);//λɿ + melsecPLCTCPDriver.WriteInt("524", 0);//λɿ + melsecPLCTCPDriver.WriteInt("406", 60000); //дֶٶ + melsecPLCTCPDriver.WriteInt("416", 8000); + melsecPLCTCPDriver.WriteInt("426", 10000); + melsecPLCTCPDriver.WriteInt("404", 100000); //д붨λٶ + melsecPLCTCPDriver.WriteInt("414", 8000); + melsecPLCTCPDriver.WriteInt("424", 10000); + + + melsecPLCTCPDriver.WriteInt("500", 0); + + melsecPLCTCPDriver.WriteInt("500", 1); melsecPLCTCPDriver.WriteInt("500", 1); bOn = true; PLCPowerON.Text = "ʹOff"; - myLog("ʹOff", DateTime.Now); + PLCPowerON.BackColor = Color.Green; + myLog("ʹ", DateTime.Now); } } @@ -1647,27 +1849,7 @@ namespace HisenceYoloDetection } //״̬ʶ private bool m_btnState; - private void radioButton1_Click(object sender, EventArgs e) - { - - if (!ifXZeroValue) - { - this.XZerorbx.Checked = true; - // - melsecPLCTCPDriver.WriteInt("503", 1); - ifXZeroValue = true; - this.txtSetValue.Text = "1"; - myLog("XῪʼ", DateTime.Now); - } - else - { - this.XZerorbx.Checked = false; - melsecPLCTCPDriver.WriteInt("503", 0); - ifXZeroValue = false; - this.txtSetValue.Text = "0"; - myLog("Xֹͣ", DateTime.Now); - } - } + private void YZerorbx_Click(object sender, EventArgs e) { @@ -1870,7 +2052,7 @@ namespace HisenceYoloDetection BarPath = fName; } } - + #region ͺ private void InsertBtn_Click(object sender, EventArgs e) { @@ -1963,17 +2145,7 @@ namespace HisenceYoloDetection //ģʶ MLRequest OcrBari = new MLRequest(); OcrBari.currentMat = Cv2.ImRead(BarPath); - MLResult mL2 = paddleOcrModelCountry.RunInferenceFixed(OcrBari); - - string IOcrBAr = ""; - for (int v = 0; v < mL2.ResultDetails.Count(); v++) - { - string ivi = mL2.ResultDetails[v].LabelDisplay; - string result = Regex.Replace(ivi, "[ \\[ \\] \\^ \\-_*DD(^)$%~!@#$&%+=<>!??:?`,.;/\"-]", ""); - - IOcrBAr += result; - } - OcrBarBox.Text = IOcrBAr; + string IOcrBAr = DetMachineBar(ref OcrBari); XK_HisenceWord xkWord = new XK_HisenceWord(); xkWord.OcrBar = IOcrBAr; xkWord.TwoIFWhile = ifwhiteBan; @@ -2017,7 +2189,8 @@ namespace HisenceYoloDetection List strMatFuzzyListOne = new List(); Mat mResultCut = CamOneI.currentMat.Clone(); Mat mCut = new Mat(); - ManagerModelHelper.InsertSqlRunDataButton(true, ref mCut, ref mResultCut, mL3, mLButton, ref xkWord, ref strMatListOne, ref strMatFuzzyListOne, ref paddleOcrModel); + Dictionary keyValueResult = new Dictionary(); + InsertSqlRunDataButton(ref keyValueResult, true, ref mCut, ref mResultCut, mL3, mLButton, ref xK_HisenceSQLWord, ref xkWord, ref strMatListOne, ref strMatFuzzyListOne, ref paddleOcrModel); @@ -2040,8 +2213,8 @@ namespace HisenceYoloDetection List strMatListTwo = new List(); List strMatFuzzyListTwo = new List(); Mat mResultCut2 = CamTwoI.currentMat.Clone(); - - ManagerModelHelper.InsertSqlRunData(true, ref mResultCut2, mL4, ref xkWord,/* ref strMatListTwo, ref strMatFuzzyListTwo,*/ ref paddleOcrModel); + Dictionary keyValueResult2 = new Dictionary(); + InsertSqlRunData(ref keyValueResult2, true, ref mResultCut2, mL4, ref xK_HisenceSQLWord, ref xkWord, ref strMatListTwo, ref strMatFuzzyListTwo, ref paddleOcrModel); @@ -2307,6 +2480,7 @@ namespace HisenceYoloDetection MessageBox.Show("ؼXK_HisenceWordһ"); } } + #endregion private void queryALLBtn_Click(object sender, EventArgs e) { try @@ -2404,6 +2578,495 @@ namespace HisenceYoloDetection { Cam2.Snapshot(); } + private async void Defet_OnDetectionDone(Mat detectionImage, int BlockId) + { + + await Task.Run(() => + { + if (!this.IsHandleCreated) + return; + + this.Invoke(new Action(() => + { + if (this.IsDisposed) + return; + switch (BlockId) + { + case 1: + { + DefetShow1.ImaMAt = detectionImage; + } + break; + case 2: + { + DefetShow2.ImaMAt = detectionImage; + } + break; + case 3: + { + DefetShow3.ImaMAt = detectionImage; + } + break; + case 4: + { + DefetShow4.ImaMAt = detectionImage; + } + break; + case 5: + { + DefetShow5.ImaMAt = detectionImage; + } + break; + case 6: + { + // DefetShow6.ImaMAt = detectionImage; + } + break; + case 7: + { + // DefetShow7.ImaMAt = detectionImage; + } + break; + case 8: + { + // DefetShow8.ImaMAt = detectionImage; + } + break; + + } + //var display = displayList.FirstOrDefault(u => u.DetectionId == detectionId); + //if (display != null) + //{ + // display.RefreshDetectionResult(image, detectionResults); + //} + })); + }); + } + /// + /// ȫͼϴ» ü֮ OCRʶĽ + /// + /// + /// + /// ȫͼͼƬ + /// ȫͼƬϵĿ궨λλο + /// + /// + /// صĶλĽ + /// + /// + public void InsertSqlRunDataButton(ref Dictionary keyValueResult, bool saveimage, ref Mat CutMat, ref Mat currentMatC, MLResult cam1TwoML, MLResult cam1Button, ref XK_HisenceWord SQlxK_HisenceWord, ref XK_HisenceWord xK_HisenceWord, ref List strMatList, ref List strMatRefList, ref PaddleOcrModel IOcrModel) + { +#if true + //try + //{ + + Mat mResultCut = currentMatC.Clone(); + Rect areaBlack = new Rect(); + //ťλ + if (cam1Button.ResultDetails.Count == 1) + { + Mat mResultCuti = mResultCut.Clone(); + int rectsx = cam1Button.ResultDetails[0].Rect.X; + int rectsy = cam1Button.ResultDetails[0].Rect.Y; + int rectsWidth = cam1Button.ResultDetails[0].Rect.Width; + int rectsHeight = cam1Button.ResultDetails[0].Rect.Height; + areaBlack = new Rect(rectsx, rectsy, rectsWidth, rectsHeight); + + } + + + for (int i = 0; i < cam1TwoML.ResultDetails.Count; i++) + { + Mat mResultCuti = mResultCut.Clone(); + int rectsx = cam1TwoML.ResultDetails[i].Rect.X; + int rectsy = cam1TwoML.ResultDetails[i].Rect.Y; + int rectsWidth = cam1TwoML.ResultDetails[i].Rect.Width; + int rectsHeight = cam1TwoML.ResultDetails[i].Rect.Height; + + string blockIndex = cam1TwoML.ResultDetails[i].LabelDisplay; + if(keyValueResult.Keys.Contains(blockIndex)) + { + int indexof = keyValueResult.Keys.ToList().IndexOf(blockIndex); + + int rectsxof = cam1TwoML.ResultDetails[indexof].Rect.X; + if(rectsx> rectsxof) + { + blockIndex = "3"; + } + + } + Rect area2 = new Rect(0, 0, 0, 0); + Mat matCut = new Mat(); + if (blockIndex == "2")//ťΧ + { + + //ťڵťλþ0,0,0,0 + if ((areaBlack.X + areaBlack.Width) < (rectsx + rectsWidth)) + { + areaBlack.X -= rectsx; + areaBlack.Y -= rectsy; + area2 = areaBlack; + } + string TwoRectStr = CheckDiffSciHelper.rectChangeStr(area2); + xK_HisenceWord.TwoRect = TwoRectStr; + + } + Stopwatch sw = Stopwatch.StartNew(); + sw.Start(); + int extendHeight = 50; + rectsHeight += extendHeight; + Rect area = new Rect(rectsx, rectsy, rectsWidth, rectsHeight); + matCut = new Mat(mResultCuti, area); + //OCRʶüͼƬ + MLRequest reqcut = new MLRequest(); + reqcut.currentMat = matCut.Clone(); + MLResult mLCut = paddleOcrModel.RunInference(reqcut); + + bool blockMatchI = BlockChangeFun(saveimage, blockIndex, ref matCut, ref mLCut, ref SQlxK_HisenceWord, ref xK_HisenceWord); + sw.Stop(); + myLog("ÿҪʱ" + sw.ElapsedMilliseconds, DateTime.Now); + + keyValueResult.Add(blockIndex, blockMatchI); + + } + + + //} + //catch (Exception ex) + //{ + + //} +#endif + + + } + + /// + /// ȫͼϴ» ü֮ OCRʶĽ + /// + /// ȫͼͼƬ + /// ȫͼƬϵĿ궨λλο + /// صĶλĽ + public void InsertSqlRunData(ref Dictionary keyValueResult2, bool saveimage, ref Mat currentMatC, MLResult cam1TwoML, ref XK_HisenceWord SQlxK_HisenceWord, ref XK_HisenceWord xK_HisenceWord, ref List strMatList, ref List strMatRefList, ref PaddleOcrModel IOcrModel) + { +#if true + //try + //{ + + + Mat mResultCut = currentMatC.Clone(); + + for (int i = 0; i < cam1TwoML.ResultDetails.Count; i++) + { + Mat mResultCuti = mResultCut.Clone(); + int rectsx = cam1TwoML.ResultDetails[i].Rect.X; + int rectsy = cam1TwoML.ResultDetails[i].Rect.Y; + int rectsWidth = cam1TwoML.ResultDetails[i].Rect.Width; + int rectsHeight = cam1TwoML.ResultDetails[i].Rect.Height; + string blockIndex = cam1TwoML.ResultDetails[i].LabelDisplay; + Rect area = new Rect(rectsx, rectsy, rectsWidth, rectsHeight); + Mat matCut = new Mat(mResultCuti, area); + Stopwatch sw = new Stopwatch(); + sw.Start(); + //OCRʶüͼƬ + MLRequest reqcut = new MLRequest(); + reqcut.currentMat = matCut.Clone(); + MLResult mLCut = paddleOcrModel.RunInference(reqcut); + + bool blockMatchI = BlockChangeFun(saveimage, blockIndex, ref matCut, ref mLCut, ref SQlxK_HisenceWord, ref xK_HisenceWord); + keyValueResult2.Add(blockIndex, blockMatchI); + sw.Stop(); + myLog("ÿҪʱ" + sw.ElapsedMilliseconds, DateTime.Now); + } + + + //} + //catch (Exception ex) + //{ + + //} +#endif + + + } + + + /// + /// ݿȶǷȷ + /// + /// Ƿ񱣴 + /// üһ + /// üһͼƬ + /// üͼƬһЩϢ + /// Ҫ洢ݿĶ + public bool BlockChangeFun(bool saveimage, string blockIndex, ref Mat CutBlockMat, ref MLResult mLcut, ref XK_HisenceWord SQlxK_HisenceWord, ref XK_HisenceWord xK_HisenceWord) + { + bool OneIF = false; + string CutSavePath = ""; + //ڵһβʱ2 ͼƬĿ¼ + if (saveimage) + { + string OcrBar = xK_HisenceWord.OcrBar; + string namecutSavepath = OcrBar + "\\" + blockIndex + "\\" + OcrBar + "result.jpg"; + + CutSavePath = Path.Combine(RootPath, namecutSavepath); + //õĿ¼ + if (!Directory.Exists(Path.GetDirectoryName(CutSavePath))) + { + Directory.CreateDirectory(Path.GetDirectoryName(CutSavePath)); + } + + Cv2.ImWrite(CutSavePath, CutBlockMat); + } + + //Źؼַֺ + List OcrTextinsert = new List();//Źؼ + List OcrFuzzyTextInsert = new List();//ģ + + //һͼƬϵĹؼֱȶ ʾұע + //MatMessage(saveimage, ocrBar, blockIndex, ref CutBlockMat, ref mLcut, ref OcrTextinsert, ref OcrFuzzyTextInsert, ref CutSavePath); + //ҵֵĹؼ Ҳݿ + for (int j = 0; j < mLcut.ResultDetails.Count; j++) + { + var resultDetail = mLcut.ResultDetails[j]; + if (resultDetail.Score > 0.8) + { + string jdetial = mLcut.ResultDetails[j].LabelDisplay; + string result = Regex.Replace(jdetial, "[ \\[ \\] \\^ \\-_*DD(^)$%~!@#$&%+=<>!??:?`,.;/\"-]", ""); + if (Regex.IsMatch(result, @"\d")) + { + OcrTextinsert.Add(result); + } + OcrFuzzyTextInsert.Add(result); + } + } + DateTime dt = DateTime.Now; + + + string MainWoidStr = OcrTextinsert.Join("##"); //ʵʵĹؼ + string TextWoidStr = OcrFuzzyTextInsert.Join("##"); //ʵʵļ + string SQLStr = "";//־ʾݿĹؼ + bool juanjiMatch = false; + switch (blockIndex) + { + case "1"://ȫƥ Ϣ + { + xK_HisenceWord.OneblockPath = CutSavePath; + xK_HisenceWord.OneblockMainWord = MainWoidStr; + xK_HisenceWord.OneblockText = TextWoidStr; + SQLStr = SQlxK_HisenceWord.OneblockMainWord; + if (!saveimage) + { + OneIF = ManagerModelHelper.StrMatch2(xK_HisenceWord.OneblockMainWord, SQLStr); + if (!OneIF) + { + //ʾİ + DisplayResult(mLcut); + Defet_OnDetectionDone(mLcut.ResultMap.ToMat(), 1); + } + else + { + Defet_OnDetectionDone(OKMat, 1); + } + + } + + } + break; + case "2":// ƥ + { + xK_HisenceWord.TwoblockPath = CutSavePath; + xK_HisenceWord.TwoblockMainWord = MainWoidStr; + xK_HisenceWord.TwoblockText = TextWoidStr; + if (!saveimage) + { + SQLStr = SQlxK_HisenceWord.TwoblockMainWord; + bool OneIF1 = ManagerModelHelper.StrMatch2(xK_HisenceWord.TwoblockMainWord, SQlxK_HisenceWord.TwoblockMainWord); + OneIF1 = true; + //ڶ ƥ + string PathSql = SQlxK_HisenceWord.TwoblockPath; + // + + Rect rectsql = CheckDiffSciHelper.strChangeRect(SQlxK_HisenceWord.TwoRect); + Rect rectDet = CheckDiffSciHelper.strChangeRect(xK_HisenceWord.TwoRect); + juanjiMatch = CheckDiffSciHelper.CheckDiffSci(PathSql, CutBlockMat, rectsql, rectDet, (bool)SQlxK_HisenceWord.TwoIFWhile, "D://Hisence//Test"); + // juanjiMatch = true; + + if (!OneIF1 || !juanjiMatch) + { + OneIF = false; + DisplayResult(mLcut); + //ʾİ + // mLcut.ResultMap; + Defet_OnDetectionDone(mLcut.ResultMap.ToMat(), 2); + } + else + { + OneIF = true; + Defet_OnDetectionDone(OKMat, 2); + } + } + } + break; + case "3"://ƥ + { + xK_HisenceWord.ThreeblockPath = CutSavePath; + xK_HisenceWord.ThreeblockMainWord = MainWoidStr; + xK_HisenceWord.ThreeblockText = TextWoidStr; + if (!saveimage) + { + SQLStr = SQlxK_HisenceWord.ThreeblockMainWord; + OneIF = ManagerModelHelper.StrMatch2(xK_HisenceWord.ThreeblockMainWord, SQlxK_HisenceWord.ThreeblockMainWord); + if (!OneIF) + { + DisplayResult(mLcut); + //ʾİ + // mLcut.ResultMap; + Defet_OnDetectionDone(mLcut.ResultMap.ToMat(), 3); + } + else + { + Defet_OnDetectionDone(OKMat, 3); + } + + } + } + break; + case "4"://ֽƥ + { + xK_HisenceWord.FourblockPath = CutSavePath; + xK_HisenceWord.FourblockMainWord = MainWoidStr; + xK_HisenceWord.FourblockText = TextWoidStr; + if (!saveimage) + { + SQLStr = SQlxK_HisenceWord.FourblockMainWord; + OneIF = ManagerModelHelper.StrMatch2(xK_HisenceWord.FourblockMainWord, SQlxK_HisenceWord.FourblockMainWord); + if (!OneIF) + { + DisplayResult(mLcut); + //ʾİ + // mLcut.ResultMap; + Defet_OnDetectionDone(mLcut.ResultMap.ToMat(), 4); + } + else + { + Defet_OnDetectionDone(OKMat, 4); + } + + } + } + break; + case "5"://ֽƥ + { + xK_HisenceWord.FiveblockPath = CutSavePath; + xK_HisenceWord.FiveblockMainWord = MainWoidStr; + xK_HisenceWord.FiveblockText = TextWoidStr; + if (!saveimage) + { + SQLStr = SQlxK_HisenceWord.FiveblockMainWord; + OneIF = ManagerModelHelper.StrMatch2(xK_HisenceWord.FiveblockMainWord, SQlxK_HisenceWord.FiveblockMainWord); + if (!OneIF) + { + DisplayResult(mLcut); + //ʾİ + // mLcut.ResultMap; + Defet_OnDetectionDone(mLcut.ResultMap.ToMat(), 5); + } + else + { + Defet_OnDetectionDone(OKMat, 5); + } + } + } + break; + case "6"://ֽƥ + { + xK_HisenceWord.SixblockPath = CutSavePath; + xK_HisenceWord.SixblockMainWord = MainWoidStr; + xK_HisenceWord.SixblockText = TextWoidStr; + if (!saveimage) + { + SQLStr = SQlxK_HisenceWord.SixblockMainWord; + OneIF = ManagerModelHelper.StrMatch2(xK_HisenceWord.SixblockMainWord, SQlxK_HisenceWord.SixblockMainWord); + if (!OneIF) + { + // DisplayResult(mLcut); + //ʾİ + // mLcut.ResultMap; + Defet_OnDetectionDone(mLcut.ResultMap.ToMat(), 6); + } + else + { + Defet_OnDetectionDone(OKMat, 6); + } + + } + } + break; + case "7"://ֽƥ + { + xK_HisenceWord.SevenblockPath = CutSavePath; + xK_HisenceWord.SevenblockMainWord = MainWoidStr; + xK_HisenceWord.SevenblockText = TextWoidStr; + if (!saveimage) + { + SQLStr = SQlxK_HisenceWord.SevenblockMainWord; + OneIF = ManagerModelHelper.StrMatch2(xK_HisenceWord.SevenblockMainWord, SQlxK_HisenceWord.SevenblockMainWord); + if (!OneIF) + { + //DisplayResult(mLcut); + //ʾİ + // mLcut.ResultMap; + Defet_OnDetectionDone(mLcut.ResultMap.ToMat(), 7); + } + else + { + Defet_OnDetectionDone(OKMat, 7); + } + } + } + break; + case "8"://ֽƥ + { + xK_HisenceWord.EightblockPath = CutSavePath; + xK_HisenceWord.EightblockMainWord = MainWoidStr; + xK_HisenceWord.EightblockText = TextWoidStr; + if (!saveimage) + { + SQLStr = SQlxK_HisenceWord.EightblockMainWord; + OneIF = ManagerModelHelper.StrMatch2(xK_HisenceWord.EightblockMainWord, SQlxK_HisenceWord.EightblockMainWord); + if (!OneIF) + { + // DisplayResult(mLcut); + //ʾİ + // mLcut.ResultMap; + Defet_OnDetectionDone(mLcut.ResultMap.ToMat(), 8); + } + else + { + Defet_OnDetectionDone(OKMat, 8); + } + } + } + break; + } + using (StreamWriter sw = new StreamWriter("D://Hisence//logsMatch.log", true)) + { + string filename = dt.Year.ToString() + dt.Month.ToString() + dt.Day.ToString() + dt.Hour.ToString() + dt.Minute.ToString() + dt.Millisecond.ToString(); + sw.WriteLine(filename + "\n"); + if (blockIndex == "2") + { + sw.WriteLine("ƥ" + juanjiMatch); + } + sw.WriteLine("" + blockIndex + "ݿ" + SQLStr + "ؼ" + MainWoidStr + "" + OneIF + "\n"); + sw.WriteLine("" + blockIndex + " " + TextWoidStr + "\n"); + + sw.Flush(); + } + return OneIF; + + + } private void bnGetParam2_Click_1(object sender, EventArgs e) { @@ -2425,5 +3088,26 @@ namespace HisenceYoloDetection { } + + private void XZerorbx_Click(object sender, EventArgs e) + { + if (!ifXZeroValue) + { + this.XZerorbx.Checked = true; + // + melsecPLCTCPDriver.WriteInt("503", 1); + ifXZeroValue = true; + this.txtSetValue.Text = "1"; + myLog("XῪʼ", DateTime.Now); + } + else + { + this.XZerorbx.Checked = false; + melsecPLCTCPDriver.WriteInt("503", 0); + ifXZeroValue = false; + this.txtSetValue.Text = "0"; + myLog("Xֹͣ", DateTime.Now); + } + } } } diff --git a/HisenceYoloDetection/ManagerModelHelper.cs b/HisenceYoloDetection/ManagerModelHelper.cs index 9aa0ce4..bc5a96f 100644 --- a/HisenceYoloDetection/ManagerModelHelper.cs +++ b/HisenceYoloDetection/ManagerModelHelper.cs @@ -12,6 +12,8 @@ using System.Diagnostics.Eventing.Reader; using static System.Runtime.InteropServices.JavaScript.JSType; using System.Drawing; using Microsoft.VisualBasic; +using System.Xml; +using System.Runtime.InteropServices; namespace HisenceYoloDetection { @@ -19,267 +21,11 @@ namespace HisenceYoloDetection public static class ManagerModelHelper { public static string RootPath = "D:\\Hisence\\SQLImages\\"; - - /// - /// 全图洗衣机 裁剪之后 OCR识别的结果 - /// - /// - /// - /// 全图图片 - /// 全局图片上的目标定位结果(包括定位矩形框) - /// - /// - /// 返回的定位框的结果 - /// - /// - public static void InsertSqlRunDataButton(bool saveimage,ref Mat CutMat, ref Mat currentMatC, MLResult cam1TwoML, MLResult cam1Button, ref XK_HisenceWord xK_HisenceWord, ref List strMatList, ref List strMatRefList, ref PaddleOcrModel IOcrModel) - { -#if true - //try - //{ - - Mat mResultCut = currentMatC.Clone(); - Rect areaBlack=new Rect(); - //旋钮的位置 - if (cam1Button.ResultDetails.Count == 1) - { - Mat mResultCuti = mResultCut.Clone(); - int rectsx = cam1Button.ResultDetails[0].Rect.X; - int rectsy = cam1Button.ResultDetails[0].Rect.Y; - int rectsWidth = cam1Button.ResultDetails[0].Rect.Width; - int rectsHeight = cam1Button.ResultDetails[0].Rect.Height; - areaBlack = new Rect(rectsx, rectsy, rectsWidth, rectsHeight); - } - for (int i = 0; i < cam1TwoML.ResultDetails.Count; i++) - { - Mat mResultCuti = mResultCut.Clone(); - int rectsx = cam1TwoML.ResultDetails[i].Rect.X; - int rectsy = cam1TwoML.ResultDetails[i].Rect.Y; - int rectsWidth = cam1TwoML.ResultDetails[i].Rect.Width; - int rectsHeight = cam1TwoML.ResultDetails[i].Rect.Height; - - string blockIndex = cam1TwoML.ResultDetails[i].LabelDisplay; - Rect area2 = new Rect(); - if (blockIndex == "2"|| blockIndex == "7")//根据旋钮扩大范围 - { - areaBlack.X -= rectsx; - areaBlack.Y -= rectsy; - area2 = areaBlack; - string TwoRectStr= CheckDiffSciHelper.rectChangeStr(area2); - xK_HisenceWord.TwoRect = TwoRectStr; - //Mat matCutblack = new Mat(mResultCuti, area2); - //if((bool)xK_HisenceWord.TwoIFWhile) - //{ - // matCutblack.SetTo(Scalar.Black); - //} - //else - //{ - // matCutblack.SetTo(Scalar.Black); - //} - - - //rectsx -= rectsWidth; - //rectsy -= 50; - //rectsWidth = rectsWidth + 2 * rectsWidth; - //rectsHeight = rectsHeight + 2 + 50; - - Rect area = new Rect(rectsx, rectsy, rectsWidth, rectsHeight); - - Mat matCut = new Mat(mResultCuti, area); - CutMat = matCut.Clone(); - - //Mat TwoCut = new Mat(mResultCuti, area2); - //TwoCut.SetTo(Scalar.Black); - //OCR识别裁剪图片 - MLRequest reqcut = new MLRequest(); - reqcut.currentMat = matCut.Clone(); - MLResult mLCut = IOcrModel.RunInferenceFixed(reqcut); - - //if (mLCut.IsSuccess) - //{ - // DateTime dt = DateTime.Now; - // mLCut.ResultMap.Save("D:\\Hisence\\detImages\\OCR" + dt.Year.ToString() + dt.Month.ToString() + dt.Day.ToString() + dt.Hour.ToString() + dt.Minute.ToString() + dt.Millisecond.ToString() + "2result.jpg"); - - //} - - BlockChangeFun(saveimage, blockIndex, ref matCut, ref mLCut, ref xK_HisenceWord); - } - else - { - Rect area = new Rect(rectsx, rectsy, rectsWidth, rectsHeight); - - Mat matCut = new Mat(mResultCuti, area); - - //OCR识别裁剪图片 - MLRequest reqcut = new MLRequest(); - reqcut.currentMat = matCut.Clone(); - MLResult mLCut = IOcrModel.RunInferenceFixed(reqcut); - //if (mLCut.IsSuccess) - //{ - // DateTime dt = DateTime.Now; - // mLCut.ResultMap.Save("D:\\Hisence\\detImages\\OCR" + dt.Year.ToString() + dt.Month.ToString() + dt.Day.ToString() + dt.Hour.ToString() + dt.Minute.ToString() + dt.Millisecond.ToString() + "2result.jpg"); - - //} - - BlockChangeFun(saveimage, blockIndex, ref matCut, ref mLCut, ref xK_HisenceWord); - } - - - //插入数据库 - - } - - - //} - //catch (Exception ex) - //{ - - //} -#endif - - - } - - /// - /// 全图洗衣机 裁剪之后 OCR识别的结果 - /// - /// 全图图片 - /// 全局图片上的目标定位结果(包括定位矩形框) - /// 返回的定位框的结果 - public static void InsertSqlRunData(bool saveimage, ref Mat currentMatC, MLResult cam1TwoML, ref XK_HisenceWord xK_HisenceWord, /*ref List strMatList, ref List strMatRefList,*/ ref PaddleOcrModel IOcrModel) - { -#if true - //try - //{ - - - Mat mResultCut = currentMatC.Clone(); - - for (int i = 0; i < cam1TwoML.ResultDetails.Count; i++) - { - Mat mResultCuti = mResultCut.Clone(); - int rectsx = cam1TwoML.ResultDetails[i].Rect.X; - int rectsy = cam1TwoML.ResultDetails[i].Rect.Y; - int rectsWidth = cam1TwoML.ResultDetails[i].Rect.Width; - int rectsHeight = cam1TwoML.ResultDetails[i].Rect.Height; - string blockIndex = cam1TwoML.ResultDetails[i].LabelDisplay; - - - Rect area = new Rect(rectsx, rectsy, rectsWidth, rectsHeight); - Mat matCut = new Mat(mResultCuti, area); - - //OCR识别裁剪图片 - MLRequest reqcut = new MLRequest(); - reqcut.currentMat = matCut.Clone(); - MLResult mLCut = IOcrModel.RunInferenceFixed(reqcut); - //if (mLCut.IsSuccess) - //{ - // DateTime dt = DateTime.Now; - // mLCut.ResultMap.Save("D:\\Hisence\\detImages\\OCR" + dt.Year.ToString() + dt.Month.ToString() + dt.Day.ToString() + dt.Hour.ToString() + dt.Minute.ToString() + dt.Millisecond.ToString() + "2result.jpg"); - - //} - - BlockChangeFun(saveimage, blockIndex, ref matCut, ref mLCut, ref xK_HisenceWord); - //插入数据库 - - } - - - //} - //catch (Exception ex) - //{ - - //} -#endif - - - } - - - /// - /// - /// - /// 是否保存 - /// 裁剪的一块索引 - /// 裁剪的一张图片 - /// 裁剪图片的一些信息 - /// 要存储入数据库的东西 - public static void BlockChangeFun(bool saveimage, string blockIndex, ref Mat CutBlockMat, ref MLResult mLcut, ref XK_HisenceWord xK_HisenceWord) - { - string ocrBar = xK_HisenceWord.OcrBar; - //存放关键字和所有字符串 - List OcrTextinsert = new List();//存放关键字 - List OcrFuzzyTextInsert = new List();//存放模糊字 - string CutSavePath = ""; - CombineMessage(saveimage, ocrBar, blockIndex, ref CutBlockMat, ref mLcut, ref OcrTextinsert, ref OcrFuzzyTextInsert, ref CutSavePath); - - switch (blockIndex) - { - case "1"://完全匹配 重量信息 - { - xK_HisenceWord.OneblockPath = CutSavePath; - xK_HisenceWord.OneblockMainWord = OcrTextinsert.Join("##"); - xK_HisenceWord.OneblockText = OcrFuzzyTextInsert.Join("##"); - - } - break; - case "2"://控制面板 匹配 - { - xK_HisenceWord.TwoblockPath = CutSavePath; - xK_HisenceWord.TwoblockMainWord = OcrTextinsert.Join("##"); - xK_HisenceWord.TwoblockText = OcrFuzzyTextInsert.Join("##"); - } - break; - case "3"://第三块板匹配 - { - xK_HisenceWord.ThreeblockPath = CutSavePath; - xK_HisenceWord.ThreeblockMainWord = OcrTextinsert.Join("##"); - xK_HisenceWord.ThreeblockText = OcrFuzzyTextInsert.Join("##"); - } - break; - case "4"://贴纸匹配 - { - xK_HisenceWord.FourblockPath = CutSavePath; - xK_HisenceWord.FourblockMainWord = OcrTextinsert.Join("##"); - xK_HisenceWord.FourblockText = OcrFuzzyTextInsert.Join("##"); - } - break; - case "5"://贴纸匹配 - { - xK_HisenceWord.FiveblockPath = CutSavePath; - xK_HisenceWord.FiveblockMainWord = OcrTextinsert.Join("##"); - xK_HisenceWord.FiveblockText = OcrFuzzyTextInsert.Join("##"); - } - break; - case "6"://贴纸匹配 - { - xK_HisenceWord.SixblockPath = CutSavePath; - xK_HisenceWord.SixblockMainWord = OcrTextinsert.Join("##"); - xK_HisenceWord.SixblockText = OcrFuzzyTextInsert.Join("##"); - } - break; - case "7"://贴纸匹配 - { - xK_HisenceWord.SevenblockPath = CutSavePath; - xK_HisenceWord.SevenblockMainWord = OcrTextinsert.Join("##"); - xK_HisenceWord.SevenblockText = OcrFuzzyTextInsert.Join("##"); - } - break; - case "8"://贴纸匹配 - { - xK_HisenceWord.EightblockPath = CutSavePath; - xK_HisenceWord.EightblockMainWord = OcrTextinsert.Join("##"); - xK_HisenceWord.EightblockText = OcrFuzzyTextInsert.Join("##"); - } - break; - } - - } - /// + /// /// /// /// 是否保存本地图片 @@ -290,8 +36,9 @@ namespace HisenceYoloDetection /// 关键字 /// 所有字 /// 图片保存路径 - public static void CombineMessage(bool saveimage, string OcrBar, string blockIndex, ref Mat CutBlockMat, ref MLResult mLcut, ref List OcrTextinsert, ref List OcrFuzzyTextInsert, ref string cutSavepath) + public static void MatMessage(bool saveimage, string OcrBar, string blockIndex, ref Mat CutBlockMat, ref MLResult mLcut, ref List OcrTextinsert, ref List OcrFuzzyTextInsert, ref string cutSavepath) { + //在这里面找到带数字的关键字 将所有字也存放在数据库中 for (int j = 0; j < mLcut.ResultDetails.Count; j++) { @@ -362,7 +109,7 @@ namespace HisenceYoloDetection try { - string TwoRectstr=XKSQL.TwoRect; + string TwoRectstr = XKSQL.TwoRect; string oneBlockWordSql = XKSQL.OneblockMainWord; string twoBlockWordSql = XKSQL.TwoblockMainWord; string threeBlockWordSql = XKSQL.ThreeblockMainWord; @@ -394,10 +141,10 @@ namespace HisenceYoloDetection //第二快 卷积匹配 string PathSql = XKSQL.TwoblockPath; // - + Rect rectsql = CheckDiffSciHelper.strChangeRect(TwoRectstr); Rect rectDet = CheckDiffSciHelper.strChangeRect(XKDet.TwoRect); - bool twoif2 = CheckDiffSciHelper.CheckDiffSci(PathSql, detMat, rectsql, rectDet,(bool)XKSQL.TwoIFWhile, "D://Test"); + bool twoif2 = CheckDiffSciHelper.CheckDiffSci(PathSql, detMat, rectsql, rectDet, (bool)XKSQL.TwoIFWhile, "D://Test"); DateTime dt = DateTime.Now; using (StreamWriter sw = new StreamWriter("D://Hisence//logsMatch.log", true)) { @@ -411,11 +158,11 @@ namespace HisenceYoloDetection sw.WriteLine(sixBlockWordSql + " " + sixBlockWordDet + "\n"); sw.WriteLine(sevenBlockWordSql + " " + sevenBlockWordDet + "\n"); sw.WriteLine(eightBlockWordSql + " " + eightBlockWordDet + "\n"); - sw.WriteLine( " 卷积匹配 " + twoif2 + "\n"); + sw.WriteLine(" 卷积匹配 " + twoif2 + "\n"); sw.Flush(); } //第三块区域一直都是false - if (OneIF && TwoIF && ThreeIF && FourIF && FiveIF && SixIF && SenvenIF && EightIF&& twoif2) + if (OneIF && TwoIF && ThreeIF && FourIF && FiveIF && SixIF && SenvenIF && EightIF && twoif2) { return true; } @@ -434,50 +181,181 @@ namespace HisenceYoloDetection } } + public static bool StrMatch(string SqlText,string DetText) + { + // 计算Levenshtein距离 + int distance = LevenshteinDistance(SqlText, DetText); + + // 计算相似度(相似度等于1减去标准化的Levenshtein距离) + double similarity = 1 - ((double)distance / Math.Max(SqlText.Length, DetText.Length)); + bool areEqual = false; + if (similarity < 0.5) + { + areEqual = false; + } + else + { + areEqual = true; + } + //string[] sArraysql = Regex.Split(SqlText, "##", RegexOptions.IgnoreCase); + //string[] sArraydet = Regex.Split(DetText, "##", RegexOptions.IgnoreCase); + //bool areEqual = sArraysql.OrderBy(x => x).SequenceEqual(sArraydet.OrderBy(x => x)); + return areEqual; + + } + static bool AreArraysEqual(string[] array1, string[] array2) + { + if (array1.Length != array2.Length) + { + return false; + } + + // 将数组排序 + Array.Sort(array1); + Array.Sort(array2); + + // 逐个比较对应位置的数字 + for (int i = 0; i < array1.Length; i++) + { + if (array1[i] != array2[i]) + { + return false; + } + } + + return true; + } + static bool AreMoreThanHalfEqual(string[] array1, string[] array2) + { + int io = 0; + foreach (string ch1 in array1) + { + foreach (string ch2 in array2) + { + if (ch1 == ch2) + { + io++; + Console.WriteLine(ch1); + break; + } + } + } + + //// 将数组转换为集合 + //HashSet set1 = new HashSet(array1); + //HashSet set2 = new HashSet(array2); + + //// 计算交集的数量 + //int intersectionCount = set1.Intersect(set2).Count(); + + // 判断交集数量是否超过一半 + return io > array1.Length / 2; + } + public static bool StrMatch2(string SqlText, string DetText) + { + + string[] numbers = FindNumbers(SqlText); + + if (numbers.Length>0) + { + //Console.WriteLine("字符串中包含数字:" + number); + } + else + { + Console.WriteLine("字符串中不包含数字"); + } + + string[] numbers2= FindNumbers(DetText); + + + if (numbers2.Length>0) + { + //Console.WriteLine("字符串中包含数字:" + detnumber); + } + else + { + Console.WriteLine("字符串中不包含数字"); + } + bool areEqual ; + if (numbers2.Length>2&& numbers.Length > 2) + { + areEqual = AreMoreThanHalfEqual(numbers, numbers2); + } + else + { + areEqual = AreArraysEqual(numbers, numbers2); + } + + + //string[] sArraysql = Regex.Split(SqlText, "##", RegexOptions.IgnoreCase); + //string[] sArraydet = Regex.Split(DetText, "##", RegexOptions.IgnoreCase); + //for(int i=0;i< sArraydet.Length;i++) + //{ + // string s = sArraydet[i]; + // for (int j = 0; j < sArraysql.Length; j++) + // { + + // } + //} + //bool areEqual = sArraysql.OrderBy(x => x).SequenceEqual(sArraydet.OrderBy(x => x)); + return areEqual; + + } + static string[] FindNumbers(string str) + { + Regex regex = new Regex(@"\d+"); + MatchCollection matches = regex.Matches(str); + string[] numbers = new string[matches.Count]; + for (int i = 0; i < matches.Count; i++) + { + numbers[i] = matches[i].Value; + } + return numbers; + } + + static string GetNumber(string str) + { + Regex regex = new Regex(@"\d+"); + Match match = regex.Match(str); + if (match.Success) + { + return match.Value; + } + else + { + return null; + } + } public static bool isMatchStr(string SqlText, string DetText) { - - - if ((SqlText == "" || SqlText == null) && (DetText == "" || DetText == null)) + + + if ((SqlText == "" || SqlText == null) && (DetText == "" || DetText == null)) { return true; } else { - if(SqlText!=null&& DetText!=null) + if (SqlText != null && DetText != null) { if (SqlText.Contains("##") && DetText.Contains("##")) { - // 计算Levenshtein距离 - int distance = LevenshteinDistance(SqlText, DetText); - - // 计算相似度(相似度等于1减去标准化的Levenshtein距离) - double similarity = 1 - ((double)distance / Math.Max(SqlText.Length, DetText.Length)); - bool areEqual = false; - if (similarity < 0.5) - { - areEqual = false; - } - else - { - areEqual = true; - } - //string[] sArraysql = Regex.Split(SqlText, "##", RegexOptions.IgnoreCase); - //string[] sArraydet = Regex.Split(DetText, "##", RegexOptions.IgnoreCase); - //bool areEqual = sArraysql.OrderBy(x => x).SequenceEqual(sArraydet.OrderBy(x => x)); - return areEqual; - + return StrMatch2(SqlText, DetText); + } + else if(SqlText != "" && DetText != "") + { + return StrMatch2(SqlText, DetText); } else { - return true; + return false; } } else { return false; } - + } } // 计算Levenshtein距离 diff --git a/HisenceYoloDetection/MelsecPLCTCPDriver.cs b/HisenceYoloDetection/MelsecPLCTCPDriver.cs index bc8b626..ad6e1bf 100644 --- a/HisenceYoloDetection/MelsecPLCTCPDriver.cs +++ b/HisenceYoloDetection/MelsecPLCTCPDriver.cs @@ -11,7 +11,7 @@ using static OpenCvSharp.FileStorage; -public class MelsecPLCTCPDriver1 +public class MelsecPLCTCPDriver { private MelsecMcNet melsecMc = new MelsecMcNet(); // private HslCommunication.ModBus.ModbusTcpNet melsecMc = new HslCommunication.ModBus.ModbusTcpNet(); diff --git a/HisenceYoloDetection/PaddleOcrModel.cs b/HisenceYoloDetection/PaddleOcrModel.cs index 6bd7b94..b3717c4 100644 --- a/HisenceYoloDetection/PaddleOcrModel.cs +++ b/HisenceYoloDetection/PaddleOcrModel.cs @@ -1,4 +1,4 @@ - +//#define USE_MULTI_THREAD using Newtonsoft.Json; using OpenCvSharp; @@ -183,8 +183,7 @@ namespace XKRS.Device.SimboVision.SimboHelper detectionResultDetail.LabelNo = det.classId; //todo: 标签名相对应 detectionResultDetail.LabelDisplay = det.classname; - detectionResultDetail.Rect = new Rectangle(rectX.ToInt(), rectY.ToInt(), rectWidth.ToInt(), rectHeight.ToInt()); - detectionResultDetail.Score = det.fScore; + detectionResultDetail.Rect = new Rectangle((int)rectX, (int)rectY, (int)rectWidth, (int)rectHeight); detectionResultDetail.Score = det.fScore; detectionResultDetail.LabelName = det.classname; detectionResultDetail.Area = det.area; result.ResultDetails.Add(detectionResultDetail); diff --git a/HisenceYoloDetection/PaddleOcrModelCountry.cs b/HisenceYoloDetection/PaddleOcrModelCountry.cs index 59e244f..c690ad0 100644 --- a/HisenceYoloDetection/PaddleOcrModelCountry.cs +++ b/HisenceYoloDetection/PaddleOcrModelCountry.cs @@ -139,12 +139,21 @@ namespace XKRS.Device.SimboVision.SimboHelper } - private void ConvertJsonResult(string json, ref MLResult result) + + + //string pattern = @"^[A-Za-z0-9]+$"; //@意思忽略转义,+匹配前面一次或多次,$匹配结尾 + + // Match match = Regex.Match(str, pattern); + + + + + private void ConvertJsonResult(string json, ref MLResult result) { // json = "{\"FastDetResult\":[{\"cls_id\":0,\"cls\":\"liewen\",\"fScore\":0.654843,\"rect\":[175,99,110,594]},{\"cls_id\":0,\"cls\":\"liewen\",\"fScore\":0.654589,\"rect\":[2608,19,104,661]},{\"cls_id\":0,\"cls\":\"liewen\",\"fScore\":0.654285,\"rect\":[1275,19,104,662]},{\"cls_id\":0,\"cls\":\"liewen\",\"fScore\":0.620762,\"rect\":[1510,95,107,600]},{\"cls_id\":0,\"cls\":\"liewen\",\"fScore\":0.617812,\"rect\":[2844,93,106,602]}]}"; // Console.WriteLine("检测结果JSON:" + json); - SegResultCountry detResult = JsonConvert.DeserializeObject(json); + SegResult detResult = JsonConvert.DeserializeObject(json); if (detResult == null) { return; @@ -178,46 +187,27 @@ namespace XKRS.Device.SimboVision.SimboHelper float rectWidth = width; float rectHeight = height; + //string pattern = @"^[A-Za-z0-9]+$"; //@意思忽略转义,+匹配前面一次或多次,$匹配结尾 + + // bool match = Regex.IsMatch(det.classname, pattern); + if (det.classname != ""&& rectWidth>0&& rectHeight>0) + { + DetectionResultDetail detectionResultDetail = new DetectionResultDetail(); + detectionResultDetail.LabelNo = det.classId; + //todo: 标签名相对应 + detectionResultDetail.LabelDisplay = det.classname; + detectionResultDetail.Rect = new Rectangle((int)rectX, (int)rectY, (int)rectWidth, (int)rectHeight); + detectionResultDetail.Score = det.fScore; + detectionResultDetail.LabelName = det.classname; + detectionResultDetail.Area = det.area; + result.ResultDetails.Add(detectionResultDetail); + } + - DetectionResultDetail detectionResultDetail = new DetectionResultDetail(); - detectionResultDetail.LabelNo = det.classId; - //todo: 标签名相对应 - detectionResultDetail.LabelDisplay = det.classname; - detectionResultDetail.Rect = new Rectangle(rectX.ToInt(), rectY.ToInt(), rectWidth.ToInt(), rectHeight.ToInt()); - detectionResultDetail.Score = det.fScore; - detectionResultDetail.LabelName = det.classname; - detectionResultDetail.Area = det.area; - result.ResultDetails.Add(detectionResultDetail); - //if (det.classname.Contains("Model:") || det.classname.Contains("Batch:")) - //{ - // string[] sArray = Regex.Split(det.classname, "Model:", RegexOptions.IgnoreCase); - // string splitBar = ""; - // if (sArray.Count() > 1) - // { - // result.WashMachineBar = sArray[1]; - // string[] aBatch = Regex.Split(sArray[0], "Batch:", RegexOptions.IgnoreCase); - // if (aBatch.Count() > 1) - // { - // result.WashMachineBatch = aBatch[1]; - // } - // } - //} - //if (det.classname.Contains("SN:") ) - //{ - // string[] sArray = Regex.Split(det.classname, "SN:", RegexOptions.IgnoreCase); - // string splitBar = ""; - // if (sArray.Count() > 1) - // { - // result.WashMachineSN = sArray[1]; - - // } - //} } } - - [HandleProcessCorruptedStateExceptions] public MLResult RunInferenceFixed(MLRequest req) diff --git a/HisenceYoloDetection/SimboObjectDetection.cs b/HisenceYoloDetection/SimboObjectDetection.cs index f15bb1b..da5e0f7 100644 --- a/HisenceYoloDetection/SimboObjectDetection.cs +++ b/HisenceYoloDetection/SimboObjectDetection.cs @@ -174,6 +174,8 @@ public class SimboObjectDetection result.ResultDetails.Add(detectionResultDetail); } + result.ResultDetails.Sort((s1, s2) => s1.Rect.X.CompareTo(s2.Rect.X)); + } diff --git a/HisenceYoloDetection/SimboVisionMLBase.cs b/HisenceYoloDetection/SimboVisionMLBase.cs index 23d998f..dbe2240 100644 --- a/HisenceYoloDetection/SimboVisionMLBase.cs +++ b/HisenceYoloDetection/SimboVisionMLBase.cs @@ -2,6 +2,7 @@ using OpenCvSharp; using System; using System.Collections.Generic; +using System.ComponentModel; using System.Drawing; using System.Runtime.InteropServices; @@ -180,8 +181,16 @@ public class MLResult public string ResultMessage; public Bitmap ResultMap; public List ResultDetails = new List(); - + } +public enum ResultState +{ + [Description("检测NG")] + DetectNG = 0, + [Description("OK")] + OK = 1, +} + public static class MLEngine { diff --git a/HisenceYoloDetection/StaticHelper.cs b/HisenceYoloDetection/StaticHelper.cs index ece9334..77a7ec9 100644 --- a/HisenceYoloDetection/StaticHelper.cs +++ b/HisenceYoloDetection/StaticHelper.cs @@ -1,6 +1,7 @@ using Microsoft.CSharp.RuntimeBinder; //using Newtonsoft.Json; using System.Collections.ObjectModel; +using System.ComponentModel; using System.Drawing.Imaging; using System.Dynamic; using System.Linq.Expressions; @@ -13,6 +14,7 @@ using System.Text.RegularExpressions; public static class StaticHelper { + //判断是否为正整数 public static bool IsInt(string inString) { diff --git a/HisenceYoloDetection/VirtualPLCTCPDriver.cs b/HisenceYoloDetection/VirtualPLCTCPDriver.cs index d52874e..cb6e723 100644 --- a/HisenceYoloDetection/VirtualPLCTCPDriver.cs +++ b/HisenceYoloDetection/VirtualPLCTCPDriver.cs @@ -12,7 +12,7 @@ using static OpenCvSharp.FileStorage; -public class MelsecPLCTCPDriver +public class MelsecPLCTCPDriver1 { // private MelsecMcNet melsecMc = new MelsecMcNet(); // private HslCommunication.ModBus.ModbusTcpNet melsecMc = new HslCommunication.ModBus.ModbusTcpNet(); diff --git a/HisenceYoloDetection/yyb.douyin.ico b/HisenceYoloDetection/yyb.douyin.ico deleted file mode 100644 index aad76a45bc86c6dcf5bcea6e4300ab409e6ef468..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2880 zcmV-G3%~RL0096205C8B0096P04fUr02TlM0EtjeM-2)Z3IG5A4M|8uQUCw|FaQ7m zFbDmw@l2Fq81A+oBc zp%*MwtS`MGV!uu>FVX43o?u*LN`Xb6;NX7a1tH>uU@+e`7$ebws9u87pCJk)>aHMI z4(oKr0)=0PVI<<~4Mxj-g3^#y2fYs(%qE=>ww^fpoehD=@A`ittp%EmZH%i-xh47t zhVVc8rtV>jAS?Kw^?4UTYw``oS*A`A92`19wheoLk!SX4|6*4lFvJW%+NP}-w1u#> z<(js63xvo-&G!NU*~vo*CQqRsq$BJ6^I?!~4GVM$>Bw+9kV+Ws7V#s=jzX6m;~h3+ zTSp=%EFK}oXpMI}2W6{+#Jx|D(P%25QEz_ewjlw*{nL={wxK{0aYd4F)h*!~U29x! z+?uxvH%62pTGyR^xl8W!?Q2XA((A*PYd`d$Xc188vcc|f66|m|9B|s5khXq=rXgh* z7CKPl-OeCqNXkl!NkDkz!ykQyHUgYZBF_Yf9MbihXnb-$UWyy8@ooSxM3arecLvdp zce+OfkbPPN$mAKEq7$A2CvYfd3QR&YU-a7T_=jFF9}Ch85mmh-z(K@Y;1nHj*&Pte z_u`p^T;-jv@t{57OR|uK1ZY3-U{G7AzMTLyE_`+jxueEI2#M8b$3J>W085=63$Q!w zsIu8nw6g;Je?AWp`C||gm!i?88j&Qx+zSHySg0+WqKF!&3+w6G(at)gzO@cU&33)$ zEdf3Yu|=#+zAb8<5>CCh1LXt8peQCwqiu#>72wT6Dx$QAMV^sV_Y|=Eo{b;ieoh&d zC+2Ci&CpWZ1^u)Pxj-IxJmTr!e3Z>G$` zNY^8^!G%dim_88Jmni-2NGGN*R12K))=3IY@mo;L;=QXMT;5wpnq zHJq%A6LFGt+}G>isXPL4-F8Ut??Ge9ViHi|M}S;Tw-TW1u7Ch6qzj2e+O~3}G}^h-j%Wf0;` zv26s%_Gx9Io)!=}ZZeYTK%VKY!%50GPG%cMfGS7n$MgA4DUn@DDN}^%<-@r^v&OH~ zLCYfcCxBU~y8;5R5G!rj;+;a7r;ZNdY~;D`Po2eGvdcXpzlhQu%NQ(ssNWT6C)US% zcVaC8vwMCK$1hw&GhnB*NsEtV9YuicgU@iEe16e74Y70_l%JQsmNC*S|Oi zK;DUMLrcj*-8~HkARzXoU-9g-LSkuCR0N1{{o^=!zYP0Q#`D9qR<36EB8C^xzR~_b zBawjHxzEr>R`vh_0Z?Z$fC|)ZJ^Fo0-Ti3-D@`Ci_9W~P~qnFzj`Kg zG08~#`ac*%yZ0=DxAqsQ4R?IG?(e?W8g3>;0H1Vc#c zuQX%nEWC2%+qiuBD!k#KzK{F5O}b7+n2dDzEK4gUz98^`=A_OnJv$eHET3 zW&t@fup(|`D+|6z1R2?`M8_5)0eVwBtS67-Z?t$>8s!4`PV5z9!zZ*x#=Gm0!OjJZ z4y1b=u+qVNDOu+R6Hd=EuteZq@+ZFed1wuc2v6pHu)Y>AUZPN^_CmFN+mGzo`0W1Q^5;Fz7#g{|KNV?_W^kW+*-av zp+mt)tH`rp;|f*`pC1`)=O#`tjbsWT@Pose<%O)z1S%$fnU5xu#bS|J` z@7s*0@M`~&h$Z5o^gjDZ$!Lse)uvNfz=fM+0qsPr{RkNH3cr5WBq}$#fajQiAf3@T z+F*!Oe&p*Kn2+NOahM)y#iIBTSe7sXul3Kx&*H2YZc3s|)A?_2Y?ESf=u(RSCWgnd z3c4{UP$EiT;EQmO( zC#EVK1Byo;eKagvX9#%fEDjSpoaM8r{ENQL(E*rrA2!LM7}bETBJ4 e3NKXz1^o{qG0APS;G#MJ0000