增加旋钮识别
This commit is contained in:
@ -10,7 +10,7 @@ using System.Threading.Tasks;
|
||||
using static System.Net.Mime.MediaTypeNames;
|
||||
using Point = OpenCvSharp.Point;
|
||||
using Size = OpenCvSharp.Size;
|
||||
|
||||
using System;
|
||||
using OpenCvSharp;
|
||||
using OpenCvSharp.Features2D;
|
||||
using OpenCvSharp.Flann;
|
||||
@ -20,6 +20,8 @@ namespace HisenceYoloDetection
|
||||
{
|
||||
public static class CheckDiffSciHelper
|
||||
{
|
||||
|
||||
|
||||
public static Mat ProcessImage(Mat image, Rect fillRect)
|
||||
{
|
||||
// 获取图像尺寸
|
||||
@ -229,20 +231,6 @@ namespace HisenceYoloDetection
|
||||
{
|
||||
Cv2.DrawContours(blackhatImg, new Point[][] { contour }, -1, Scalar.Black, thickness: Cv2.FILLED);
|
||||
// 框选轮廓
|
||||
string savePath2 = Path.Combine("D:\\Hisence\\Test\\2\\ng", Path.GetFileNameWithoutExtension(path1) + filename + "_Rect.png");
|
||||
// 保存结果
|
||||
//string savePath = Path.Combine(saveDir, Path.GetFileNameWithoutExtension(path2) + "_diff.png");
|
||||
Cv2.ImWrite(savePath2, img2);
|
||||
string savePath = Path.Combine("D:\\Hisence\\Test\\2\\ng", Path.GetFileNameWithoutExtension(path1) + filename + "_diff.png");
|
||||
// 保存结果
|
||||
//string savePath = Path.Combine(saveDir, Path.GetFileNameWithoutExtension(path2) + "_diff.png");
|
||||
Cv2.ImWrite(savePath, blackhatImg);
|
||||
}
|
||||
else
|
||||
{
|
||||
Rect boundingRect = Cv2.BoundingRect(contour);
|
||||
Cv2.Rectangle(img2, boundingRect, Scalar.Red, thickness: 2);
|
||||
isMatch = false;
|
||||
string savePath2 = Path.Combine("D:\\Hisence\\Test\\2\\ok", Path.GetFileNameWithoutExtension(path1) + filename + "_Rect.png");
|
||||
// 保存结果
|
||||
//string savePath = Path.Combine(saveDir, Path.GetFileNameWithoutExtension(path2) + "_diff.png");
|
||||
@ -252,8 +240,32 @@ namespace HisenceYoloDetection
|
||||
//string savePath = Path.Combine(saveDir, Path.GetFileNameWithoutExtension(path2) + "_diff.png");
|
||||
Cv2.ImWrite(savePath, blackhatImg);
|
||||
}
|
||||
else
|
||||
{
|
||||
Rect boundingRect = Cv2.BoundingRect(contour);
|
||||
Cv2.Rectangle(img2, boundingRect, Scalar.Red, thickness: 2);
|
||||
isMatch = false;
|
||||
string savePath2 = Path.Combine("D:\\Hisence\\Test\\2\\ng", Path.GetFileNameWithoutExtension(path1) + filename + "_Rect.png");
|
||||
// 保存结果
|
||||
//string savePath = Path.Combine(saveDir, Path.GetFileNameWithoutExtension(path2) + "_diff.png");
|
||||
Cv2.ImWrite(savePath2, img2);
|
||||
string savePath = Path.Combine("D:\\Hisence\\Test\\2\\ng", Path.GetFileNameWithoutExtension(path1) + filename + "_diff.png");
|
||||
// 保存结果
|
||||
//string savePath = Path.Combine(saveDir, Path.GetFileNameWithoutExtension(path2) + "_diff.png");
|
||||
Cv2.ImWrite(savePath, blackhatImg);
|
||||
}
|
||||
}
|
||||
|
||||
// 新增的白色面积占比判断
|
||||
double whiteArea1 = Cv2.CountNonZero(thr1);
|
||||
double whiteArea2 = Cv2.CountNonZero(thr2);
|
||||
double ratio1 = whiteArea1 / (thr1.Rows * thr1.Cols);
|
||||
double ratio2 = whiteArea2 / (thr2.Rows * thr2.Cols);
|
||||
|
||||
if (Math.Abs(ratio1 - ratio2) >= 0.9)
|
||||
{
|
||||
isMatch = true;
|
||||
}
|
||||
|
||||
return isMatch;
|
||||
}
|
||||
|
@ -1605,25 +1605,7 @@ namespace HisenceYoloDetection
|
||||
//2<><32>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//if (IfCam2Triger)
|
||||
{
|
||||
// IfCam2Triger = false;
|
||||
//OCRʶ<52><CAB6>
|
||||
//MLRequest req = new MLRequest();
|
||||
//req.currentMat = Cam2ImgShowBar;
|
||||
////req.currentMat = Cv2.ImRead("D:\\Hisence\\<5C><><EFBFBD><EFBFBD>\\1\\bar.jpg");
|
||||
|
||||
////<2F><><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
//string IOcrBAr = DetMachineBar(ref req);
|
||||
//DateTime dt = DateTime.Now;
|
||||
//using (StreamWriter sw = new StreamWriter("D://Hisence//logsBar.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");
|
||||
// sw.WriteLine(IOcrBAr + "\n");
|
||||
// sw.Flush();
|
||||
//}
|
||||
// IOcrBAr = "BatchW9659ModelWNHPI74SCPSDE";
|
||||
// IOcrBAr = "W821PWMS27106WD2";
|
||||
// IOcrBAr=
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF>ȶ<EFBFBD>
|
||||
_runHandleAfter.Reset();
|
||||
if (xKNow == null)
|
||||
@ -1654,22 +1636,7 @@ namespace HisenceYoloDetection
|
||||
|
||||
if (xKNow.Detect != "")
|
||||
{
|
||||
////<2F><>ʱ<EFBFBD><CAB1><EFBFBD>е<EFBFBD>ϴ<EFBFBD>»<EFBFBD><C2BB>Ǻ<EFBFBD>֮ǰһ<C7B0><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
|
||||
//if (IfChangeLanguage == IOcrBAr)
|
||||
//{
|
||||
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// //<2F><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>OCR.josn<73><6E><EFBFBD><EFBFBD>
|
||||
// if (File.Exists(xKNow.OcrParm))
|
||||
// {
|
||||
// paddleOcrModel.Load(xKNow.OcrParm, "CPU");
|
||||
|
||||
// IfChangeLanguage = IOcrBAr;
|
||||
// }
|
||||
|
||||
//}
|
||||
myLog("<22>ͺ<EFBFBD>ƥ<EFBFBD><C6A5><EFBFBD>ɹ<EFBFBD>" + IOcrBAr, DateTime.Now);
|
||||
|
||||
}
|
||||
@ -1689,10 +1656,10 @@ namespace HisenceYoloDetection
|
||||
Defet_OnDetectionDone(whiteMat, 1);
|
||||
Defet_OnDetectionDone(whiteMat, 2);
|
||||
Defet_OnDetectionDone(whiteMat, 3);
|
||||
Defet_OnDetectionDone(whiteMat, 4);
|
||||
Defet_OnDetectionDone(whiteMat, 5);
|
||||
Defet_OnDetectionDone(whiteMat, 6);
|
||||
Defet_OnDetectionDone(whiteMat, 7);
|
||||
//Defet_OnDetectionDone(whiteMat, 4);
|
||||
//Defet_OnDetectionDone(whiteMat, 5);
|
||||
//Defet_OnDetectionDone(whiteMat, 6);
|
||||
//Defet_OnDetectionDone(whiteMat, 7);
|
||||
|
||||
XK_HisenceWord xK_MatchDet = new XK_HisenceWord();
|
||||
xK_MatchDet.TwoIFWhile = xK_HisenceSQLWord.TwoIFWhile;
|
||||
@ -1818,48 +1785,48 @@ namespace HisenceYoloDetection
|
||||
OKOrNGShow.Image = NGbitmap;
|
||||
}));
|
||||
|
||||
//melsecPLCTCPDriver.WriteInt(RedLightingAdress, 1);//<2F><><EFBFBD><EFBFBD>
|
||||
//melsecPLCTCPDriver.WriteInt(YellowLightingAdress, 0);//<2F>Ƶ<EFBFBD>
|
||||
//melsecPLCTCPDriver.WriteInt(GreenLightingAdress, 0);//<2F>̵<EFBFBD>
|
||||
//melsecPLCTCPDriver.WriteInt(WaringAdress, 1);//<2F><><EFBFBD><EFBFBD>
|
||||
melsecPLCTCPDriver.WriteInt(RedLightingAdress, 1);//<2F><><EFBFBD><EFBFBD>
|
||||
melsecPLCTCPDriver.WriteInt(YellowLightingAdress, 0);//<2F>Ƶ<EFBFBD>
|
||||
melsecPLCTCPDriver.WriteInt(GreenLightingAdress, 0);//<2F>̵<EFBFBD>
|
||||
melsecPLCTCPDriver.WriteInt(WaringAdress, 1);//<2F><><EFBFBD><EFBFBD>
|
||||
|
||||
|
||||
|
||||
////<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD>NGϴ<47>»<EFBFBD>
|
||||
//DialogResult dr = MessageBox.Show("<22>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>죿", "<22>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
|
||||
//if (dr == DialogResult.OK)
|
||||
//{
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD>NGϴ<47>»<EFBFBD>
|
||||
DialogResult dr = MessageBox.Show("<22>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>죿", "<22>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
|
||||
if (dr == DialogResult.OK)
|
||||
{
|
||||
|
||||
// melsecPLCTCPDriver.WriteInt(RedLightingAdress, 0);//<2F><><EFBFBD><EFBFBD>
|
||||
// melsecPLCTCPDriver.WriteInt(GreenLightingAdress, 1);//<2F>̵<EFBFBD>
|
||||
// melsecPLCTCPDriver.WriteInt(WaringAdress, 0);//<2F><><EFBFBD><EFBFBD>
|
||||
melsecPLCTCPDriver.WriteInt(RedLightingAdress, 0);//<2F><><EFBFBD><EFBFBD>
|
||||
melsecPLCTCPDriver.WriteInt(GreenLightingAdress, 1);//<2F>̵<EFBFBD>
|
||||
melsecPLCTCPDriver.WriteInt(WaringAdress, 0);//<2F><><EFBFBD><EFBFBD>
|
||||
|
||||
// OKDsums++;
|
||||
// WUsums++;
|
||||
// this.Invoke(new Action(() =>
|
||||
// {
|
||||
// double percent = (double)WUsums / AllDsums;
|
||||
// string percentText = percent.ToString("0.0%");//<2F><><EFBFBD><EFBFBD>percentText<78><74>ֵΪ10.0%
|
||||
// textBox1.Text = percentText;
|
||||
// OKOrNGShow.Image = OKbitmap;
|
||||
// }));
|
||||
// myLog("ƥ<><C6A5>ʧ<EFBFBD><CAA7>", DateTime.Now);
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// NGDsums++;
|
||||
OKDsums++;
|
||||
WUsums++;
|
||||
this.Invoke(new Action(() =>
|
||||
{
|
||||
double percent = (double)WUsums / AllDsums;
|
||||
string percentText = percent.ToString("0.0%");//<2F><><EFBFBD><EFBFBD>percentText<78><74>ֵΪ10.0%
|
||||
textBox1.Text = percentText;
|
||||
OKOrNGShow.Image = OKbitmap;
|
||||
}));
|
||||
myLog("ƥ<><C6A5>ʧ<EFBFBD><CAA7>", DateTime.Now);
|
||||
}
|
||||
else
|
||||
{
|
||||
NGDsums++;
|
||||
|
||||
// melsecPLCTCPDriver.WriteInt(WaringAdress, 0);//<2F><><EFBFBD><EFBFBD>
|
||||
// melsecPLCTCPDriver.WriteInt(RedLightingAdress, 0);//<2F><><EFBFBD><EFBFBD>
|
||||
// melsecPLCTCPDriver.WriteInt(GreenLightingAdress, 1);//<2F>̵<EFBFBD>
|
||||
melsecPLCTCPDriver.WriteInt(WaringAdress, 0);//<2F><><EFBFBD><EFBFBD>
|
||||
melsecPLCTCPDriver.WriteInt(RedLightingAdress, 0);//<2F><><EFBFBD><EFBFBD>
|
||||
melsecPLCTCPDriver.WriteInt(GreenLightingAdress, 1);//<2F>̵<EFBFBD>
|
||||
|
||||
|
||||
// this.Invoke(new Action(() =>
|
||||
// {
|
||||
// OKOrNGShow.Image = NGbitmap;
|
||||
// }));
|
||||
// myLog("ƥ<><C6A5><EFBFBD>ɹ<EFBFBD>", DateTime.Now);
|
||||
//}
|
||||
this.Invoke(new Action(() =>
|
||||
{
|
||||
OKOrNGShow.Image = NGbitmap;
|
||||
}));
|
||||
myLog("ƥ<><C6A5><EFBFBD>ɹ<EFBFBD>", DateTime.Now);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -3423,6 +3390,7 @@ namespace HisenceYoloDetection
|
||||
|
||||
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;
|
||||
|
||||
@ -3454,8 +3422,8 @@ namespace HisenceYoloDetection
|
||||
|
||||
Rect rect = new Rect(0, 0, 0, 0);
|
||||
string PathSql = SQlxK_HisenceWord.ThreeblockPath;
|
||||
|
||||
juanjiMatch = CheckDiffSciHelper1.CheckDiffSci(PathSql, CutBlockMat, rect, rect, false, "D://Hisence//Test1");
|
||||
bool iswhite = IsMostlyWhite(PathSql);
|
||||
juanjiMatch = CheckDiffSciHelper1.CheckDiffSci(PathSql, CutBlockMat, rect, rect, iswhite, "D://Hisence//Test1");
|
||||
if (!OneIF1 || !juanjiMatch)
|
||||
{
|
||||
OneIF = true;//<2F><><EFBFBD><EFBFBD>6.28
|
||||
@ -3644,6 +3612,72 @@ namespace HisenceYoloDetection
|
||||
|
||||
|
||||
}
|
||||
static bool IsMostlyWhite(string imagePath)
|
||||
{
|
||||
Bitmap bitmap = new Bitmap(imagePath);
|
||||
int width = bitmap.Width;
|
||||
int height = bitmap.Height;
|
||||
|
||||
int blackCount = 0;
|
||||
int whiteCount = 0;
|
||||
|
||||
for (int y = 0; y < height; y++)
|
||||
{
|
||||
for (int x = 0; x < width; x++)
|
||||
{
|
||||
Color pixelColor = bitmap.GetPixel(x, y);
|
||||
int r = pixelColor.R;
|
||||
int g = pixelColor.G;
|
||||
int b = pixelColor.B;
|
||||
|
||||
// <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA>ɫ
|
||||
if (r <= 70 && g <= 70 && b <= 70)
|
||||
{
|
||||
blackCount++;
|
||||
}
|
||||
else
|
||||
{
|
||||
whiteCount++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int totalPixels = width * height;
|
||||
double blackRatio = (double)blackCount / totalPixels;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD>0.6<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>false<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>true
|
||||
return blackRatio < 0.6;
|
||||
}
|
||||
static string matchBtnColor(Mat img, Rect rect)
|
||||
{
|
||||
// <20><>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
Mat roi = new Mat(img, rect);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>ɫ
|
||||
Scalar mean = Cv2.Mean(roi);
|
||||
|
||||
// <20><>ȡƽ<C8A1><C6BD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB>RGBֵ
|
||||
double r = mean.Val2;
|
||||
double g = mean.Val1;
|
||||
double b = mean.Val0;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD>Ҷ<EFBFBD>ֵ
|
||||
double averageGray = (r + g + b) / 3;
|
||||
|
||||
// <20>ж<EFBFBD><D0B6><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>
|
||||
if (averageGray < 60)
|
||||
{
|
||||
return "<22><>ɫ";
|
||||
}
|
||||
else if (averageGray >= 60 && averageGray <= 150)
|
||||
{
|
||||
return "<22><>ɫ";
|
||||
}
|
||||
else
|
||||
{
|
||||
return "<22><>ɫ";
|
||||
}
|
||||
}
|
||||
|
||||
private void bnGetParam2_Click_1(object sender, EventArgs e)
|
||||
{
|
||||
@ -3765,5 +3799,10 @@ namespace HisenceYoloDetection
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void label27_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user