HIK.
Back to portfolio

Case study

Graduation Project·2026

Drone Fire Watch: Aerial Fire & Smoke Detection

Graduation project: a YOLOv8-L detector trained on the 21K-image D-Fire dataset (precision, recall and mAP50 ≈ 0.80), served by FastAPI to a React operations dashboard and a Streamlit field reporter.

YOLOv8FastAPIComputer VisionReactStreamlit
github.com/hhalilikurnaz
Drone Fire Watch

01

Overview

My graduation project: an aerial fire and smoke detection system built around a custom YOLOv8-L model, served through a FastAPI inference service to two clients, an operations dashboard and a field reporter.

02

The challenge

Wildfire detection usually relies on manual watch or delayed satellite imagery. By the time a fire is confirmed it may already be spreading, and field teams rarely know exactly where to go or which way the wind will push it.

03

The approach

I trained a YOLOv8-L detector on D-Fire, a 21K-image fire and smoke dataset, choosing the larger backbone on purpose because accuracy matters more than raw speed here. A FastAPI service wraps the model and returns structured detections to two clients: a dashboard for operators and a lightweight reporter for people in the field.

04

How it works

Aerial or field images reach a FastAPI inference service, which runs the YOLOv8-L model at 640px and returns structured JSON with labels, confidences and bounding boxes. The React operations dashboard raises alarms above a configurable confidence threshold and keeps stats and alert history. The Streamlit field reporter reads EXIF GPS from each photo, places detections on a map and enriches them with live wind data from OpenWeatherMap.

05

System architecture

How the pieces talk to each other. Hover a node, or switch to the source that drives the runtime.

inference.py

Sense

Infer

Serve

06

What I built

YOLOv8-L model trained and evaluated on the 21K-image D-Fire dataset (~100 epochs, 640px).

FastAPI inference service with a structured JSON contract shared by both clients.

React operations dashboard: confidence-threshold alarms, stats and alert history.

Streamlit field reporter with EXIF-GPS mapping and OpenWeatherMap wind enrichment.

07

Outcomes

Trained a custom YOLOv8-L detector for fire and smoke on the 21K-image D-Fire dataset (~100 epochs, 640px), reaching precision, recall and mAP50 ≈ 0.80.

Deliberately traded latency for accuracy: in a safety-critical domain a missed fire costs more than a slower frame.

Served the model through a FastAPI inference service that returns structured JSON.

Built a React operations dashboard with confidence-threshold alarms, stats and alert history.

Built a Streamlit field reporter with EXIF-GPS mapping and OpenWeatherMap wind enrichment.

08

Results

Precision, recall and mAP50 ≈ 0.80 on fire and smoke.

One model, two clients: operators and field teams read the same detections.

A complete system (model, API and two interfaces), not a notebook-only demo.

09

What I learned

In safety-critical vision, pick the backbone by the cost of a miss, not by benchmark speed.

A detection is only useful with context: GPS and wind turn a box on an image into a decision.

A model without an operator UI is not a system. The interfaces were part of the design.

10

Tech stack

YOLOv8FastAPIComputer VisionReactStreamlit

Have something similar in mind?

I'm open to new projects. Let's talk about what you're building.