faster minimap load

This commit is contained in:
Boki 2026-02-15 11:22:20 -05:00
parent d7948fd4a7
commit a3001e36e4
2 changed files with 16 additions and 9 deletions

View file

@ -10,7 +10,7 @@ public class MinimapCapture : IFrameConsumer, IDisposable
private readonly MinimapConfig _config;
private readonly WallColorTracker _colorTracker;
private readonly IScreenCapture _backend; // kept for debug capture paths
private int _modeCheckCounter;
private int _modeCheckCounter = 9; // trigger mode detection on first frame
private MinimapMode _detectedMode = MinimapMode.Overlay;
private MinimapFrame? _lastFrame;

View file

@ -42,11 +42,14 @@ public class WorldMap : IDisposable
_frameCount, mode, wallMask.Width, wallMask.Height,
_position.X, _position.Y, needsBootstrap, _prevWallMask != null);
var wallCountBefore = Cv2.CountNonZero(wallMask);
// Block-based noise filter: only needed for overlay (game effects bleed through)
if (!isCorner)
// Skip during warmup — we need walls to seed the canvas, confidence handles noise
if (!isCorner && !needsBootstrap)
{
var cleanFraction = FilterNoisyBlocks(wallMask, classifiedMat);
if (cleanFraction < 0.25 && !needsBootstrap)
if (cleanFraction < 0.25)
{
Log.Information("Noise filter: {Clean:P0} clean, skipping ({Ms:F1}ms)",
cleanFraction, sw.Elapsed.TotalMilliseconds);
@ -54,8 +57,10 @@ public class WorldMap : IDisposable
}
}
// Frame deduplication: skip if minimap hasn't scrolled yet
if (_prevWallMask != null && _frameCount > 1)
var wallCountAfter = Cv2.CountNonZero(wallMask);
// Frame deduplication: skip if minimap hasn't scrolled yet (but always allow warmup through)
if (!needsBootstrap && _prevWallMask != null && _frameCount > 1)
{
using var xor = new Mat();
Cv2.BitwiseXor(wallMask, _prevWallMask, xor);
@ -86,8 +91,9 @@ public class WorldMap : IDisposable
}
else
{
Log.Information("Warmup frame {N}/{Total}: stitch={Ms:F1}ms",
_frameCount, _config.WarmupFrames, sw.Elapsed.TotalMilliseconds);
Log.Information("Warmup frame {N}/{Total}: walls={WallsBefore}→{WallsAfter}(filtered) frameSize={FS} stitch={Ms:F1}ms",
_frameCount, _config.WarmupFrames, wallCountBefore, wallCountAfter,
wallMask.Width, sw.Elapsed.TotalMilliseconds);
}
return _position;
}
@ -529,8 +535,9 @@ public class WorldMap : IDisposable
_prevWallMask != null ? $"{_prevWallMask.Width}x{_prevWallMask.Height}" : "null");
_prevWallMask?.Dispose();
_prevWallMask = null;
// Don't reset _frameCount or _consecutiveMatchFails —
// template matching continues seamlessly with the new frame size
// Force one re-bootstrap stitch so the new mode seeds walls on the canvas.
// This triggers needsBootstrap=true (>= 30), skips dedup, stitches boosted.
_consecutiveMatchFails = 30;
}
public void Dispose()