Florianópolis, Brazil · UTC−3 · Remote

Marlon Reichert

I design instruments for work that a person has to look at for hours without getting it wrong.

From 2025 to 2026 my day job was classifying vehicles out of recorded traffic video to Brazil's federal standard, lane by lane, in fifteen-minute intervals. It is the kind of work that punishes a bad interface immediately: look away to read a label and you lose the vehicle. So I built the interface, and then I built a second system to check my own accuracy against it.

01

A heads-up display for counting traffic

This is the real thing, rebuilt here at its true size — 360 × 400, sitting at 90% opacity over a video player so the road stays visible underneath. Every colour below is the colour it actually is in the tool, and every element answers an error I actually made in production, not a feature idea.

The active movement is always on screen

At accelerated playback it is easy to lose track of which movement you are counting. Putting it on the panel turns that from something you remember into something you glance at — and a glance costs far less than a recount.

History is colour-coded

When you rewind thirty seconds to check whether a vehicle was registered, the recount and the history have to line up immediately. Four vehicle families, four fixed hues: once the hue is learned the operator stops reading words. Reading costs a fixation; recognising a colour does not.

The last class registered stays visible

Identical vehicles arrive in runs, and re-deciding a class you just decided is wasted work. Showing the last entry removes the redundant reclassification.

One colour for state, and a line that stays empty

Mode is the only thing that changes what a key means, so it is the only thing allowed to be yellow. Nothing decorative was permitted in the warning line, so when red appears the eye goes straight to it — an always-on status bar would have made errors invisible.

AutoHotkey v2 over Excel. Always-on-top, click-through, repositionable by hotkey. A second build replaces the keyboard with an Xbox controller, so the hands never leave a resting position across a full shift.

96intervals generated per day
4hues, no icons
1 : 1work hour per video hour
02

Then I built the thing that grades me

A counting tool that is fast and wrong is worse than a slow one. So the second system is a detector — Python, YOLO, ByteTrack, CUDA — that watches the same footage and disagrees with me on purpose. Every disagreement surfaces in a web review tool as a cropped frame and one decision for a human to make.

Behind it sits the part I am most attached to, because nobody asks for it and it is what makes any accuracy claim survive an audit: a reference set of 50,374 vehicles verified by hand across 456 lane-hours. It is what turns "about 95% accurate" into a number broken out by lane, by hour of day, and by vehicle class — which is where it stops being flattering. The error is not spread evenly. It concentrates in one class, and in the hours of low sun.

50,374vehicles verified by hand
456lane-hours
3axes of error reporting
03

Why the reference set is kept per lane-hour

Twelve lane-hours at one counting point, each one measured against a hand count. Pool them and the detector's mean error is −2% — a number I could put in a brochure. Split them by how the road was configured and the −2% turns out to describe neither half.

Detector error against hand count, by hour of day · counting point P08, July 2026 · two jobs, same axis · every point is a logged measurement from my own reference set
Single carriageway · 7 lane-hours Dual carriageway · 5 lane-hours +20% 0 −20% −40% −60% −80% −100% 09h11h 13h15h 09h11h 13h15h −53% −99%

The two jobs cover the same counting point and overlap in time. At 15:30 the single-carriageway job reads +16% and the dual-carriageway job reads −53% — same half hour, same road. Whatever is wrong is not the light. It is the geometry: a dual carriageway needs one counting line per carriageway, and a line that misses one of them loses a whole direction of traffic.

Splitting is still not enough. The dual-carriageway job's own median is +16% — three of its five lane-hours are fine, and the median never notices the other two. Only the individual lane-hours show them. That is why the reference set is stored per lane-hour and never rolled up: an average at any level above that is somewhere for a failure to hide.

lane-hoursmean errormedian
Pooled12−2%+13%
Single carriageway7+11%+10%
Dual carriageway5−20%+16%

The textbook chart for comparing an automated method against a reference is a Bland–Altman plot. With twelve pairs it would be theatre — the convention is forty or more before limits of agreement carry any meaning. Twelve measurements get shown as twelve measurements.

04

How I got here