feat(ocr): mobile on-device TrOCR-handwritten — Retry mit Handwriting-Modell #421
Labels
No labels
app/archiv
app/einkaufslisten
app/imap-client
app/wissensbasis
arch-answered
arch-question
area/api
area/auth
area/infra
area/mobile
area/shared
area/ui
area/web
portfolio-status
prio/high
prio/low
prio/medium
roadmap/public
size/l
size/m
size/s
size/xl
size/xs
status/blocked
status/needs-info
type/bug
type/chore
type/docs
type/feature
type/idea
type/refactor
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
admin-mrrm/mrrmlabapp#421
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Kontext
Spike #77 wurde am 2026-05-28 als Technical-Yes / Business-No geschlossen. Der Privacy-Grund fiel weg (eigener Server = trusted, Einkaufszettel ≠ sensitive), und der getestete Modell-Cut (
trocr-small-printed) hat CER 0.51 auf echten handgeschriebenen Einkaufszetteln (#416).Nach v0.5.0-Ship zeigte sich aber: Fuzzy-Match kann Garbage-OCR nicht retten, wenn Roh-Confidence bei 5-35% liegt (Screenshot vom Stakeholder). Web bleibt mit EasyOCR brauchbar für gedruckte Listen; handgeschriebene Listen sind weiter unlesbar.
Stakeholder-Entscheidung: handgeschriebene OCR mobile-only akzeptabel, weil:
Was Spike-#77 ÜBER bleibt
Im Repo (auf archivierter Branch
archive/spike-77-ocr-mobile):apps/mobile/src/services/ocr-service.ts— Singleton mit ORT-RN + KV-cache Greedy-Decode (10 grüne Specs)apps/mobile/src/services/ocr-model-assets.ts— Metro asset-handle wrapperapps/mobile/app/ocr-spike.tsx— Debug-Screenapps/mobile/plugins/with-onnxruntime-package.js— Expo prebuild plugin.onnxals asset-ext registriertdecoder_with_past-Threading verifiziert (bit-identisch mit no-past)Aufgabe
Pivot-Hypothese: Die TrOCR-Pipeline-Mechanik aus Spike-#77 ist solide; nur das Modell war falsch.
Xenova/trocr-small-handwrittenist Drop-in-kompatibel (gleiche Architektur, gleiche Config-Werte, ONNX-int8 vorhanden, gleicher Encoder-Input).Verifizierte Drop-in-Kompatibilität (Xenova/trocr-small-handwritten):
decoder_layers: 6 ✅ (wie small-printed)image_size: 384 ✅decoder_start_token_id: 2 ✅eos_token_id: 2 ✅tokenizer.jsonvorhanden ✅encoder_model_quantized.onnx: 22 MBdecoder_model_quantized.onnx: 38 MBdecoder_with_past_model_quantized.onnx: 37 MBDaher: kein ONNX-Export, kein Python-Step. Nur File-Download +
MODEL_REPO-Konstante tauschen.Akzeptanzkriterien
feat/4XX-ocr-handwritten-mobilevonmainmit Spike-77-ScaffoldingMODEL_REPO = 'Xenova/trocr-small-handwritten'inocr-service.tsapps/mobile/assets/ocr-model/(gitignored, EAS-bundled)pnpm --filter @mrrmlab/mobile typecheck+ ocr-service.spec.ts grün/ocr-spikeRoute liefert nicht-leeres OCR-Ergebnis auf einem echten handschriftlichen Einkaufszettel-CropRisiken / offene Fragen
trocr-small-handwrittenist primär auf IAM-Handwriting-Datensatz finetuned. Real-Einkaufszettel-CER könnte ähnlich schlecht sein wie small-printed. Falls > 0.3, eskalieren zutrocr-base-handwritten(4× Parameter, ~280 MB Bundle).Folge-Entscheidungspunkt
Nach Device-Test mit Real-Daten:
base-handwritten(Bundle ~280 MB) — Trade-off entscheidenPivot zu #423 — TrOCR-handwritten verworfen.
Device-Test mit handschriftlichem „Oregano" lieferte Output „consequences" (Total-Halluzination, CER ≈ 1.0). Root-Cause: IAM-Handwriting-Korpus ist English-Cursive → das Decoder-GPT-2 hat einen starken englischen Vokabular-Prior, der deutsche Wörter in plausible englische Tokens zwingt. Da
-base-handwrittendenselben Trainings-Korpus nutzt, wurde die größere Variante nicht mehr getestet (gleiche Failure-Mode erwartet).Neuer Spike: #423 — Google ML Kit Text Recognition v2 (on-device, sprach-agnostisches Latin-Skript-Modell).
Geschlossen als „verworfen" — Pivot zu #423 / PR #424 (ML Kit) ist erfolgt und gemerged. TrOCR-handwritten ist nicht weiter verfolgt; die Use-Case-Lücke (on-device OCR deutsche Handschrift) wird durch ML Kit abgedeckt.