Labeler
Computer Vision · ToolingA labeling studio that does the boring part for you — capture an object once, and it finds it across every frame.
Building a computer-vision dataset means drawing the same box thousands of times. Labeler is the tool I built to cut that down — a project-based annotator that auto-propagates labels using template matching and camera tracking instead of brute-force clicking.
Why build it
I kept needing labelled image and video data for other projects, and the existing tools were either heavyweight or didn't do the one thing I wanted: label something once and let the computer find the rest. So I built my own around that idea, with projects, labels, per-frame annotations and stats — the usual scaffolding — but with assistance baked into the core.
The workflow
A project starts from uploaded images or videos. Video is sampled into frames (uniform, with smarter sampling for big clips), and long-running steps like extraction and displacement run as background jobs you can poll. Everything's stored per project: frames, labels, annotations and stats.
Label by example
The headline feature: capture an object as a template, and the tool finds it across all your frames. Matching is multi-scale and coarse-to-fine — a quarter-resolution pass locates candidates, then a full-resolution pass confirms them — and it supports an alpha mask so irregular shapes match cleanly. When a GPU is available it runs on OpenCV's CUDA path (built and tuned on an RTX 5060), so matching a template across a whole project is fast rather than a coffee break.
Tracking the camera
In video, the camera moves even when objects don't. Labeler estimates that motion with phase-correlation displacement tracking between consecutive frames, so an annotation can shift along with the camera instead of being re-drawn — the difference between labelling every frame and labelling a handful.
Built with
Python + Flask backend (project, frame, label, annotation and stats APIs with background jobs), OpenCV for the vision core — multi-scale template matching with alpha masks and a CUDA fast path, phase-correlation displacement, and video frame sampling — and a vanilla-JS labeling front end.