feat(ocr): manuelle Box-Korrektur vor OCR-Parsing (#327) #431

Merged
pm-bot merged 1 commit from feat/327-line-box-review into main 2026-06-02 01:04:13 +02:00
Collaborator

Summary

Zwischenschritt nach ML Kit, bevor parseText läuft. User sieht die erkannten Zeilen-Boxen auf dem Foto und kann sie kuratieren — ML-Kit-Aussetzer (vergessene Zeilen, zu kleine Frames, zwei Zeilen in einem Frame) bleiben so nicht bis in die finale Liste hängen.

  • Tap = ignore (rot)
  • Long-press = Edit-Modus für die Box: 4 Corner-Handles für Resize, Body-Drag verschiebt, Toolbar mit Aktivieren/Mit-mergen/Löschen
  • '+' erstellt eine neue Box im Zentrum, sofort im Edit-Modus
  • Weiter: re-OCR via ML Kit auf jeder dirty Box (neu/resized/merged) → parseText

Pure-Module

  • apps/mobile/src/services/line-curation.ts — fromOcrLines / toggleIgnore / mergeLines / resizeLine / createLine / deleteLine + dirty-Tracking (17 Vitest-Cases)
  • apps/mobile/src/services/crop-math.tsimageRectToContainer als Inverse von containerToImageRect (1 zusätzlicher Test)

Out-of-scope (Follow-ups)

  • Server-OCR-Pfad: noch ohne Box-Review (Server liefert keine Zeilen-Frames mit). Bleibt bei direktem Review.

Fixes #327.

Test plan

  • Vitest line-curation (17 grün), crop-math (11 grün), gesamtes Mobile-Package (89 grün)
  • tsc --noEmit clean
  • Device-Test: Long-press → Edit-Modus mit Handles funktioniert (initial-Bug mit as never-Cast gefixed)
  • Device-Test: Tap = ignore (rot), Merge zweier Boxen joined Text & Frame
## Summary Zwischenschritt nach ML Kit, bevor parseText läuft. User sieht die erkannten Zeilen-Boxen auf dem Foto und kann sie kuratieren — ML-Kit-Aussetzer (vergessene Zeilen, zu kleine Frames, zwei Zeilen in einem Frame) bleiben so nicht bis in die finale Liste hängen. - **Tap** = ignore (rot) - **Long-press** = Edit-Modus für die Box: 4 Corner-Handles für Resize, Body-Drag verschiebt, Toolbar mit Aktivieren/Mit-mergen/Löschen - **'+'** erstellt eine neue Box im Zentrum, sofort im Edit-Modus - **Weiter**: re-OCR via ML Kit auf jeder dirty Box (neu/resized/merged) → parseText ### Pure-Module - `apps/mobile/src/services/line-curation.ts` — fromOcrLines / toggleIgnore / mergeLines / resizeLine / createLine / deleteLine + dirty-Tracking (17 Vitest-Cases) - `apps/mobile/src/services/crop-math.ts` — `imageRectToContainer` als Inverse von containerToImageRect (1 zusätzlicher Test) ### Out-of-scope (Follow-ups) - Server-OCR-Pfad: noch ohne Box-Review (Server liefert keine Zeilen-Frames mit). Bleibt bei direktem Review. Fixes #327. ## Test plan - [x] Vitest line-curation (17 grün), crop-math (11 grün), gesamtes Mobile-Package (89 grün) - [x] tsc --noEmit clean - [x] Device-Test: Long-press → Edit-Modus mit Handles funktioniert (initial-Bug mit `as never`-Cast gefixed) - [x] Device-Test: Tap = ignore (rot), Merge zweier Boxen joined Text & Frame
feat(ocr): manuelle Box-Korrektur vor OCR-Parsing (#327)
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
5683a3a34e
Neuer Lines-Review-Screen zwischen ML Kit und Review: User kuratiert die
erkannten Boxen, bevor parseText läuft. Tap = ignore, Long-press = Edit
mit 4 Resize-Handles + Body-Drag, Toolbar mit Aktivieren/Mit-mergen/
Löschen, '+' fügt fehlende Box hinzu. Re-OCR via ML Kit auf jeder dirty
Box (neu/resized/merged), Original-Text als Fallback.

Pure line-curation Modul (17 Tests) + imageRectToContainer in crop-math.
pm-bot merged commit 3abf9a8173 into main 2026-06-02 01:04:13 +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!431
No description provided.