feat(ocr): on-device OCR via Google ML Kit Text Recognition v2 (#423) #424

Merged
admin-mrrm merged 2 commits from feat/423-mlkit-spike into main 2026-05-28 17:35:15 +02:00
Owner

Closes #423.
Replaces #422 (TrOCR-handwritten, verworfen wegen IAM-Bias).

Was sich ändert

  • @react-native-ml-kit/text-recognition als Dep
  • Schlanke apps/mobile/src/services/ocr-service.ts (delegiert direkt an ML Kit)
  • apps/mobile/app/ocr-spike.tsx mit Galerie + Foto-Picker (hidden route mrrmlab:///ocr-spike)
  • Route in _layout.tsx registriert

Kein ORT/ONNX/Tokenizer-Stack mehr — Sprach-agnostisches Latin-Skript-Modell wird beim ersten Aufruf via Play Services nachgeladen (~20 MB), Inferenz on-device.

Test-Ergebnis (handschriftliches „Oregano")

Stack Output CER Latenz
TrOCR-handwritten (#421, verworfen) „consequences" ≈ 1.0 476 ms
ML Kit (dieser PR) „Oreg amo" ≈ 0.28 (1 Subst n→m, 1 Space-Insertion) 486 ms

Acceptance-Criterion CER ≤ 0.30 erfüllt — Pivot ist die richtige Entscheidung.

Was offen bleibt

  • Breiterer Sample-Test (5-10 Wörter aus echten Einkaufszetteln) zur Robustheits-Absicherung — separate Validierungs-Story
  • Produktiv-Integration in den Image-Preview-Flow — Folge-Story (Spike-Screen wird dann entfernt oder umgenutzt)

Reviewer-Notes

  • Native-Modul-Linking: @react-native-ml-kit/text-recognition autolinkt via Expo prebuild im dev-client (kein Config-Plugin nötig). EAS-Build de0beabb erfolgreich, manuell verifiziert.
  • Keine Veränderung an bestehender onnxruntime-react-native-Nutzung (bleibt für NLI-Classifier in Mail-Categorize).
Closes #423. Replaces #422 (TrOCR-handwritten, verworfen wegen IAM-Bias). ## Was sich ändert - `@react-native-ml-kit/text-recognition` als Dep - Schlanke `apps/mobile/src/services/ocr-service.ts` (delegiert direkt an ML Kit) - `apps/mobile/app/ocr-spike.tsx` mit Galerie + Foto-Picker (hidden route `mrrmlab:///ocr-spike`) - Route in `_layout.tsx` registriert Kein ORT/ONNX/Tokenizer-Stack mehr — Sprach-agnostisches Latin-Skript-Modell wird beim ersten Aufruf via Play Services nachgeladen (~20 MB), Inferenz on-device. ## Test-Ergebnis (handschriftliches „Oregano") | Stack | Output | CER | Latenz | |---|---|---|---| | TrOCR-handwritten (#421, verworfen) | „consequences" | ≈ 1.0 | 476 ms | | **ML Kit (dieser PR)** | **„Oreg amo"** | **≈ 0.28** (1 Subst `n→m`, 1 Space-Insertion) | **486 ms** | Acceptance-Criterion CER ≤ 0.30 erfüllt — Pivot ist die richtige Entscheidung. ## Was offen bleibt - Breiterer Sample-Test (5-10 Wörter aus echten Einkaufszetteln) zur Robustheits-Absicherung — separate Validierungs-Story - Produktiv-Integration in den Image-Preview-Flow — Folge-Story (Spike-Screen wird dann entfernt oder umgenutzt) ## Reviewer-Notes - Native-Modul-Linking: `@react-native-ml-kit/text-recognition` autolinkt via Expo prebuild im dev-client (kein Config-Plugin nötig). EAS-Build `de0beabb` erfolgreich, manuell verifiziert. - Keine Veränderung an bestehender `onnxruntime-react-native`-Nutzung (bleibt für NLI-Classifier in Mail-Categorize).
feat(ocr): mobile on-device OCR via Google ML Kit Text Recognition v2 (#423)
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
63f3132105
Pivot von TrOCR-handwritten (#421, PR #422 verworfen). TrOCR/IAM lieferte
auf handschriftlichem „Oregano" → „consequences" (CER ≈ 1.0) wegen
English-Cursive Vokabular-Bias. ML Kit nutzt ein Latin-Skript-Modell ohne
Sprach-Prior — sollte deutsche Handschrift sauberer lesen.

- @react-native-ml-kit/text-recognition als Dep
- Schlanke ocr-service.ts (delegiert direkt an ML Kit API)
- ocr-spike.tsx mit Galerie + Foto-Picker (kein Sample-Bild nötig)
- Route in _layout.tsx registriert (`mrrmlab:///ocr-spike`)

On-device: Modell-Download einmalig via Play Services (~20 MB, nicht im
APK gebündelt). Inferenz lokal, Bild-Daten verlassen das Gerät nicht.
Merge branch 'main' into feat/423-mlkit-spike
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
fb4d2e3b6f
admin-mrrm deleted branch feat/423-mlkit-spike 2026-05-28 17:35:15 +02:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
admin-mrrm/mrrmlabapp!424
No description provided.