AndroVision

Turn a dash-mounted phone into an on-device perception instrument

Status
Research
Version
1.0.0
Platform
Android app
License
MIT
01 · Problem

Getting metric depth, occupancy and vehicle re-observation from a single phone camera without a network in the perception path. Monocular depth models give relative depth, so DEPTHFIELD solves the scale per keyframe from a ground-plane anchor and ego-motion, and reports non-metric output when no anchor is solvable.

02 · Architecture

How it is put together.

AndroVision is a native Android app that turns a forward-facing phone into a pseudo perception sensor for vehicles, with three modules sharing one frame stream: DEPTHFIELD (live monocular metric depth), OCCUGRID (ego-centric bird's-eye occupancy grid) and FLEETEYE (privacy-preserving vehicle re-identification). All inference runs locally through LiteRT and classical computer vision, and every head has a classical fallback so the app runs with no model weights. Each module also emits dataset packets (depth samples, occupancy snapshots, re-ID observations). The README describes it as an honest prototype.

Shared coreFrame schedulerDEPTHFIELDOCCUGRIDFLEETEYEPacket storedetections, tracks, posedetections, tracks, poseframesframesframesframestracked vehiclestracked vehiclesmetric depth at footprintsmetric depth at footpri…DepthSampleDepthSampleOccupancySnapshotOccupancySnapshotReIDObservationReIDObservationShared coreFrame schedulerDEPTHFIELDOCCUGRIDFLEETEYEPacket storedetections, tracks, posedetections, tracks, poseframesframesframesframestracked vehiclestracked vehiclesmetric depth at footprintsmetric depth at footpri…DepthSampleDepthSampleOccupancySnapshotOccupancySnapshotReIDObservationReIDObservation
FIG. 01Modules and data flows, from the repository layout and documentation.
  1. 1

    Shared core

    CameraX pipeline, sensors, pose provider, detector, ByteTrack-style tracker, ground lifting, privacy blurrer, packets

  2. 2

    Frame scheduler

    Shared stage at fastest cadence, fan-out to per-module workers, thermal duty

  3. 3

    DEPTHFIELD

    Depth model, metric solver, renderer

  4. 4

    OCCUGRID

    Occupancy grid, drivable area, BEV renderer

  5. 5

    FLEETEYE

    Re-ID embedder, perceptual hash, session gallery

  6. 6

    Packet store

    Room store, manifests, storage cap; optional WorkManager uploader

03 · Capabilities

Specification.

DEPTHFIELD
Affine scale/shift solve (1/Z = a·disp + b) per keyframe via RANSAC on ground-plane pixels, cross-checked by ego-motion; per-pixel confidence; tap to measure
OCCUGRID
Log-odds BEV grid, 0.2 m cells over 40 m × 24 m, ego-motion compensated; free / static / dynamic / unknown cells
FLEETEYE
Vehicle appearance embedding + 64-bit difference hash of plate region (no plate text or image stored); in-session matching; disabled without a re-ID model
Forward collision warning
Nearest in-path distance from the depth corridor + ego speed → TTC caution/warning with audible alert (driver aid, not certified)
Models
Optional INT8 .tflite heads (depth, SSD detector, drivable segmentation, plate region, re-ID) with classical fallbacks; GPU → NNAPI → CPU
Diagnostics
Per-stage latency p50/p95, per-module frame rate, thermal duty, event log
Privacy
Faces and plate regions blurred before any keyframe write; no continuous video; uploader off by default
Platform
arm64 Android, API 26+
Runs on
Native Android app built with Gradle and installed via adb on an arm64 API 26+ device
Stack
  • Kotlin
  • CameraX
  • TensorFlow Lite (LiteRT)
  • ML Kit face detection
  • Room
  • WorkManager
  • OkHttp
  • Kotlin coroutines
  • Play Services Location