v3.1.0 — silent OCR calibration + real offline dictionary (backend only, UI unchanged)
Silent OCR calibration
Every photo now passes through a calibration pipeline that is completely invisible to the child:
- LayoutNormalizer — picture-book reading order (left page before right on spreads), page-number exclusion, skewed-decoration filtering
- OcrQualityGate — confidence thresholds (accept ≥0.88 / silently correct 0.40–0.88 / silently drop <0.40), with automatic heuristic fallback when ML Kit reports no usable confidence
- OcrCorrectionStage — Gemma fixes obvious OCR errors ("litt1e → little") via JSON-constrained structured generation; malformed output always degrades to the raw text, never crashes
- OcrCorrectionValidator + ProtectedTokenDetector — deterministic guards: numbers, names, dates and quoted text can never be "corrected"; rewrites and fabrications are rejected
No retake prompts, no error bubbles — bad text is silently repaired or silently dropped and the companion talks about the picture instead.
Real offline dictionary for lookup_word
- WordNet 3.1 (≈147k English entries) + CC-CEDICT (≈188k Chinese entries) compiled into a ~31 MB SQLite database bundled in the APK
- Definitions are age-shaped (toddler gets one sentence; preadolescent gets the full gloss); misses degrade gracefully — the model never fabricates a definition
- Hard-verified by JVM and on-device tests that exercise the exact production query
More
- 4th fallback level: deterministic template reading when the model is unavailable — the app never dead-ends
- Self-made 8-category picture-book OCR test set + on-device CER/WER metrics (clear pages: 0–6% CER)
- Richer OCR structure (bounding boxes, corner points, angles, per-line language)
- UI, the 3-tool set, settings, TTS, and privacy posture are all unchanged; models still download on first launch
Install
- Download
LumiRead-v3.1.0.apkbelow and install it (signed with the same key as v3.0.0 — installs as an update). - Models are not bundled. Follow README §6 to download Gemma 4 E2B/E4B and the TTS model, or
adb pushthem to/sdcard/Android/data/com.lumiread/files/.
⚠ The offline dictionary is bundled — no extra download needed for
lookup_word.
Full changelog: see README §13.