finished candybox

This commit is contained in:
meelstorm
2025-09-18 10:50:50 +02:00
parent dc12b3e51a
commit 6c0b778ba6
9 changed files with 535 additions and 55 deletions

View File

@@ -5,6 +5,7 @@ using OpenCvSharp;
using System.Diagnostics;
using System.Drawing.Imaging;
using System.Text.Json;
using Lindt.Candybox.Demo;
using VisionBuilder.UI.Common.NullClasses;
using Point = System.Drawing.Point;
using Size = OpenCvSharp.Size;
@@ -53,12 +54,12 @@ namespace CandyboxPlugin.Recipe
}
}
public void LearnContours(OpenCvSharp.Point[][] contours, Mat image)
public void LearnContours(OpenCvSharp.Point[][] contours, Mat image, List<VectorLine> cuts)
{
lock (_lockObject)
{
_learnedParameters.Cuts = cuts;
if (_learnedParameters.CandyParameters.Count == 0)//initial learning
{
_learnedParameters.BlisterAngle = _blisterAngle;
@@ -80,8 +81,8 @@ namespace CandyboxPlugin.Recipe
};
p.Histogram.Enqueue(histData);
_learnedParameters.CandyParameters.Add(p);
}
}
else
{
@@ -156,6 +157,15 @@ namespace CandyboxPlugin.Recipe
Mat res = _learner.Eval(resized);
Mat resBlister = _blister.Eval(resized);
var element = Cv2.GetStructuringElement(MorphShapes.Rect, new Size(50, 50));
Mat blisterOpened = resBlister.Threshold(128,255,ThresholdTypes.Binary).MorphologyEx(MorphTypes.Open,element);
resBlister.Dispose();
resBlister = blisterOpened;
Cv2.WaitKey(1);
sw1.Stop();
Console.WriteLine("AI Time:" + sw1.ElapsedMilliseconds);
Mat inverted = null;
@@ -195,32 +205,33 @@ namespace CandyboxPlugin.Recipe
))
.ToList());
var dbg=triangles.Where(x => x.IsInside(points[15])).ToList();
var dbgEdges = Voronoi.Voronoi.GenerateEdgesFromDelaunay(dbg);
foreach (var triangle in dbg)
{
Cv2.Line(
numbersOverlay,
new OpenCvSharp.Point(triangle.Vertices[0].X, triangle.Vertices[0].Y),
new OpenCvSharp.Point(triangle.Vertices[1].X, triangle.Vertices[1].Y),
new Scalar(255, 255, 0, 255), // Aqua color in BGR
1 // Thickness
);
Cv2.Line(
numbersOverlay,
new OpenCvSharp.Point(triangle.Vertices[1].X, triangle.Vertices[1].Y),
new OpenCvSharp.Point(triangle.Vertices[2].X, triangle.Vertices[2].Y),
new Scalar(255, 255, 0, 255), // Aqua color in BGR
1 // Thickness
);
Cv2.Line(
numbersOverlay,
new OpenCvSharp.Point(triangle.Vertices[2].X, triangle.Vertices[2].Y),
new OpenCvSharp.Point(triangle.Vertices[0].X, triangle.Vertices[0].Y),
new Scalar(255, 255, 0, 255), // Aqua color in BGR
1 // Thickness
);
}
//var dbg=triangles.Where(x => x.IsInside(points[15])).ToList();
//var dbgEdges = Voronoi.Voronoi.GenerateEdgesFromDelaunay(dbg);
//foreach (var triangle in dbg)
//{
// Cv2.Line(
// numbersOverlay,
// new OpenCvSharp.Point(triangle.Vertices[0].X, triangle.Vertices[0].Y),
// new OpenCvSharp.Point(triangle.Vertices[1].X, triangle.Vertices[1].Y),
// new Scalar(255, 255, 0, 255), // Aqua color in BGR
// 1 // Thickness
// );
// Cv2.Line(
// numbersOverlay,
// new OpenCvSharp.Point(triangle.Vertices[1].X, triangle.Vertices[1].Y),
// new OpenCvSharp.Point(triangle.Vertices[2].X, triangle.Vertices[2].Y),
// new Scalar(255, 255, 0, 255), // Aqua color in BGR
// 1 // Thickness
// );
// Cv2.Line(
// numbersOverlay,
// new OpenCvSharp.Point(triangle.Vertices[2].X, triangle.Vertices[2].Y),
// new OpenCvSharp.Point(triangle.Vertices[0].X, triangle.Vertices[0].Y),
// new Scalar(255, 255, 0, 255), // Aqua color in BGR
// 1 // Thickness
// );
//}
//foreach (Edge edge in dbgEdges)
//{
// Cv2.Line(
@@ -257,7 +268,19 @@ namespace CandyboxPlugin.Recipe
// );
//}
}
foreach (VectorLine cut in _learnedParameters.Cuts)
{
Cv2.Line(res, new OpenCvSharp.Point(cut.StartPoint.X, cut.StartPoint.Y),
new OpenCvSharp.Point(cut.EndPoint.X, cut.EndPoint.Y), new Scalar(0, 0, 0), 3);
}
//foreach (VectorLine cut in _learnedParameters.Cuts)
//{
// Cv2.Line(numbersOverlay, new OpenCvSharp.Point(cut.StartPoint.X, cut.StartPoint.Y),
// new OpenCvSharp.Point(cut.EndPoint.X, cut.EndPoint.Y), new Scalar(255, 0, 255,255), 3);
//}
var mat = res;
Cv2.Threshold(mat, mat, 128, 255, ThresholdTypes.Binary);