— / live demo / 2,315 frames / 21 tickets each / 4 gates
Twenty-one tickets a photograph, three photographs a second.
Tickets come off this press in a bunch — seven across the width of the web, three rows deep — and each one carries a single small printed mark, a Q-block. If the print is failing, those marks are the first thing to go faint, go missing, or drift out of place. EagleEyes photographs the whole bunch at once, finds all twenty-one blocks, and puts them through four gates. All four have to pass, or the frame is turned down.
Nissha Medical Technologies · EXT705 ticket press · replaying the production engine’s own output
Streaming the recorded run at a seventh of line speed. Tickets come off this press seven across and three deep, so one camera frame is twenty-one of them — and every verdict, block count, and failed check below is the production engine’s own output for that frame.
The press needs a screen with some room on it and motion you have not asked to reduce. Every measured result is below, and the stations are listed with it.
Five stations. Pick one.
EagleEyes for Nissha Medical Technologies, EXT705 ticket press. Verdicts, gate outcomes and block counts are the production engine's own output over a labelled run of 2,315 camera frames, each one a bunch of twenty-one tickets. Ground truth is the label the camera wrote into each filename. The order frames arrive in has been shuffled — the good and defective sets were captured on different days — but nothing else about them has been changed. Model: models/qblock_20251107_0033/weights/best.onnx.
02 / how well it actually did
2,315 frames, nothing missed and nothing wrongly rejected.
Ground truth comes free here: the camera writes the verdict into every filename, so the engine’s decision can be scored against what the frame actually was. Over the whole labelled run it agreed every time.
192
good frames passed
of 192 — 100.0%
2,123
defective frames caught
of 2,123 — 100.0%
0
good frames wrongly rejected
scrap the line would have eaten
0
defective frames let through
the expensive kind of mistake
One distinction worth making, because it changes what the numbers mean. The thresholds were derived from good images only — so the 2,123 defective frames were never used to fit anything, and catching all of them is an out-of-sample result. The 192 good frames are the population the thresholds were built from, so their pass rate is an in-sample figure and should be read as one.
03 / the four gates
Detection finds the blocks. The rules decide.
A detector alone would only ever say how many marks it thinks it sees, at some confidence. Turning that into a verdict a factory can act on is the rules layer, and it is where the project actually lives: four independent checks, each with a range learned from good print rather than a number somebody picked.
| Gate | What it asks | The range it holds to | Passed |
|---|---|---|---|
| Count | Are all the blocks there? | exactly 14 or 21 big blocks | 2,297 / 2,315 |
| Visibility | Is each one crisp enough to be sure of? | confidence 0.910–0.940 | 192 / 2,315 |
| Density | Is there enough ink in it? | mean grey 38.3–65.58, dark ratio 0.6484–0.9297 | 192 / 2,315 |
| Position | Is it in the right place relative to its neighbours? | within 3σ of the learned spacing | 2,297 / 2,315 |
Where the time goes
79.2 ms of detection and 4.2 ms of rules per frame. The model is nineteen times the cost of every decision made on top of it, which is the argument for keeping the rules cheap and the detector doing one job.
What failed, and how
vis_big_ok2,105dens_big_ok2,105count_mismatch17no_detections1
Visibility and density almost always fail together: a block that has lost ink is both fainter and less certain, so the two gates are catching the same physical failure from two directions.