An Android app that analyzes images on your device using on-device machine learning — no internet required.
- Image Gallery — Browse all photos from your device in a filterable grid
- On-device ML Analysis — Automatically labels images using Google ML Kit (objects, places, food, animals, etc.) and detects faces
- Smart Filtering — Filter images by category: People, Food, Nature, Animals, Vacation, City
- Detail View — Inspect individual images with their detected labels and confidence scores
- Background Processing — Analysis runs in the background with a progress indicator; results are cached to avoid re-processing
Clean Architecture + MVVM with a single :app module.
Presentation → ViewModels → Use Cases → Repository → Data Sources
(Compose) (StateFlow) (Domain) (Interface) (MediaStore, ML Kit, Cache)
Package: at.mg.localimagerec
| Layer | Location |
|---|---|
| UI / Screens | ui/gallery/, ui/detail/ |
| Navigation | ui/navigation/ |
| Domain models & use cases | domain/ |
| Data sources & repository | data/ |
| Dependency injection | di/ |
| Category | Library / Tool |
|---|---|
| UI | Jetpack Compose, Material 3 |
| Architecture | ViewModel, StateFlow, Clean Architecture |
| Navigation | Jetpack Navigation for Compose |
| DI | Hilt |
| Image loading | Coil |
| ML | ML Kit Image Labeling, ML Kit Face Detection |
| Async | Kotlin Coroutines |
- Android 7.0+ (minSdk 24)
- Targets Android 15 (API 36)
# Build
./gradlew assembleDebug
./gradlew assembleRelease
# Install on connected device
./gradlew installDebug
# Tests
./gradlew test # Unit tests
./gradlew connectedAndroidTest # Instrumented tests (device/emulator required)
# Lint
./gradlew lintREAD_MEDIA_IMAGES(Android 13+)READ_EXTERNAL_STORAGE(Android 12 and below)