← back to test matrix

Test 1.2

Can a free straight-line detector find the boom and catch fake stripes?

No. It sees the boom but can't reliably pick it out from other straight things in the photo, and it barely catches any fake stripes while wrongly flagging 1 in 8 real ones.
What it means for SailScan

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.

89%
sees the boom somewhere
39%
correctly PICKS the boom
8%
fake stripes it catches
13%
real stripes it wrongly kills
The detail
QuestionMetricResultn
Boom findingDetector 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 photo17 / 44 = 38.6%
Picks it as the longest near-horizontal segment (within 30°)15 / 44 = 34.1%
Straightness vetoFake stripe lines (battens/rigging/junk) it flags5 / 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 junk5 / 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.

raw data (JSON) →