Keep the target. Lose the GPU.
Small-target tracking for edge CPUs.
Womprat is a CPU-only visual tracker for small, distant aerial targets. Give its Python API a video frame and an initial lock; it returns the target's position frame after frame — without a discrete GPU or a cloud-inference loop.
From lock to track
- 01 Lock once. Seed the tracker with a frame and a target bounding box from an operator, detector, or upstream system.
- 02 Track locally. Motion and contrast proposals, Kalman association, and appearance cues keep the target tied together over time.
- 03 Recover the lock. Template and descriptor re-association help find the same target again after detector flicker or a brief loss.
Tracking, in view
Three measured 10-second runs. The green brackets are Womprat's live track output.
Showcase footage: the field and infrared clips come from the Halmstad Drone Detection dataset, released under CC0 1.0. The urban clip is a selected showcase window from the DUT Anti-UAV dataset, released under the Apache License 2.0; the redistributed media includes its licence notice. Measurements use a 30 px centre-distance gate over each 300-frame tracking run.
Why CPU
-
No GPU runtime
The canonical tracker is classical computer vision. It avoids a discrete-GPU requirement and the associated GPU runtime cost.
-
No inference service
Frames can stay with the device. There is no per-frame upload, hosted model endpoint, or cloud-inference bill in the tracking loop.
-
Edge-shaped
Profiles cover small targets and Raspberry Pi-class hardware. Resolution, frame rate, and available CPU still determine real throughput.
-
Explainable pieces
Blob proposals, motion gates, Kalman state, appearance descriptors, and recovery paths can be inspected and tuned independently.
-
Deterministic timing
The API accepts the elapsed time between frames, keeping the motion model reproducible for recorded and variable-rate sources.
-
Integration first
Tracking results include ID, state, centre, bounding box, confidence, and the reason behind the current report.
The product is the API
Womprat ships as a Python package. The web console shown during development is a demo harness: it selects or uploads clips, calls this same API, and visualises the returned tracks. It is not the tracking engine and is not required in deployment.
from womprat import Tracker
tracker = Tracker(profile="small")
tracker.lock(first_frame, bbox)
for frame in frames:
tracks = tracker.update(frame, dt=1/30)
Tuned on six datasets
The core tracker does not require neural-network training. Its classical vision pipeline has been tuned and validated across six datasets. The public examples here use only footage with clear reuse terms.
- Halmstad Drone Detection dataset
- Used for validation and the field and infrared demos above. The footage is released under CC0.
- DUT Anti-UAV dataset
- Used for the selected urban showcase window above. Its repository distributes the dataset under the Apache License 2.0.
Deployment
- Runtime
- Python, NumPy, OpenCV, and SciPy on a general-purpose CPU
- Edge target
- Linux systems through Raspberry Pi-class devices; tune input size and rate for the hardware
- Acceleration
- No discrete GPU required by the canonical small-target profile
- Interface
- Lock with a frame and bounding box; update with each following frame
- Source
- Open source under Apache 2.0 — github.com/punklabs-ai/womprat