feat(ocr): ML Kit-Integration in Image-Preview-Flow #426

Merged
admin-mrrm merged 1 commit from feat/425-mlkit-image-preview-integration into main 2026-05-28 19:28:51 +02:00
Owner

Summary

Integriert on-device OCR (ML Kit, ausgeliefert via #423/#424) produktiv in den regulären Image-Preview-Flow. Ersetzt den temporären Spike-Screen.

Changes

Backend (@mrrmlab/api)

  • Neuer Endpoint POST /lists/parse-text für Plaintext-Input (z.B. aus on-device OCR). Wiederverwendet OcrService.parseItems() → History-Fuzzy-Match, Dedup, Suggestions.
  • 4 Controller-Tests (empty body / blank text / history forwarding / dev-user fallback). 444/444 grün.

API-Client + Hook (@mrrmlab/api-client, @mrrmlab/feature-shopping-list)

  • ListsResource.parseText(text) mit Zod-validierter Response.
  • useParseShoppingListText Mutation-Hook.

Mobile (@mrrmlab/mobile)

  • OCR_MODELS bietet mlkit/de (Deutsch, On-Device, Default) + easyocr/de (Server, Backup).
  • image-preview.tsx verzweigt auf Model:
    • mlkit/deocrService.recognize()parseText → Review
    • Server-Models → bestehender parseImage-Flow (unverändert)
  • ocr-service.ts vereinfacht (kein Progress-API mehr nötig — Mutation-isPending reicht).
  • Spike-Screen + Route entfernt.

Test Plan

  • API: pnpm --filter @mrrmlab/api test → 444/444 grün
  • feature-shopping-list: pnpm --filter @mrrmlab/feature-shopping-list test → 24/24 grün
  • Mobile typecheck: pnpm --filter @mrrmlab/mobile typecheck → clean
  • Device-Acceptance: 5-Wort-Sample (Milch / Brot / Käse / Tomaten / Müsli) per Photo aufnehmen, in Review-Screen ≥4/5 korrekt erkannt. (Kein neuer EAS-Build nötig — ML Kit ist seit #424 in der dev-client-APK; Metro-Reload reicht.)

Closes #425

## Summary Integriert on-device OCR (ML Kit, ausgeliefert via #423/#424) produktiv in den regulären Image-Preview-Flow. Ersetzt den temporären Spike-Screen. ## Changes **Backend** (`@mrrmlab/api`) - Neuer Endpoint `POST /lists/parse-text` für Plaintext-Input (z.B. aus on-device OCR). Wiederverwendet `OcrService.parseItems()` → History-Fuzzy-Match, Dedup, Suggestions. - 4 Controller-Tests (empty body / blank text / history forwarding / dev-user fallback). 444/444 grün. **API-Client + Hook** (`@mrrmlab/api-client`, `@mrrmlab/feature-shopping-list`) - `ListsResource.parseText(text)` mit Zod-validierter Response. - `useParseShoppingListText` Mutation-Hook. **Mobile** (`@mrrmlab/mobile`) - `OCR_MODELS` bietet `mlkit/de` (Deutsch, On-Device, **Default**) + `easyocr/de` (Server, Backup). - `image-preview.tsx` verzweigt auf Model: - `mlkit/de` → `ocrService.recognize()` → `parseText` → Review - Server-Models → bestehender `parseImage`-Flow (unverändert) - `ocr-service.ts` vereinfacht (kein Progress-API mehr nötig — Mutation-`isPending` reicht). - Spike-Screen + Route entfernt. ## Test Plan - [x] API: `pnpm --filter @mrrmlab/api test` → 444/444 grün - [x] feature-shopping-list: `pnpm --filter @mrrmlab/feature-shopping-list test` → 24/24 grün - [x] Mobile typecheck: `pnpm --filter @mrrmlab/mobile typecheck` → clean - [ ] **Device-Acceptance**: 5-Wort-Sample (Milch / Brot / Käse / Tomaten / Müsli) per Photo aufnehmen, in Review-Screen ≥4/5 korrekt erkannt. (Kein neuer EAS-Build nötig — ML Kit ist seit #424 in der dev-client-APK; Metro-Reload reicht.) Closes #425
feat(ocr): ML Kit-Integration in Image-Preview-Flow (#425)
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
c18d4ac0a6
Productive integration of on-device OCR into the regular Image-Preview
flow. Removes temporary spike screen.

Backend:
- New `POST /lists/parse-text` endpoint that runs the existing
  `OcrService.parseItems()` pipeline on plaintext (history-based
  fuzzy matching, dedup, suggestions) without touching pixels.
- 4 controller tests (empty body, blank text, history forwarding,
  dev-user fallback) — all green.

API-Client + Hook:
- `ListsResource.parseText(text)` with zod-validated response.
- `useParseShoppingListText` mutation hook.

Mobile:
- `OCR_MODELS` now offers `mlkit/de` (Deutsch, On-Device, default)
  + `easyocr/de` (Server, Backup).
- `image-preview.tsx` branches on model:
  - `mlkit/de` → `ocrService.recognize()` → `parseText` → Review
  - server models → existing `parseImage` flow (unchanged)
- `ocr-service.ts` simplified (no progress API needed — mutation
  isPending covers it).
- Spike-Screen + Route entfernt.
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!426
No description provided.