Flutter Android application for NOVA, a low-cost assistive vision app for blind and visually impaired users in Cameroon. Provides real-time obstacle detection, OCR, scene description, CFA franc currency identification, and face recognition via on-device TFLite inference and audio-first TTS output.
# NOVA Mobile Application
Navigational Object and Voice Assistant
| Field | Value |
| --- | --- |
| **Framework** | Flutter 3.22+ (Dart 3.4+) |
| **Platform** | Android API 26 (Android 8.0) and above |
| **Architecture** | Clean Architecture + BLoC |
| **On-device ML** | TensorFlow Lite 2.14+ |
| **On-device OCR** | Google ML Kit Text Recognition v2 |
| **TTS** | Android TextToSpeech API (flutter_tts) |
| **Voice Input** | speech_to_text |
| **Local DB** | SQLite via Drift ORM |
| **License** | MIT |
---
## What This Repository Contains
This is the Flutter Android application that the end user installs on their phone. It captures camera frames, runs on-device ML inference for obstacle detection and currency classification, reads text via ML Kit OCR, recognises enrolled faces, requests cloud-assisted scene descriptions from the *nova-backend* server, and delivers all output as spoken audio via the Android TTS engine.
The application is designed for blind and visually impaired users in Cameroon. All safety-critical features (obstacle detection, OCR, currency detection) work fully offline. The phone is worn rear-camera-outward on a chest lanyard so the camera has a clear forward field of view during navigation.
## Features
| Module | ID | Works Offline | Description |
| --- | --- | --- | --- |
| Obstacle Detection | MOD-01 | Yes | Real-time forward obstacle detection with directional TTS alerts |
| Text Reading (OCR) | MOD-02 | Yes | Camera-based text recognition read aloud via TTS |
| Scene Description | MOD-03 | No (cloud) | Natural-language scene description via backend BLIP-2 |
| Currency Detection | MOD-04 | Yes | CFA franc denomination identification (500–10000 FCFA) |
| Face Recognition | MOD-05 | Partial | Enrolled contact recognition; large galleries use cloud matching |
## Project Structure
```text
lib/
├── main.dart # App entry point
├── injection_container.dart # GetIt dependency injection
├── core/ # Shared: TTS, …