UAV Target Search & Tracking

UAV Target Search & Tracking

An autonomous DJI Tello drone that detects a human target from its camera feed, locks on, and follows it in real time.

Type

AI · Computer Vision

Role

Lead Developer

Built

Jun 2026

Updated

Sep 2026

Tech Stack

PythonKalman FilterDJI TelloCOSMOSNumPyFastAPI
01

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.

02

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.

03

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.

04

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.
05

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.