The idea: run a classic, zero-training line detector over every photo and get two things for free, an automatic boom line and a built-in lie detector, since battens and rigging are straight but real draft stripes sag with camber. We tested it with no training at all. The detector notices the boom in 9 out of 10 photos where a person also drew one; it's in there somewhere among everything else straight in the picture. Telling it apart from the dozens of other straight edges (hull rail, hiking straps, dock lines, sail seams) only worked about a third of the time. Using "straightness" to catch bad stripe lines caught almost none of the real junk and wrongly killed real stripes more often than not. A pretrained detector can't tell the boom from some other straight line, and it can't tell a batten from a stripe that happens to look straighter than usual. This particular shortcut isn't worth building on.
| Question | Metric | Result | n |
|---|---|---|---|
| Boom finding | Detector notices the boom at all (any straight segment matches, any rank) | 39 / 44 = 88.6% | 44 photos with a usable human boom label |
| Picks it as the single LONGEST straight segment in the photo | 17 / 44 = 38.6% | ||
| Picks it as the longest near-horizontal segment (within 30°) | 15 / 44 = 34.1% | ||
| Straightness veto | Fake stripe lines (battens/rigging/junk) it flags | 5 / 65 = 7.7% (recall) | 65 model lines that didn't match any human stripe |
| Real stripes it wrongly flags as "too straight, discard" | 138 / 1,053 = 13.1% (false-kill rate) | 1,053 model lines that matched a real human stripe | |
| Of everything it flags, the fraction that's actually junk | 5 / 143 = 3.5% (precision) | 143 total flags |
Detector: OpenCV's built-in line-segment detector (cv2.createLineSegmentDetector), run zero-shot with no training and no downloaded weights, one photo at a time. Nearby straight sub-segments were merged into single lines before scoring. "Near-horizontal" matters because a real boom sampled in this set sat about 26° off level. A strict horizontal-only rule would have missed it, so we tested both a boom-angle-agnostic picker and a near-horizontal picker; neither did well.
Source: 332-photo frozen holdout (server/inference/test-holdout-ids-canonical.json, frozen 2026-08-25), all 332 processed, no sampling. Boom subset: 44 of 332 photos with a usable boom label (141 photos had a boom-line field, but 97 were missing the image-size metadata needed to score them, so those were excluded rather than guessed at). Veto subset: 1,118 model stripe lines across the same 332 photos, each already scored real-vs-fake against human labels by an earlier step in this test.