GuideLensApp is an accessibility-focused on-device navigation system that helps visually impaired users navigate indoor environments independently.
Built entirely in Kotlin with Jetpack Compose, it combines real-time object detection, semantic floor segmentation, and intelligent pathfinding to deliver turn-by-turn audio guidance through an intuitive AR interface β all processed locally on the device.
β
100 % On-Device β No internet required, full privacy
β
Audio-First Design β Text-to-Speech announcements for all navigation events
β
Production-Ready β Device-adaptive configuration, robust error handling
β
Optimized Performance β INT8 quantization, NNAPI acceleration, 15β20 FPS
β
Open Source β GPL-3.0 license, fully documented and community-driven
-
Real-Time Object Detection β YOLO World v2 (INT8) detects 80 object classes at 640Γ640 resolution with 150β250 ms latency.
Supports 16 navigable targets:chair, door, table, bed, couch, toilet, sink, refrigerator, stairs, person, bottle, cup, laptop, phone, keyboard, mouse. -
Semantic Floor Segmentation β Custom-trained PP-LiteSeg (INT8) identifies walkable surfaces.
NEW: Enhanced with bilinear filtering to robustly handle multi-colored and textured floors. -
Intelligent Pathfinding β A* search on a down-sampled grid + VFH (Vector Field Histogram).
NEW: Implements Hysteresis and Low-Pass Filtering to prevent direction jitter and provide smooth, stable guidance. -
Pure Pursuit Control β Robotics-grade trajectory tracking with 100 px look-ahead; generates natural commands:
βGo straightβ, βBear rightβ, βVeer leftβ.
- AI-Powered Analysis β Combines on-device ML Kit Text Recognition with Gemini Pro API.
- Instant Summaries β Reads complex medicine labels and provides concise, spoken summaries (e.g., "Paracetamol, used for pain relief").
- Privacy-First β Images are processed securel, with text-only data sent to the API.
-
Text-to-Speech Integration
- βNavigating to [object]β on start
- β[Object] foundβ on first detection
- Natural, slower speech rate (0.7x) for clarity
- Turn commands every 2.5 s (max)
- βArrived at destinationβ on goal
- βNavigation stoppedβ on exit
-
Voice Command Control (Fully Implemented)
- "Navigate to [object]" β Starts navigation hands-free.
- "Stop" β Ends current session.
- "Describe Scene" β Provides a summary of visible objects.
- Hold-to-Speak β Intuitive long-press gesture on the bottom bar.
-
App Polish & Battery Saver
- Smart Lifecycle β Pauses heavy ML/Camera tasks when app is backgrounded to save battery.
- Robust Permissions β Smart handling of denied permissions with direct settings access.
-
Neon High-Contrast UI
- Vibrating colors (Neon Green/Yellow on Black) for maximum visibility.
- Pulsing animations for active states (Scanning, Target Acquired).
| Component | Technology | Details |
|---|---|---|
| Platform | Android API 24+ | Nougat 7.0 and later |
| Language | Kotlin 100 % | Modern coroutines-based |
| UI | Jetpack Compose | Material Design 3 UI |
| Architecture | MVVM | ViewModel, StateFlow separation |
| ML Runtime | ONNX Runtime 1.16.0 | Cross-platform INT8 optimized |
| OCR | ML Kit Text Recognition | On-device fast extraction |
| AI API | Google Gemini Pro | Intelligent summarization |
| Sensors | Fusion (Accel/Mag/Gyro) | Stable heading calculation |
Model Pipeline
- YOLO World v2 β PyTorch β ONNX β INT8 Quantization
- PP-LiteSeg β Custom PyTorch Training β ONNX β INT8 Quantization
Why ONNX Runtime?
15β20 % faster INT8 inference than TFLite, superior NNAPI integration, cross-platform portability.
- Manhattan-distance heuristic.
- VFH (Vector Field Histogram) for local obstacle avoidance.
-
Smoothing: Low-pass filter on output angle (
$\alpha = 0.3$ ). - Hysteresis: Cost bonus to previous sector to prevent decision flipping.
- Curvature
$\kappa = 2 \cdot \sin(\alpha) / L$ - Generates natural language commands ("Bear left", "Turn sharp right").
| Tier | FPS | Resolution | ML Threads | Acceleration |
|---|---|---|---|---|
| High-End (β₯ 8 GB RAM, β₯ 8 cores) | 20 | 1280Γ720 | 4 | NNAPI + FP16 |
| Mid-Range (4β6 GB RAM) | 15 | 960Γ540 | 2 | CPU only INT8 |
Dynamic profiling adjusts thresholds, frame rates, and resolution at runtime.
- Android Studio Hedgehog (2023.1.1+)
- Android SDK API 24+
- Physical device with camera (β₯ 4 GB RAM recommended 8 GB)
- Gemini API Key: Required for Medicine ID feature.
git clone https://github.com/N-SriKrishna/GuideLensApp.git
cd GuideLensAppyolov8s-worldv2_int8.onnx(~10 MB)floor_segmentation_int8.onnx(~3 MB)
- File β Sync Project with Gradle
- Build β Make Project
- Run β Run 'app' (grant camera & microphone permissions)
- Tap βοΈ to select target object (e.g. Chair) or say "Navigate to Chair".
- Hear βNavigating to chairβ.
- Follow audio commands: βBear rightβ, βMove forwardβ.
- Arrival β βArrived at destinationβ.
- Select "Medicine Identifier" from Start Screen.
- Point camera at medicine box.
- Tap "SCAN".
- Listen to the AI summary.
| Component | Latency | Notes |
|---|---|---|
| Object Detection | 150β250 ms | YOLO World INT8 + NNAPI |
| Floor Segmentation | 80β120 ms | PP-LiteSeg INT8 |
| Medicine Analysis | 1β2 sec | OCR (On-device) + API |
| End-to-End Nav | 2.5β4 FPS | Full pipeline |
Memory β 250 MB (active) Β· Battery β 15β20 % per hour
- INT8 Quantization β 4Γ smaller models, 2β3Γ faster inference
- NNAPI Acceleration β 2Γ speedup on Snapdragon NPUs
- Lifecycle Management β Auto-pause when backgrounded
- Memory Pooling β Bitmap reuse + explicit GC
app/src/main/java/com/example/guidelensapp/
βββ MainActivity.kt
βββ GuideLensApplication.kt
βββ Config.kt
βββ viewmodel/
β βββ NavigationViewModel.kt
β βββ NavigationUiState.kt
βββ ml/
β βββ ObjectDetector.kt
β βββ ONNXFloorSegmenter.kt
β βββ TextRecognitionManager.kt
βββ network/
β βββ GeminiService.kt
βββ sensors/
β βββ SpatialTracker.kt
βββ navigation/
β βββ PathPlanner.kt
βββ accessibility/
β βββ TextToSpeechManager.kt
β βββ VoiceCommandManager.kt
βββ ui/composables/
βββ SimpleNavigationComposables.kt
βββ StartScreen.kt
βββ MedicineIdScreen.kt
βββ ...
Data Flow:
Camera Frame β ViewModel β [SensorTracker + ObjectDetector β FloorSegmenter β PathPlanner state] β TTS β StateFlow β Compose UI
- Dynamic Obstacle Avoidance with real-time re-planning (Partially Implemented via VFH)
- Haptic Turn Cues for tactile feedback
- Multi-Object Waypoints & Navigation History
- Sensor Fusion for improved heading stability (Implemented)
- Model Distillation for total model size under 5 MB
GuideLensApp empowers users with visual impairments to navigate independently using only a smartphone camera β no beacons, maps, or internet required.
It demonstrates that real-time, privacy-preserving AI can be practical on-device, enhancing inclusion and mobility for millions worldwide.
- ONNX Runtime Mobile Docs
- Ultralytics YOLO World Docs
- PP-LiteSeg Paper (ArXiv)
- A* Algorithm β Wikipedia
- Pure Pursuit Controller β MathWorks
Developer: Sri Krishna Nurandu
Repository: github.com/N-SriKrishna/GuideLensApp
License: GPL-3.0
GuideLensApp showcases the future of on-device AI navigation β merging deep learning, classical algorithms, and accessibility design into one cohesive Android application.
With optimized models, adaptive runtime, and robust engineering, it stands as a reference implementation for real-time computer-vision navigation on mobile devices.