on-device fish species identification for Philippine waters
What if your phone could identify a fish from Philippine waters — offline?
My undergraduate thesis: a Flutter app that identifies Philippine fish species on-device with a custom YOLOv11 model exported to TensorFlow Lite, a Django REST backend for species data, detection history, feedback and model versions, and a Next.js admin panel.
RoleMobile, backend and ML developer
My partUndergraduate thesis · solo build
Year2025
StatusCase study
What I did
Trained a custom YOLOv11 detection model on Philippine fish species (18+ classes) and optimised it for on-device inference with TensorFlow Lite.
Built an offline-first Flutter app with a local SQLite store, automatic sync, camera and gallery detection, and a feedback flow for misidentifications.
Built the Django REST API with token auth and Admin / Researcher / General User roles, detection history and analytics, and over-the-air model version management.
Built a Next.js + TypeScript admin panel for the species database and feedback moderation.
Built with
Flutter
Dart
Django REST Framework
Next.js
YOLOv11
TensorFlow Lite
SQLite
System
Three parts talk to one database:
Mobile app (Flutter) — camera and gallery capture, on-device detection with a TensorFlow Lite export of the YOLOv11 model, an offline-first SQLite store that syncs when a connection returns, and a feedback flow so users can correct a misidentification.
Backend (Django REST Framework) — species database, users with Admin / Researcher / General User roles, detection history, feedback review, and versioned model files that the app downloads over the air.
Admin panel (Next.js) — species management and feedback moderation for researchers.
Model
A YOLOv11 detector trained on Philippine fish species and quantised for mobile inference. The feedback loop — user corrections reviewed by researchers — is the mechanism for improving the dataset between model versions.