Generate SSD OCR bridge from typed Jerboa
ober
f061fab902b09e1ed57d10ba23c8f9e867556855
--- a/.build.yml +++ b/.build.yml @@ -5,7 +5,7 @@ packages: - make=4.4.1-r4 sources: # Build dependency: full immutable commit, mirrored in dependencies.lock.json. - - "https://git.sr.ht/~lisp/jerboa#1a1b380b52cb6eeaf1397adfffd73e1c4c8d035c" + - "https://git.sr.ht/~lisp/jerboa#fbc5e8d648f2c9df4f1a9e347229b676a7c7d22e" # The second source is the build subject selected by the SourceHut submitter. - https://git.sr.ht/~lisp/jerboa-android tasks: @@ -14,6 +14,6 @@ tasks: test "$(apk info -v chez-scheme)" = chez-scheme-10.3.0-r2 test "$(apk info -v git)" = git-2.54.0-r0 test "$(apk info -v make)" = make-4.4.1-r4 - test "$(git -C ../jerboa rev-parse HEAD)" = 1a1b380b52cb6eeaf1397adfffd73e1c4c8d035c - test "$(git -C ../jerboa rev-parse 'HEAD^{tree}')" = d01e22a97edcd50394e707154cb8c45e50dfd683 + test "$(git -C ../jerboa rev-parse HEAD)" = fbc5e8d648f2c9df4f1a9e347229b676a7c7d22e + test "$(git -C ../jerboa rev-parse 'HEAD^{tree}')" = 7166bcd63d031c3beefd2edc73c48b365476da3c JERBOA="chez --libdirs .:../jerboa/lib --script" make test --- a/dependencies.lock.json +++ b/dependencies.lock.json @@ -11,8 +11,8 @@ "generator_runtime": { "name": "jerboa", "repository": "https://git.sr.ht/~lisp/jerboa", - "commit": "1a1b380b52cb6eeaf1397adfffd73e1c4c8d035c", - "tree": "d01e22a97edcd50394e707154cb8c45e50dfd683" + "commit": "fbc5e8d648f2c9df4f1a9e347229b676a7c7d22e", + "tree": "7166bcd63d031c3beefd2edc73c48b365476da3c" }, "assurance_tools": { "osv_scanner": { --- a/scripts/verify-supply-chain.sh +++ b/scripts/verify-supply-chain.sh @@ -3,8 +3,8 @@ set -eu repo=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd -P) lock="$repo/dependencies.lock.json" -jerboa_commit=1a1b380b52cb6eeaf1397adfffd73e1c4c8d035c # gitsafe:ignore -jerboa_tree=d01e22a97edcd50394e707154cb8c45e50dfd683 # gitsafe:ignore +jerboa_commit=fbc5e8d648f2c9df4f1a9e347229b676a7c7d22e # gitsafe:ignore +jerboa_tree=7166bcd63d031c3beefd2edc73c48b365476da3c # gitsafe:ignore gradle_sha=20f1b1176237254a6fc204d8434196fa11a4cfb387567519c61556e8710aed78 jdk_macos_sha=8fa1eff40bb637a33613b2ccb8b12c70dc3661cc22cf8e784943715769a05336 jdk_linux_sha=d8afc263758141a66e0e3aafc321e783f7016696f4eaea067d340a269037d331 --- a/templates/ssd-review.ss +++ b/templates/ssd-review.ss @@ -11408,35 +11408,72 @@ (nativeDetectionRootError rootJson)))) (nullable-none NativeDetection)) (nativeDetectionFromJsonRoot rootJson))))))))))))) - (kotlin-file-lines "com/sfb/ssdreview/SsdOcr.kt" - ( - "package com.sfb.ssdreview" - "" - "import android.content.Context" - "import android.graphics.Bitmap" - "import com.google.android.gms.tasks.Tasks" - "import com.google.mlkit.vision.common.InputImage" - "import com.google.mlkit.vision.text.TextRecognition" - "import com.google.mlkit.vision.text.latin.TextRecognizerOptions" - "" - "object SsdOcr {" - " val patterns: List<OcrPattern> = ocrPatterns()" - "" - " fun recognizeWords(bitmap: Bitmap): List<OcrWord> {" - " val recognizer = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)" - " return try {" - " val result = Tasks.await(recognizer.process(InputImage.fromBitmap(bitmap, 0)))" - " val words = ssdOcrCollectWordsFromBlocks(result.textBlocks)" - " words" - " } catch (_: Exception) {" - " emptyList()" - " } finally {" - " recognizer.close()" - " }" - " }" - "" - "}" - )) + (typed-kotlin-file "com/sfb/ssdreview/SsdOcr.kt" + (kotlin-imports (android graphics Bitmap) + (com google android gms tasks Tasks) + (com google mlkit vision common InputImage) + (com google mlkit vision text Text) + (com google mlkit vision text Text TextBlock) + (com google mlkit vision text TextRecognition) + (com google mlkit vision text TextRecognizer) + (com google mlkit vision text latin TextRecognizerOptions)) + (typed-library (com sfb ssdreview) + (export SsdOcr) + (type Bitmap) + (type Exception) + (type InputImage) + (type Int32) + (type OcrPattern) + (type OcrWord) + (type Text) + (type TextBlock) + (type TextRecognizer) + (type TextRecognizerOptions) + (type TextTask) + (object SsdOcr + (extern (ocrPatternsRaw) : (List OcrPattern) + (kotlin-call ocrPatterns)) + (extern (textRecognizerDefaultOptions) : TextRecognizerOptions + (kotlin-value TextRecognizerOptions DEFAULT_OPTIONS)) + (extern (textRecognitionGetClient + (options : TextRecognizerOptions)) : TextRecognizer + (kotlin-call TextRecognition getClient)) + (extern (inputImageFromBitmap + (bitmap : Bitmap) + (rotation : Int32)) : InputImage + (kotlin-call InputImage fromBitmap)) + (extern (textRecognizerProcess + (recognizer : TextRecognizer) + (image : InputImage)) : TextTask + (kotlin-member-call process)) + (extern (tasksAwaitText (task : TextTask)) : Text + (kotlin-call Tasks await)) + (extern (textBlocks (result : Text)) : (List TextBlock) + (kotlin-member-get textBlocks)) + (extern (textRecognizerClose (recognizer : TextRecognizer)) : Unit + (kotlin-member-call close)) + (val patterns : (List OcrPattern) + (ocrPatternsRaw)) + (def (recognizeWords (bitmap : Bitmap)) : (List OcrWord) + (let ((recognizer + (textRecognitionGetClient + (textRecognizerDefaultOptions)))) + (try + (let ((result + (tasksAwaitText + (textRecognizerProcess + recognizer + (inputImageFromBitmap bitmap (int32 0)))))) + (let ((words + (ssdOcrCollectWordsFromBlocks + (textBlocks result)))) + (begin + (textRecognizerClose recognizer) + words))) + (catch (error : Exception) + (begin + (textRecognizerClose recognizer) + (mutable-list-empty OcrWord))))))))) (kotlin-file-lines "com/sfb/ssdreview/SsdReviewView.kt" ( "package com.sfb.ssdreview"