work on new crop

This commit is contained in:
Boki 2026-02-12 22:07:54 -05:00
parent 9845e7f9bf
commit a7fab55d44
22 changed files with 975 additions and 10 deletions

View file

@ -48,6 +48,15 @@ class Request
[JsonPropertyName("params")]
public DiffOcrParams? Params { get; set; }
[JsonPropertyName("edgeParams")]
public EdgeOcrParams? EdgeParams { get; set; }
[JsonPropertyName("cursorX")]
public int? CursorX { get; set; }
[JsonPropertyName("cursorY")]
public int? CursorY { get; set; }
}
class RegionRect
@ -336,6 +345,47 @@ sealed class DiffOcrParams
public override string ToString() => $"[{Crop}] [{Ocr}]";
}
sealed class EdgeCropParams
{
[JsonPropertyName("darkThresh")]
public int DarkThresh { get; set; } = 40;
[JsonPropertyName("minDarkRun")]
public int MinDarkRun { get; set; } = 200;
[JsonPropertyName("runGapTolerance")]
public int RunGapTolerance { get; set; } = 15;
[JsonPropertyName("rowThreshDiv")]
public int RowThreshDiv { get; set; } = 40;
[JsonPropertyName("colThreshDiv")]
public int ColThreshDiv { get; set; } = 8;
[JsonPropertyName("maxGap")]
public int MaxGap { get; set; } = 15;
[JsonPropertyName("trimCutoff")]
public double TrimCutoff { get; set; } = 0.3;
[JsonPropertyName("ocrPad")]
public int OcrPad { get; set; } = 10;
public override string ToString() =>
$"darkThresh={DarkThresh} minRun={MinDarkRun} runGap={RunGapTolerance} maxGap={MaxGap} trimCutoff={TrimCutoff:F2} rowDiv={RowThreshDiv} colDiv={ColThreshDiv}";
}
sealed class EdgeOcrParams
{
[JsonPropertyName("crop")]
public EdgeCropParams Crop { get; set; } = new();
[JsonPropertyName("ocr")]
public OcrParams Ocr { get; set; } = new();
public override string ToString() => $"[{Crop}] [{Ocr}]";
}
class TestCase
{
[JsonPropertyName("id")]
@ -404,3 +454,95 @@ class TuneResponse
[JsonPropertyName("iterations")]
public int Iterations { get; set; }
}
// ── Crop test models ────────────────────────────────────────────────────────
class PointXY
{
[JsonPropertyName("x")]
public int X { get; set; }
[JsonPropertyName("y")]
public int Y { get; set; }
}
class CropTestCase
{
[JsonPropertyName("id")]
public string Id { get; set; } = "";
[JsonPropertyName("image")]
public string Image { get; set; } = "";
[JsonPropertyName("snapshotImage")]
public string SnapshotImage { get; set; } = "";
[JsonPropertyName("topLeft")]
public PointXY TopLeft { get; set; } = new();
[JsonPropertyName("bottomRight")]
public PointXY BottomRight { get; set; } = new();
[JsonPropertyName("cursorX")]
public int? CursorX { get; set; }
[JsonPropertyName("cursorY")]
public int? CursorY { get; set; }
}
class CropTestResult
{
[JsonPropertyName("id")]
public string Id { get; set; } = "";
[JsonPropertyName("iou")]
public double IoU { get; set; }
[JsonPropertyName("expected")]
public RegionRect Expected { get; set; } = new();
[JsonPropertyName("actual")]
public RegionRect? Actual { get; set; }
[JsonPropertyName("deltaTop")]
public int DeltaTop { get; set; }
[JsonPropertyName("deltaLeft")]
public int DeltaLeft { get; set; }
[JsonPropertyName("deltaRight")]
public int DeltaRight { get; set; }
[JsonPropertyName("deltaBottom")]
public int DeltaBottom { get; set; }
}
class CropTestResponse
{
[JsonPropertyName("ok")]
public bool Ok => true;
[JsonPropertyName("method")]
public string Method { get; set; } = "";
[JsonPropertyName("avgIoU")]
public double AvgIoU { get; set; }
[JsonPropertyName("results")]
public List<CropTestResult> Results { get; set; } = [];
}
class CropTuneResponse
{
[JsonPropertyName("ok")]
public bool Ok => true;
[JsonPropertyName("bestAvgIoU")]
public double BestAvgIoU { get; set; }
[JsonPropertyName("bestParams")]
public DiffCropParams BestParams { get; set; } = new();
[JsonPropertyName("iterations")]
public int Iterations { get; set; }
}