An iOS engineer ported a 2012 OpenCV paper and fine-tuned YOLOv8 on personal shot cards to replace manual brass scoring gauges at a rifle range.
Key Takeaways
Bullet holes are negative space; Apple’s Vision framework repeatedly misidentified target ring dots and scoring numerals as holes, making off-the-shelf object detection unreliable.
A two-paper hybrid solved the problem: Rudzinski and Luckner’s 2012 pipeline (Prewitt edges + Hough circle fitting) handles structural geometry; a 2023 YOLOv8 architecture handles hole localization.
V-value radial intensity profiling along strips from the bull’s center outward extracts ring radii reliably, replacing brittle flood-fill for ring-line erasure.
The exported CoreML model weighs 22.4 MB; the bullet radius multiplier (30% of detected tear region, ~14% of bull diameter) was tuned empirically against manually scored cards rather than derived from physics.
The app outgrew scoring: cumulative heat maps, drift-by-shot-order trend lines, and cross-rifle performance comparisons emerged once months of scored cards were available.
Hacker News Comment Review
One commenter pushed back substantively: slow manual rituals like plugging brass gauges may be cognitively beneficial, and automating them trades mental calm for throughput – a genuine tradeoff the post doesn’t address.
The NSRA scoring mechanic surprised readers: a shot scores by the outermost ring the bullet’s flange clears, not proximity to center, which is why the bullet radius correction is load-bearing and not just a rounding detail.
The writing voice drew unusual praise and mild suspicion, with readers explicitly hoping it was not AI-generated – a signal that the prose quality stood out against typical technical posts.
Notable Comments
@f055: argues the brass plug ritual’s slowness is the point – automation optimizes away friction that may be worth keeping.
@jfengel: clarifies the scoring model – outermost ring the bullet clears, not center hit – which explains why geometric ring detection and bullet radius correction are both required for correctness.