feat(ocr): per-line crops + main-cluster filter #428

Merged
pm-bot merged 1 commit from feat/ocr-per-line-crops into main 2026-05-29 00:00:24 +02:00
Collaborator

Summary

  • Pro ML-Kit-Zeile ein eigener Bild-Crop (expo-image-manipulator) → erscheint im Review-Screen über jedem Eintrag, sodass User Tipp-Fehler des OCR-Modells am Originalbild manuell korrigieren kann.
  • filterToMainCluster() splittet erkannte Zeilen nach X-Position und behält nur den Cluster mit der größten vertikalen Ausdehnung — kickt Branding-Spalten (Logo, Footer) raw aus dem ML-Kit-Output, bevor parseText läuft.
  • Per-Line-Architektur: 1 Zeile → 1 Crop → 1 parseText-Call → Items mit garantiertem 1:1-Crop. Vorher: Server-OCR-Re-Order zerstörte Crop↔Item-Matching.

Verifiziert

  • Mobile typecheck grün
  • Device-Test (Foto handschriftliche Liste): TENADO-Branding wird gefiltert, 10 Items mit korrekt zugeordneten Crops im Review-Screen.

Follow-up

  • #427 — Pre-Crop UX (User markiert Listenbereich vor OCR, ergänzt den heuristischen Cluster-Filter).
  • Restliche OCR-Misreads sind ML-Kit-Modell-Schwäche bei deutscher Handschrift (siehe auch TrOCR-Pivot-Plan).

Release

Kandidat für v0.6.1 Patch.

Test plan

  • pnpm --filter @mrrmlab/mobile exec tsc --noEmit grün
  • Device: Foto + Analysieren → Branding rausgefiltert, Crops im Review sichtbar
## Summary - Pro ML-Kit-Zeile ein eigener Bild-Crop (`expo-image-manipulator`) → erscheint im Review-Screen über jedem Eintrag, sodass User Tipp-Fehler des OCR-Modells am Originalbild manuell korrigieren kann. - `filterToMainCluster()` splittet erkannte Zeilen nach X-Position und behält nur den Cluster mit der größten vertikalen Ausdehnung — kickt Branding-Spalten (Logo, Footer) raw aus dem ML-Kit-Output, bevor `parseText` läuft. - Per-Line-Architektur: 1 Zeile → 1 Crop → 1 `parseText`-Call → Items mit garantiertem 1:1-Crop. Vorher: Server-OCR-Re-Order zerstörte Crop↔Item-Matching. ## Verifiziert - Mobile typecheck grün - Device-Test (Foto handschriftliche Liste): TENADO-Branding wird gefiltert, 10 Items mit korrekt zugeordneten Crops im Review-Screen. ## Follow-up - #427 — Pre-Crop UX (User markiert Listenbereich vor OCR, ergänzt den heuristischen Cluster-Filter). - Restliche OCR-Misreads sind ML-Kit-Modell-Schwäche bei deutscher Handschrift (siehe auch TrOCR-Pivot-Plan). ## Release Kandidat für v0.6.1 Patch. ## Test plan - [x] `pnpm --filter @mrrmlab/mobile exec tsc --noEmit` grün - [x] Device: Foto + Analysieren → Branding rausgefiltert, Crops im Review sichtbar
feat(ocr): per-line crops + main-cluster filter for on-device OCR
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
513430c63f
ML Kit liefert pro Zeile Frame-Koordinaten. Jede Zeile wird einzeln aus dem
Quellbild geschnitten und durch parseText geschickt — Items behalten ihren
Crop 1:1, der im Review-Screen über jedem Eintrag erscheint.

filterToMainCluster() splittet die Zeilen nach X-Position und behält nur
den Cluster mit der größten vertikalen Ausdehnung. Killt Branding-Spalten
(Logo, Footer) automatisch, ohne dass User vor-croppen muss.

Pre-Crop-UX (manuelles Rechteck) verfolgen wir in #427.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
pm-bot merged commit 4d87145354 into main 2026-05-29 00:00:24 +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!428
No description provided.