On-device platform that turns an ordinary Android phone into a roadside perception unit — detecting and tracking vehicles and people, and reading license plates, in real time. The entire vision pipeline runs on the device, with no cloud in the loop and no connectivity required for perception.
Built to bring situational awareness to patrol vehicles and checkpoints — on the edge, live.
Project Status
A working Android application that detects, tracks and reads license plates in real time — fully on-device. Actively developed as a professional engineering showcase.
Bringing computer vision to the roadside is hard. A patrol vehicle or checkpoint needs to answer three questions continuously — what is around me, what is it, and have I seen it before? — often with no reliable connectivity and on affordable hardware. Cloud-based vision adds latency, cost, privacy exposure, and a hard dependency on the network exactly where it is weakest.
RoadVision AI runs the entire perception pipeline on the device: object detection, multi-object tracking with persistent IDs, and license-plate OCR — in real time, offline. It reads the scene like a human operator would, keeps a geolocated log of what it saw, and never sends the live video anywhere. The result is situational awareness with privacy by design.
| Feature | What it delivers |
|---|---|
| On-device Object Detection | Recognizes people, cars, motorcycles, trucks, buses and bicycles with a neural network running entirely on the phone. |
| Persistent Multi-object Tracking | Assigns a stable id to each object across frames so the same vehicle is never counted twice — IoU association with a motion-aware fallback. |
| License-plate OCR | Reads Brazilian Mercosul and legacy plates in real time, with character-level correction and fuzzy de-duplication. |
| Smooth, Real-time Pipeline | Detection inference runs in a background isolate, keeping the UI fluid even on mid-range hardware. |
| Adjustable Overlay | Toggle which categories are drawn on the camera to cut visual clutter — without stopping detection underneath. |
| Geolocated Capture & History | Every plate is stamped with GPS coordinates and persisted locally, browsable and openable in Maps. |
| Vehicle Data Lookup | Optional enrichment — make, model, color, year and theft alerts — via an external API. |
| Privacy by Design | The live video never leaves the device; the only optional network call is the vehicle-data lookup. |
A clean, layered design where dependencies always point inward — the domain knows nothing about Flutter, the camera, or any external service. New detectors, trackers and data sources plug in by implementing a domain interface, without touching the core (Open/Closed).
┌─────────────────────────────────────────────────────┐
│ Presentation · MVVM │
│ Camera View → ViewModel → Overlay painter │
└─────────────────────────────────────────────────────┘
│ depends on
▼
┌─────────────────────────────────────────────────────┐
│ Domain · core │
│ Entities · Use cases · Repository interfaces · │
│ Pure tracking service (no framework imports) │
└─────────────────────────────────────────────────────┘
▲ implemented by
│
┌─────────────────────────────────────────────────────┐
│ Data │
│ On-device OCR · Edge AI detector (isolate) │
│ local database · vehicle lookup · GPS · alerts │
└─────────────────────────────────────────────────────┘
wired once at a single composition root (core/di)
dependencies point inward — Clean Architecture + MVVM
| Area | Technology |
|---|---|
| Framework & Language | Flutter · Dart 3 (strict, null-safe) |
| Edge AI Runtime | On-device deep-learning inference (background isolate) |
| Object Detection | On-device neural object detection |
| OCR | On-device text recognition |
| Tracking | Real-time multi-object tracking with persistent IDs |
| Local Storage | Embedded on-device database |
| Geolocation | Device GPS |
| Architecture & Principles | Clean Architecture · MVVM · SOLID |
| Testing & Quality | flutter test · flutter analyze · GitHub Actions CI |
The camera feed is turned into actionable, geolocated evidence through a real-time pipeline:
Camera frame ─► Detect & Track ─► Read Plate ─► De-dup ─► Persist + Geotag ─► Alert
(background isolate (on-device OCR)
· neural detector
· persistent IDs)
- Detect & Track — preprocessing and inference run off the platform thread in a background isolate; detections feed a tracker that assigns each object a persistent id.
- Read Plate — a parallel OCR pass recognizes text, normalizes it, and matches Mercosul / legacy plate patterns.
- De-dup — exact and near-match de-duplication avoids re-logging the same plate.
- Persist + Geotag — new plates are stored locally with GPS coordinates and capture history.
- Alert — a local notification fires the moment a new plate is captured.
- ByteTrack-style tracking (Kalman + two-stage association) for tougher scenes
- License-free detector upgrade (EfficientDet-Lite / YOLOX) for higher accuracy
- Associate each read plate with its tracked vehicle (
track_id↔ plate) - Traffic-light and stop-sign detection
- Session report screen with GPS track export
- Landscape / dash-mount orientation support
- iOS support
This repository presents the product, its architecture, and the engineering decisions behind it — clearly and professionally.
It is a portfolio-grade engineering showcase built to demonstrate real-time, privacy-preserving, on-device computer vision and a disciplined Clean Architecture + MVVM codebase, without exposing any proprietary business logic or confidential data.
Built to read the road in real time — on the device.




