Demo of target-analyzer, photo-based scoring of paper targets, from this case study. Synthetic targets and readings. On the held-out target, cv_blob and yolo at 0.10 and 0.25 are matched to the real measured run; every other number is illustrative.

target-analyzer

demo range

2026-05-17 · shooter A · 10 m

readingproposedmatchedmissedspuriousoffset
cv_blob119120.91 mm
yolo ≥ 0.101010000.32 mm

move the threshold

yolo cut atproposedmatchedmissedspuriousoffset
yolo ≥ 0.051010000.32 mm
yolo ≥ 0.10 (the default)1010000.32 mm
yolo ≥ 0.151010000.32 mm
yolo ≥ 0.2599100.36 mm
yolo ≥ 0.4066400.23 mm

A detector only proposes: a person confirms every target, so a spurious hole costs one click to remove and a missed one costs a click to place. Lowering the threshold trades misses for spurious holes. 0.10 is the default the real app ships with. Two readings are the same hole within 4 mm.

confirmed by a person

ring 8ring 9ring 9ring 9ring 9ring 6ring 10ring 8ring 8ring 9

the truth every reading is scored against

cv_blob

ring 9ring 9ring 9ring 9ring 9ring 6ring 10ring 8ring 9ring 4ring 4

classic blob detection, no threshold to move

yolo ≥ 0.10

ring 8ring 9ring 9ring 9ring 9ring 6ring 10ring 8ring 8ring 9

the trained detector, cut at the threshold chosen above