
PlumeRank
OpenCV AI Competition 2026 · powered by AWS
The camera wall finally points at the smoke.
$ make verify
… checked against: results/verify_micro.json -- MATCH (byte-for-byte)
T+08:00detected · dev fire
The scene
One dispatcher.
A wall of tiles.
Which first?
ALERTCalifornia alone runs more than 1,200 cameras. A human opens a few per minute and mutes anything that interrupts too often.
04:50NEXT SIXTY SECONDS
The metric
F1 does not open a tile.
What detectors report
Per-frame F1
Or time-to-detection with no cap on false alarms. Neither says which tile to open.
What PlumeRank reports
Minutes to a look
Minutes after ignition until a human is pointed at the right camera, at 2 alerts per camera-window.
Border58 Fire · Otay Mountain West · real frames · development set
The tile that changed goes first.
Mechanism · 23 OpenCV 5 surfaces · 6 modules
Each camera, against itself.
01
Stabilise
phaseCorrelateUSAC_MAGSAC
02
Segment
MOG2connectedComponents
03
S1–S4
Sobel · LaplacianDISOpticalFlow
04
Escalate ~2%
dnn · ONNXENGINE_NEW
05
Own last 15 min
rank.Baselinez-score
06
Budget solve
solve_thresholdθ = 0.849
AWS · one t4g.small Graviton · S3 corpus · CloudWatch drift ±15% + heartbeat reboot
Demo · live on the Graviton box
62 cameras. Nothing hidden.
live.plumerank.edycu.dev / the wall · captured 10 Oct 2026

29 + 33development fires + fire-free windows
1 s / tickone minute of footage, re-ranked
0 removedthe list only reorders
Held-out · 54 fires · read once · same budget
Same model. Asked less often.
B2 via same baseline20 / 54
B1 via same baseline18 / 54
B2 · frame differencing4 / 54
B1 · CNN on every frame2 / 54
38.0minutes, median time to detection over all 54 fires, misses counted as never. Only PlumeRank reaches a median, and only just.
CNN calls per camera-window: PlumeRank 1.4 · B1 3,645 · results/bench_2026-10-10.json
Honest by design
The headline is read once.
Frozen firstThe held-out run refuses to start unless the constants hash matches a committed freeze.
results/constants.sha256
Logged readsEvery read of held-out pixels appends one line, with the commit.
results/hold_access.log
Verified framesEvery frame must hash to the fetch receipt before the read counts.
data/fetch_receipt.json
Known limits: half the held-out fires missed · median fragile to the ignition clock · daylight only · cloud, not fog, is the adversary
Proof of work
Re-checked in three minutes.
735tests97% coverage on plumerank/
23OpenCV 5 surfacescounted by check_claims.py
1,500property caseshypothesis · budget never overspent
4GET routesno upload, no dispatch
$ git clone https://github.com/edycutjong/plumerank && cd plumerank && make verify
Try it
Open the right tile first.