feat(mobile): Bild-Vorverarbeitung und Zeilensegmentierung on-device #81
Labels
No labels
app/archiv
app/einkaufslisten
app/imap-client
app/wissensbasis
arch-answered
arch-question
area/api
area/auth
area/infra
area/mobile
area/shared
area/ui
area/web
portfolio-status
prio/high
prio/low
prio/medium
roadmap/public
size/l
size/m
size/s
size/xl
size/xs
status/blocked
status/needs-info
type/bug
type/chore
type/docs
type/feature
type/idea
type/refactor
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
admin-mrrm/mrrmlabapp#81
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Ziel
Die Bild-Vorverarbeitung (Deskew, CLAHE, Bilateral-Filter) und Zeilensegmentierung die bisher auf dem Server in Python/OpenCV läuft, auf dem Gerät in JavaScript/nativ implementieren.
Hintergrund
TrOCR erwartet einzelne Zeilenbilder als Input. Auf dem Server übernimmt
ocr.pydie Segmentierung via OpenCV. On-Device muss das in React Native passieren.Optionen
Option A:
@techstark/opencv-js(empfohlen)OpenCV.js Port für React Native – enthält alle benötigten Funktionen:
cv.threshold(Otsu-Binarisierung)cv.dilate(Zeilensegmentierung)cv.findContourscv.createCLAHEcv.bilateralFilterOption B: Expo Image Manipulator + eigene Algorithmen
Nur für einfache Ops (Resize, Rotate) geeignet; Contour-Detection fehlt.
Option C: Native Modul
OpenCV Android/iOS direkt einbinden – maximale Performance, höchster Aufwand.
Aufgaben
@techstark/opencv-jsKompatibilität mit Expo prüfenpreprocessImage(uri: string): Promise<ImageData>implementierensplitLines(imageData: ImageData): Promise<ImageData[]>implementierenAkzeptanzkriterien
Story-Split (per Arch-Konsultation #413 + Fact-Sheet #77):\n\n- Pre-req: Neu eröffneter Spike #414 — CRAFT-Line-Detection on-device (ONNX-Export + RN-Integration, analog #77).\n- Dieses Issue (#81): Bleibt offen, blockiert by #414. Scope nach #414-Done: TrOCR-Eingabe-Crops aus CRAFT-Bounding-Boxes erzeugen + Preprocessing-Pipeline (Deskew, Resize, Normalize) auf Mobile bauen.\n\nServer-OCR (
apps/ocr/app/ocr.py) hat CRAFT bereits — Mobile braucht das Äquivalent für den Offline-Pfad.Closed — v0.5-OCR pivotet weg von On-Device
Privacy-Klarstellung des Stakeholders: Eigener Server = trusted compute zone für nicht-sensible Daten (Einkaufszettel zählen dazu). Damit fällt der zentrale Argumentations-Treiber für On-Device-OCR weg.
Was übrig bliebe für On-Device:
→ Kosten/Nutzen rechtfertigt On-Device-Pipeline nicht.
Was stattdessen passiert: v0.5-OCR-Hauptdeliverable wird #415 Fuzzy-Match server-side. Roh-OCR-Qualität (Server CER 0.67, TrOCR 0.51 — siehe #416) wird über Sortiments-Lookup für den User nutzbar gemacht.
Spike-Investitionen nicht verloren: #77-Code (ORT-RN-Integration, KV-cache-Decode, Asset-Bundling) bleibt im Repo als Reference für ein hypothetisches künftiges On-Device-Comeback.