text_sight 1.0.0
text_sight: ^1.0.0 copied to clipboard
Live, on-device text recognition: Apple Vision on iOS, ML Kit on Android. The text-scanning sibling to mobile_scanner.
1.0.0 - 2026-09-15 #
Added #
- [#59] TextSightEngine.confidenceScale reports what a confidence number means on this device: visionGraded, visionCoarse or mlKit. Branch on its isRankable flag to know whether sorting lines inside one capture tells you anything.
- [#59] DarwinOptions.minimumTextHeight sets the smallest text Vision will read, as a fraction of the frame height. A higher floor is faster and blind to small print, and it stays frame-relative even when roi narrows the scan box.
- example: run the live scanner on the iOS Simulator with a stand-in camera
Changed #
- [#59] BREAKING: Vision-only settings moved under TextSightOptions.darwin: recognitionLevel (was level), usesLanguageCorrection, preferredLanguages (was languages) and minimumTextHeight. Only roi stays top-level, since it is the one setting both platforms honour. Migrate TextSightOptions(level: x, languages: y) to TextSightOptions(darwin: DarwinOptions(recognitionLevel: x, preferredLanguages: y)).
- [#59] BREAKING: TextSightController.updateOptions replaces updateRecognitionLevel, updateLanguages and updateRegionOfInterest, and a single options getter replaces the three read-backs. It sets everything at once, so read options first when you only mean to change one: updateOptions(TextSightOptions(roi: r, darwin: controller.options.darwin)).
- [#59] BREAKING: RecognitionLevel is now just fast or accurate, and level.usesLanguageCorrection is gone, split out into DarwinOptions.usesLanguageCorrection. So fast can correct and accurate can skip it. The live path corrects by default now, where fast used to leave it off: pass usesLanguageCorrection: false to keep the old behaviour.
- [#59] BREAKING: RecognizedLine.confidence is a required non-null double. Both engines always send a value, so drop the (confidence ?? 1) guard the old docs recommended. A number still only means something next to the scale that produced it, which TextSightEngine.confidenceScale now reports.
- [#45] BREAKING: Surface the capture session state as controller.sessionState, with stop() renamed pauseRecognition() and isRunning renamed isRecognizing. Rename both call sites.
- Bump pigeon to 29.0.1 and refresh the on-device reports
Fixed #
- [#59] Android no longer takes recognition settings it silently drops. setRecognitionLevel and setLanguages were empty no-ops that reported success, and the controller read them straight back as if they had landed. The Vision-only settings now sit behind darwin, so there is nothing left to accept and discard.
- [#59] Changing several settings at once no longer tears. The iOS side took its state lock once per setter, so a frame caught between two calls could be read with the new level and the old languages. updateOptions applies the whole set under one lock hold.
- [#59] RecognizedLine.confidence no longer documents a null that never arrives. The old docs had you threshold with (confidence ?? 1) while warning in the same breath that the scales are not comparable, and gave you no way to find out which scale you had.
- ios: name the iOS 26 sensitive-content interruption reason
0.2.2 - 2026-09-05 #
Fixed #
- [#60] never write a blank chart
- [#58] Decide Vision's text-height floor instead of inheriting it
- [#61] Decide the capture resolution instead of inheriting it
0.2.1 - 2026-09-04 #
0.2.0 - 2026-08-31 #
0.1.1 - 2026-06-24 #
0.1.0 - 2026-06-22 #
Added #
- [#7] TextSightModel.ensureReady() and TextSightModel.readiness — app-controlled, non-blocking on-device model loading, with a sealed TextSightReadinessState (ModelReady / ModelDownloading / ModelUnavailable)
- [#7] com.lahaluhem.text_sight.useBundled Gradle flag — bundle the ML Kit model into the APK (instant, offline) instead of the default unbundled Play Services download
Changed #
- [#7] Android no longer prefetches the OCR model at install time; the unbundled model now downloads on first use (or when TextSightModel.ensureReady() is called)
0.0.1 - 2026-06-20 #
Added #
- Live, on-device camera text recognition via
TextSightControllerandTextSightView— Apple Vision on iOS, ML Kit on Android — with a per-frame results stream and a confidence-coloured overlay hook. - Native-only recognition, no bundling: iOS links zero third-party ML libraries (Apple Vision is a system framework — no GoogleMLKit, no arm64 / Swift Package Manager warnings); ML Kit stays in the Android Gradle build, never in your pubspec.
- One-shot still-image recognition via
TextSight.recognizeImage(bytes) andTextSight.recognizePath(file) — no camera, session, or permission. - Recognizer configuration on the controller: region of interest (a normalized
Rect), recognition level, language preferences, and torch. - A unified result model — per-line confidence and normalized
[0,1]top-left bounding boxes, identical across platforms, with a rotation-aware preview.
