AgroLens
In developmentFrom field to dataset, even offline.
- Year
- 2026
- Role
- Undergraduate thesis
- Context
- UNICENTRO · Computer Science and Agronomy
Technologies: Flutter, Angular, NestJS, FastAPI, YOLO, PostgreSQL, Docker
Overview
AgroLens is an offline-first platform for capturing, organizing, annotating, and exporting agricultural images for computer vision datasets. It was developed as an undergraduate thesis in Computer Science at UNICENTRO, in collaboration between the Computer Science and Agronomy departments.
Source code and data remain private to protect environment configuration and research material; the public case study documents the architecture and engineering decisions.
The problem
Scattered images
Field photos end up scattered across devices, folders, and generic services.
Unstable connectivity
Internet connectivity can be unstable or unavailable during collection.
Agronomic context
Property, plot, crop, phenological stage, and location must travel with every batch.
Disconnected annotation
Annotation and export usually require tools separate from the collection process.
Data flow
- Field capture
- Local queue
- Sync
- Review
- Annotation
- Export
Field app
- Capture or select images in Flutter.
- Record property, plot, crop, and phenological stage.
- Coordinates from GPS or picked on the map.
- Local SQLite persistence and an offline sync queue.
- Explicit states for pending, uploading, completed, or failed items.
Web dashboard
- Dashboard and filters over uploads and agronomic metadata.
- User, catalogue, and permission management.
- Bounding box editor with annotations in YOLO format.
- Export of metadata, images, and training and validation datasets.
Architecture
System flow
Field app
Flutter · offline-first
Web dashboard
Angular
API
NestJS · Drizzle ORM
PostgreSQL
metadata and audit
S3 storage
images
Background worker
uploads and jobs
AI service
FastAPI · YOLO
| Layer | Technologies | Responsibility |
|---|---|---|
| Mobile | Flutter · Dart · SQLite | Collection, metadata, offline operation, and sync |
| Web | Angular · TypeScript | Management, annotation, access control, and export |
| API | NestJS · Drizzle ORM · PostgreSQL | Authentication, business rules, audit, and jobs |
| Files | S3-compatible storage | Signed uploads and image storage |
| AI | Python · FastAPI · YOLO | Isolated inference and assisted annotation service |
| Operations | Docker Compose · nginx · GitHub Actions | Reproducible environments, proxy, and automated validation |
Engineering decisions
Offline first
Collection does not depend on an active connection: images and metadata are stored locally and synced when the network returns.
Metadata as part of the data
Every batch carries its agronomic context from capture time, reducing unlabeled images.
Clients separated from processing
Slow operations, such as upload completion and inference, run in workers outside the HTTP API.
Security and operations
Refresh token rotation, pre-signed uploads, rate limiting, audit trail, health checks, and documented backups.
Result and participation
The prototype integrated two working clients and demonstrated the complete flow of capture, sync, management, annotation, and export. The refactor to a dedicated backend and inference integration are still in development.
Work advised by Jotair Elio Kwiatkowski Junior, Carlos Eduardo Andrade Iatskiu, and Leandro Rampim at UNICENTRO.
- Requirements gathering and domain modeling.
- Flutter app and Angular dashboard development.
- Offline flow and image and metadata synchronization.
- Permissions, annotations, and YOLO export modeling.
- Evolution to a dedicated API, relational database, object storage, and containers.