public static DiffVect CompDiff(Mat input, Mat comp, BreakDiffDebugReporter reporter) { var processor = new ShiftVecProcessor(input, comp); var vect = processor.GetAllDiffVect(); if (reporter != null) { reporter.ReportStepChanges(processor, vect); } return(vect); }
public static void breakAndDiff(Mat m1, Mat m2, BreakDiffDebugReporter reporter) { var curProcessor = new ShiftVecProcessor(m1, m2); //Mat res = ShiftVecDector.BreakAndNearMatches(m1, m2); var vect = curProcessor.GetAllDiffVect(); Mat res = curProcessor.ShowAllStepChange(vect); reporter.Report(res, vect); }
public void CamTracking(Mat curImg, VidLoc.RealTimeTrackLoc realTimeTrack, PreVidStream vidProvider, IDriver driver, BreakDiffDebugReporter debugReporter) { VidLoc.CamTracking(curImg, realTimeTrack, vidProvider, driver, debugReporter); }
public static void CamTracking(Mat curImg, VidLoc.RealTimeTrackLoc realTimeTrack, PreVidStream vidProvider, IDriver driver, BreakDiffDebugReporter debugReporter) { //realTimeTrack.CurPos = image1Ind; realTimeTrack.LookAfterReset(); if (!realTimeTrack.ShouldStop()) { int origImageInd = realTimeTrack.CurPos; debugReporter.ReportInProcessing(true); VidLoc.FindObjectDown(vidProvider, curImg, realTimeTrack, debugReporter); debugReporter.ReportInProcessing(false); //var lookBackCount = 0; //while (realTimeTrack.diff < 0.5 && lookBackCount < 3) //{ // driver.Stop(); // realTimeTrack.LongLook(); // VidLoc.FindObjectDown(vidProvider, curImg, realTimeTrack, debugReporter); // //info.Text = text = $"Tracked vid at ${image1Ind} cam at ${image2Ind} next point ${realTimeTrack.NextPos} ${realTimeTrack.vect} ===> diff {realTimeTrack.diff} LB {lookBackCount}"; // //Console.WriteLine(text); // lookBackCount++; //} vidProvider.Pos = origImageInd; } driver.Track(realTimeTrack); //if (debugReporter.DebugMode) //{ //Mat m1 = vidProvider.GetCurMat(); //breakAndDiff(m1, curImg, debugReporter); //} }
public static void FindObjectDown(PreVidStream stream, Mat curr, RealTimeTrackLoc prms, BreakDiffDebugReporter reporter) { const int LookBack = 2; int from = prms.CurPos - LookBack; int to = from + prms.LookAfter + LookBack; if (to == 0 || to > stream.Total) { to = stream.Total; } if (from < 0) { from = 0; } var skipAvgs = prms.CurPos >= LookBack ? LookBack : LookBack - prms.CurPos; List <DiffVect> processed = new List <DiffVect>(); //double dxT = 0, dyT = 0; //int numD = 0; for (int pos = from; pos < to; pos++) { var loc = FindInRage(stream, curr, 1, pos, pos + 1); processed.Add(loc); } if (processed[2].Vector.Diff > 0.5) { for (var i = 0; i < LookBack; i++) { processed.RemoveAt(0); } } //processed.OrderByDescending(x => x.Vector.Diff).Take(3); prms.DebugAllLooks = processed; var sorted = SortProcessDiffVects(processed).Take(5); var curMax = sorted.FirstOrDefault(); if (curMax == null || curMax.VidPos >= stream.Total - 1) { Console.WriteLine($"max not found from={from} to={to} total={stream.Total}"); return; } //Console.WriteLine($"max at {curMax.Pos} {curMax.diff.ToString("0.00")}"); prms.NextPos = curMax.VidPos; prms.diff = curMax.Vector.Diff; prms.vect = curMax.Vector; stream.Pos = curMax.VidPos; var diff = CompDiff(curr, stream.GetCurMat(), reporter); //var nextVect = stream.Vectors[curMax.VidPos]; //orig way var nextVect = new DiffVector(sorted.Average(x => x.Vector.X), sorted.Average(y => y.Vector.Y), sorted.Average(d => d.Vector.Diff)); //diff: negative if need to turn left //vect: positive if need to turn left prms.vect = new DiffVector(nextVect.X + (diff.Vector.X / 10.0), nextVect.Y + diff.Vector.Y, diff.Vector.Diff); reporter.InfoReport($"===> {(prms.vect.X>0?"L":"R")} ({prms.vect}) nextX {nextVect.X} diffX {diff.Vector.X} pos {curMax.VidPos}", true); prms.diffVect = diff; prms.nextVect = nextVect; }
public void CamTracking(Mat curImg, VidLoc.RealTimeTrackLoc realTimeTrack, PreVidStream vidProvider, IDriver driver, BreakDiffDebugReporter debugReporter) { debugReporter.ReportInProcessing(true); results = haar.Detect(curImg); result.Width = 0; result.Height = 0; if (results != null && results.Length > 0) { results = results.OrderByDescending(r => r.Width * r.Height).ToArray(); result = results[0]; } debugReporter.ReportInProcessing(false); realTimeTrack.CurPos = 0; DiffVect vect = new DiffVect(); vect.Vector = realTimeTrack.vect; debugReporter.ReportStepChanges(new StepChangeReporter(curImg, results, result), vect); if (result.Width == 0) { //debugReporter.InfoReport($"NA"); driver.Stop(); } else { double diff = (curImg.Width / 2) - ((result.X + result.Width) / 2); //debugReporter.InfoReport($"{(diff > 0? "L":"R") } diff {diff.ToString("0.0")} imw ${((result.X + result.Width) / 2)}"); realTimeTrack.vect = new DiffVector(diff, 0, 0); driver.Track(realTimeTrack); } }