OCR: Falsche Bildausrichtung und überlagertes Review-Layout #85

Closed
opened 2026-04-26 10:05:55 +02:00 by admin-mrrm · 2 comments
Owner

Bugs (Branch feat/ocr-image-preprocessing)

1. Bild wird kopfüber/gedreht ausgewertet

Bei Hochformat-Fotos vom Handy ignoriert PIL die EXIF-Orientation-Tags (3/6/8). Pixel werden nicht physisch rotiert, der Tag wird nur gesetzt. Folge: Das Vorschaubild im Review-Screen erscheint kopfüber, und TrOCR bekommt ein gedrehtes Bild – die Deskew-Korrektur fängt das nicht ab (nur ±45°).

Fix: ImageOps.exif_transpose(image) direkt nach Image.open() in apps/ocr/app/ocr.py::extract_text.

2. Erkannte Artikel überlagern das Vorschaubild

Im Review-Screen liegen Vorschaubild und Item-Liste in einem YStack mit flex={1} ohne Scroll-Container. Bei mehr Items als Bildschirmhöhe überlappen sie das Bild statt zu scrollen.

Fix: Inhalte (Image + Items + Add-Input) in einen Tamagui <ScrollView> packen; Confirm-Button bleibt fixiert unten.

3. (bereits behoben) sentencepiece fehlte

OCR-Container crashte beim Start für trocr-small-handwritten mit ModuleNotFoundError: tiktoken bzw. Converting from SentencePiece and Tiktoken failed. Behoben in Commit b40c562 (sentencepiece zu requirements.txt).

Separat (nicht Teil dieses Issues)

Die Erkennungsqualität für deutsche Handschrift ist mit den TrOCR-IAM-Modellen (englisch trainiert) inhärent begrenzt. Sinnloser Output bei sauberer Eingabe ist erwartetes Verhalten – braucht eigenes Issue für Modellwechsel/Finetuning.

## Bugs (Branch `feat/ocr-image-preprocessing`) ### 1. Bild wird kopfüber/gedreht ausgewertet Bei Hochformat-Fotos vom Handy ignoriert PIL die EXIF-`Orientation`-Tags (3/6/8). Pixel werden nicht physisch rotiert, der Tag wird nur gesetzt. Folge: Das Vorschaubild im Review-Screen erscheint kopfüber, und TrOCR bekommt ein gedrehtes Bild – die Deskew-Korrektur fängt das nicht ab (nur ±45°). **Fix:** `ImageOps.exif_transpose(image)` direkt nach `Image.open()` in `apps/ocr/app/ocr.py::extract_text`. ### 2. Erkannte Artikel überlagern das Vorschaubild Im Review-Screen liegen Vorschaubild und Item-Liste in einem `YStack` mit `flex={1}` ohne Scroll-Container. Bei mehr Items als Bildschirmhöhe überlappen sie das Bild statt zu scrollen. **Fix:** Inhalte (Image + Items + Add-Input) in einen Tamagui `<ScrollView>` packen; Confirm-Button bleibt fixiert unten. ### 3. (bereits behoben) `sentencepiece` fehlte OCR-Container crashte beim Start für `trocr-small-handwritten` mit `ModuleNotFoundError: tiktoken` bzw. `Converting from SentencePiece and Tiktoken failed`. Behoben in Commit b40c562 (sentencepiece zu requirements.txt). ## Separat (nicht Teil dieses Issues) Die Erkennungsqualität für deutsche Handschrift ist mit den TrOCR-IAM-Modellen (englisch trainiert) inhärent begrenzt. Sinnloser Output bei sauberer Eingabe ist erwartetes Verhalten – braucht eigenes Issue für Modellwechsel/Finetuning.
Author
Owner

Alle 3 Bugs sind inzwischen behoben — Ticket kann geschlossen werden.

Bug 1 (EXIF-Rotation): ImageOps.exif_transpose(image) ist in apps/ocr/app/ocr.py an beiden Image.open-Stellen (Zeilen 366, 388) drin.

Bug 2 (Review-Layout): packages/feature-shopping-list/src/components/review-screen.tsx wrappt die Inhalte in einen <ScrollView flex={1} contentContainerStyle={{...}}> (Zeile 118ff). Items kollidieren nicht mehr mit dem Vorschaubild.

Bug 3 (sentencepiece): Schon im Issue-Body als behoben markiert (Commit b40c562).

Alle 3 Bugs sind inzwischen behoben — Ticket kann geschlossen werden. **Bug 1 (EXIF-Rotation):** `ImageOps.exif_transpose(image)` ist in `apps/ocr/app/ocr.py` an beiden Image.open-Stellen (Zeilen 366, 388) drin. **Bug 2 (Review-Layout):** `packages/feature-shopping-list/src/components/review-screen.tsx` wrappt die Inhalte in einen `<ScrollView flex={1} contentContainerStyle={{...}}>` (Zeile 118ff). Items kollidieren nicht mehr mit dem Vorschaubild. **Bug 3 (sentencepiece):** Schon im Issue-Body als behoben markiert (Commit b40c562).
Collaborator

Beide reproduzierbaren Bugs sind in nachfolgender Arbeit gefixt:

Bug 1 (EXIF-Orientation): ImageOps.exif_transpose() in apps/ocr/app/ocr.py (Zeile 366, 388) — Server-OCR-Path rotiert jetzt korrekt. Der primäre On-Device-Path (ML Kit, seit v0.6.0) übernimmt EXIF-Orientation nativ auf Android.

Bug 2 (Overlap): ReviewScreen in packages/feature-shopping-list/src/components/review-screen.tsx:146 wickelt Inhalte in <ScrollView flex={1} contentContainerStyle={{...}}> — scrollt jetzt korrekt.

Bug 3: Vom Reporter selbst als gefixt markiert (sentencepiece in requirements.txt).

Kein Re-Repro mehr nötig — Issue schließen.

Beide reproduzierbaren Bugs sind in nachfolgender Arbeit gefixt: **Bug 1 (EXIF-Orientation):** `ImageOps.exif_transpose()` in `apps/ocr/app/ocr.py` (Zeile 366, 388) — Server-OCR-Path rotiert jetzt korrekt. Der primäre On-Device-Path (ML Kit, seit v0.6.0) übernimmt EXIF-Orientation nativ auf Android. **Bug 2 (Overlap):** `ReviewScreen` in `packages/feature-shopping-list/src/components/review-screen.tsx:146` wickelt Inhalte in `<ScrollView flex={1} contentContainerStyle={{...}}>` — scrollt jetzt korrekt. **Bug 3:** Vom Reporter selbst als gefixt markiert (sentencepiece in requirements.txt). Kein Re-Repro mehr nötig — Issue schließen.
Sign in to join this conversation.
No project
No assignees
2 participants
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#85
No description provided.