Why I Built This
The natural-language person search system could find a person in a fixed camera stream. The obvious next question was: what if the camera could move? A small drone turns a passive search into an active one — the UAV can search an area, identify the target and keep it in frame on its own.
I started this at the AIoT Lab of Dai Nam University in June 2026 and I am the lead developer on it.
Demo
Live run at the AIoT Lab: on the left, the web dashboard with the detected target locked; on the right, the DJI Tello following the person on its own.
How It Works
The DJI Tello streams video to a Python process. Each frame runs through person detection; the detection that matches the search target becomes the tracked object. A Kalman filter smooths the target's position and predicts where it will be next, so the drone keeps moving even when a detection is briefly lost.
The predicted position drives the drone's flight commands — yaw to keep the target centred, forward/back to hold distance. A FastAPI service exposes the live state and control commands, and a small web dashboard consumes it for monitoring.
Key Decisions
- Kalman filtering instead of raw detections. Raw bounding boxes jitter and drop out; feeding them straight into flight commands made the drone oscillate. Filtering the trajectory gave smooth, predictable motion.
- NumPy for frame processing. Keeping the hot path in vectorised NumPy operations kept latency low enough for closed-loop control.
- FastAPI as the control surface. Separating the control loop from the UI meant I could inspect and override the drone from a browser without touching the tracking code.
What I Learned
Closed-loop control on real hardware is unforgiving: every millisecond of latency and every noisy detection shows up as physical movement. Building this taught me to think about the whole pipeline — model, filtering, control and I/O — as one system, not as separate parts.