Inspiration
What inspired me to build this project was the golden salmon embedded in the floor on the second floor as I was walking to my workspace.
What it does
Fyolo analyzes fish-camera footage using computer vision to detect and track individual fish over time. It then turns those trajectories into behavior insights like direction, speed, dwell time, crossings, and reversals, and visualizes the patterns in an analytics dashboard.
How we built it
Fyolo ingests uploaded or OpenCV-compatible live video streams, decodes frames with OpenCV, runs Ultralytics YOLO on PyTorch for fish detection, then uses ByteTrack via Supervision to maintain persistent fish IDs and trajectories. Custom Python/NumPy/OpenCV algorithms calculate direction, speed, dwell, crossings, and reversals; FastAPI serves the results over REST/WebSockets/MJPEG to a Next.js + React + TypeScript frontend, where Canvas renders the live overlays and analytics.
Challenges we ran into
Finding a good model for detecting fish was hard. Originally, species detection using the same Fishial model was intended to be part of the final product, but it was too inconsistent.
Accomplishments that we're proud of
I'm proud that Fyolo actually works for being built in such a short time frame! I'm also proud of how I built it to work with existing camera footage, making it practical to use just for fun.
What we learned
I learned the real value from fish detection comes from maintaining reliable tracks over time and turning those trajectories into meaningful behavior metrics. I also learned how important calibration, smoothing, and event logic are for reducing noisy detections and making the analytics actually useful in real-world footage.
What's next for Fyolo
Species detection, using models trained specifically for specific creeks.
Built With
- bytetrack
- fastapi
- next.js
- opencv
- yolo
Log in or sign up for Devpost to join the conversation.