feat(ocr): pre-crop UI im image-preview (#326) #430

Merged
pm-bot merged 1 commit from feat/326-pre-crop-ui into main 2026-05-31 02:27:26 +02:00
Collaborator

Summary

Vor der Analyse zieht der User einen Rahmen über das Foto — nur dieser Bereich geht an die OCR (ML Kit oder Server). Tischrand, Hintergrund und Nachbar-Zettel landen nicht mehr im Input.

  • Pure Crop-Math (apps/mobile/src/services/crop-math.ts) mit 10 Vitest-Cases — computeDisplayedImage / containerToImageRect / clampRectInImage / isFullImageRect.
  • CropOverlay-Komponente: vier Eck-Handles auf Reanimated SharedValues + Gesture-Handler, dimmed Maske außerhalb des Rahmens, axis-aligned Rechteck mit MIN_RECT=40, Clamping auf displayed-image-Bounds.
  • Wiring im Image-Preview: Image.getSize() lädt natürliche Pixel, onLayout misst Container, initialer Rahmen = volle displayed-Bounds, Crop via expo-image-manipulator vor OCR. Bei Rotation wird der Rahmen zurückgesetzt.

Fixes #326.

Test plan

  • Vitest crop-math (10 grün)
  • tsc --noEmit clean
  • Device-Test: Rahmen ziehen, Analysieren croppt — bestätigt vom User
## Summary Vor der Analyse zieht der User einen Rahmen über das Foto — nur dieser Bereich geht an die OCR (ML Kit oder Server). Tischrand, Hintergrund und Nachbar-Zettel landen nicht mehr im Input. - Pure Crop-Math (apps/mobile/src/services/crop-math.ts) mit 10 Vitest-Cases — computeDisplayedImage / containerToImageRect / clampRectInImage / isFullImageRect. - CropOverlay-Komponente: vier Eck-Handles auf Reanimated SharedValues + Gesture-Handler, dimmed Maske außerhalb des Rahmens, axis-aligned Rechteck mit MIN_RECT=40, Clamping auf displayed-image-Bounds. - Wiring im Image-Preview: Image.getSize() lädt natürliche Pixel, onLayout misst Container, initialer Rahmen = volle displayed-Bounds, Crop via expo-image-manipulator vor OCR. Bei Rotation wird der Rahmen zurückgesetzt. Fixes #326. ## Test plan - [x] Vitest crop-math (10 grün) - [x] tsc --noEmit clean - [x] Device-Test: Rahmen ziehen, Analysieren croppt — bestätigt vom User
feat(ocr): pre-crop UI im image-preview (#326)
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
bf3545c152
Vier Eck-Handles auf Reanimated SharedValues + Gesture-Handler, dimmed
Maske außerhalb des Rahmens, axis-aligned Rechteck mit MIN_RECT=40 und
Bounds-Clamping auf die displayed-image-Bounds. Pure Crop-Math als
testbares Modul (10 Vitest-Cases). Crop wird vor ML-Kit und Server-OCR
via expo-image-manipulator angewendet; bei Rotation wird der Rahmen
zurückgesetzt.
pm-bot merged commit 32ea98885b into main 2026-05-31 02:27:26 +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!430
No description provided.