Add typed SSD OCR geometry helpers
ober
8a5fdd3580ce018bfd074da3f4e969586980b7f7
--- a/templates/ssd-review.ss +++ b/templates/ssd-review.ss @@ -501,10 +501,14 @@ (typed-kotlin-file "com/sfb/ssdreview/OcrGeometry.kt" (typed-library (com sfb ssdreview) - (export centerInside rectArea normalizeRect) + (export centerInside rectArea normalizeRect rectsOverlap distanceToRect) (type Float32) (type FloatArray) (type Int32) + (def (floatArrayGetOrZero (items : FloatArray) (index : Int32)) : Float32 + (if (> (float-array-length items) index) + (float-array-ref items index) + (float32 0.0))) (def (centerInside (bbox : FloatArray) (rect : FloatArray)) : Bool (if (or (< (float-array-length bbox) (int32 4)) (< (float-array-length rect) (int32 4))) @@ -545,8 +549,32 @@ (if (> (float-array-ref rect (int32 1)) (float-array-ref rect (int32 3))) (float-array-ref rect (int32 1)) - (float-array-ref rect (int32 3))))))) - + (float-array-ref rect (int32 3))))) + (def (rectsOverlap (a : FloatArray) (b : FloatArray)) : Bool + (and (and (<= (floatArrayGetOrZero a (int32 0)) + (floatArrayGetOrZero b (int32 2))) + (>= (floatArrayGetOrZero a (int32 2)) + (floatArrayGetOrZero b (int32 0)))) + (and (<= (floatArrayGetOrZero a (int32 1)) + (floatArrayGetOrZero b (int32 3))) + (>= (floatArrayGetOrZero a (int32 3)) + (floatArrayGetOrZero b (int32 1)))))) + (def (distanceToRect (x : Float32) (y : Float32) (rect : FloatArray)) : Float32 + (let ((left (floatArrayGetOrZero rect (int32 0))) + (top (floatArrayGetOrZero rect (int32 1))) + (right (floatArrayGetOrZero rect (int32 2))) + (bottom (floatArrayGetOrZero rect (int32 3)))) + (let ((dx (if (< x left) + (- left x) + (if (> x right) + (- x right) + (float32 0.0)))) + (dy (if (< y top) + (- top y) + (if (> y bottom) + (- y bottom) + (float32 0.0))))) + (+ dx dy)))))) (typed-kotlin-file "com/sfb/ssdreview/VisionPixels.kt" (typed-library (com sfb ssdreview)