Repository navigation
Commit ab7fc93
fix(ean): consensus floor on edge decode to reject phantom barcodes
The per-scanline width-ratio EAN/UPC decoder is intentionally permissive so it can
recover blurred/curved codes, so a stray scanline over plain text or artwork
occasionally satisfies a checksum by chance — most often as UPC-E (8 digits are cheap
to fake). scan() previously reported the top-voted value unconditionally, so a real
photo of packaging text hallucinated a UPC-E. Require the winning value to clear an
absolute consensus floor (3 scanlines) and out-poll the runner-up 2:1; genuine
barcodes are crossed by dozens of agreeing lines and pass easily.
Verified on the real capture: the curved EAN-13 still decodes (36 agreeing lines),
while four non-barcode regions of the same frame (text, hand, wall) now correctly
report nothing. Adds testdata/real_scene_text.png + a must-not-decode regression and
examples/eanvotedebug.rs (per-scanline vote tally) for tuning.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>1 parent a9c5eb1 commit ab7fc93
5 files changed
Lines changed: 93 additions & 8 deletions
File tree
- examples
- src/codes/ean
- testdata
- tests
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
58 | 58 | | |
59 | 59 | | |
60 | 60 | | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
223 | 223 | | |
224 | 224 | | |
225 | 225 | | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
226 | 235 | | |
227 | | - | |
228 | | - | |
229 | | - | |
230 | | - | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
231 | 241 | | |
232 | 242 | | |
233 | 243 | | |
| |||
243 | 253 | | |
244 | 254 | | |
245 | 255 | | |
246 | | - | |
247 | | - | |
248 | | - | |
249 | | - | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
250 | 263 | | |
Loading
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
422 | 422 | | |
423 | 423 | | |
424 | 424 | | |
| 425 | + | |
| 426 | + | |
| 427 | + | |
| 428 | + | |
| 429 | + | |
| 430 | + | |
| 431 | + | |
| 432 | + | |
| 433 | + | |
| 434 | + | |
| 435 | + | |
| 436 | + | |
| 437 | + | |
| 438 | + | |
| 439 | + | |
| 440 | + | |
| 441 | + | |
| 442 | + | |
| 443 | + | |
| 444 | + | |
| 445 | + | |
| 446 | + | |
| 447 | + | |
| 448 | + | |
| 449 | + | |
| 450 | + | |
| 451 | + | |
| 452 | + | |
0 commit comments