Track drones in video, on a CPU
Sky Tracker follows a drone through video from one starting box: an operator click, a radar cue or a box from your own detector. On every frame it reports the drone's centre, box, speed and whether it still has it, in 1.4 to 12 ms per 1080p frame on one CPU core, with no GPU.
A racing quad, low and fast
An FPV camera chases a quad over a dirt road and past the trees. From the same start box, KCF and MOSSE lose it, and CSRT and MIL drift off onto the background. Sky Tracker's correlation profile with ML stays on the quad.
A second FPV chase, into a building, is on theC++ library page.
On 56 public drone clips
| Tracker | Centre within 20 px | ms / frame 1080p |
|---|---|---|
| Sky Tracker correlation with ML | 98% | 11.7 |
| NanoTrack (OpenCV) | 99% | 9.9 |
| CSRT (OpenCV) | 98% | 19.8 |
| Sky Tracker correlation | 96% | 2.8 |
| MIL (OpenCV) | 94% | 27 |
| Sky Tracker default | 89% | 1.4 |
| KCF (OpenCV) | 32% | 2.1 |
| MOSSE (OpenCV) | 15% | 0.2 |
The drone clips of the Svanström drone-detection dataset, visible and infrared, every frame labelled. Every tracker starts from the first label and runs to the end without a restart; a frame reported as lost counts as a miss. On these clips the best trackers are close: the drones are mostly clear against the sky. Time is the tracker's own update per frame on one core of an Apple M3 Pro. All 242 clips, field footage included: the OpenCV tracker comparison.
Built for drone video
Steer a camera
Centre, box, speed and state on every frame, synchronously, fast enough for a pan-tilt or gimbal loop. Through a brief occlusion the default profile coasts on its motion model and flags those frames.
Visible and thermal
The benchmark includes infrared clips of drones, aircraft and birds; the same profiles track both.
Several drones
MultiTracker follows several selected targets with stable IDs and keeps their boxes apart when they cross.
At the edge
Runs on Linux ARM64, a Jetson Nano or TX2 package with its own OpenCV, and Raspberry Pi with a 64-bit OS. No GPU and no network needed.
Which profile for which footage
- Ground camera, drone small against the sky: default: a template tracker tuned for small, fast aerial targets, 1.4 ms a 1080p frame.
- FPV chase, clutter, moving camera: correlation, and on the command line --correlation-motion to reject a box that moves with the background.
- The hardest footage: correlation with ML: NanoTrack checks the correlation tracker and the better of the two wins.
How the correlation tracker and its ML check work: correlation filter tracker.
Point a gimbal at a drone in a few lines
import cv2, sky_trackercapture = cv2.VideoCapture("fpv.mp4")ok, frame = capture.read()tracker = sky_tracker.Tracker("correlation", ml=True)tracker.lock(frame, (x, y, w, h)) # box from your detector or a clickwhile True: ok, frame = capture.read() if not ok: break r = tracker.update(frame, 1 / 30) if not r.lost: gimbal.point_at(*r.center())The same in C++ and Node.js, and the command line with CSV telemetry: docs.
Questions
Does Sky Tracker detect drones?
No. It is a tracker: it follows a drone from a first box given by your detector, a radar or RF cue, or an operator click. Running a detector only to start, and the tracker on every frame, keeps the loop fast on a CPU.
How accurate is it on drones?
On the 56 public drone clips, Sky Tracker correlation with ML keeps the centre within 20 px of the drone on 98% of frames, level with OpenCV’s CSRT and NanoTrack; plain correlation scores 96% at 2.8 ms a frame against CSRT’s 20 ms. The gap shows on fast FPV footage like the clip above, where the OpenCV trackers lose the quad.
Can it run on the drone itself or on a Jetson?
Yes, on ARM64 Linux. We have not yet timed Jetson or Raspberry Pi boards, so measure at your resolution; default and plain correlation are the light profiles.
Can I try it on my own drone footage?
Yes. The free desktop demo for macOS, Windows and Linux tracks ten seconds of any video with each profile, from a box you draw.
Try it on your own drone footage
The free desktop demo tracks ten seconds of any video with every profile, on macOS, Windows and Linux.