fix(recognition): calibrate the accept lines against unrelated shelves

Every threshold was fitted on image6, where each crop is a facing of a product
the shelf holds, so the set could not price a false accept. Measured on 4580
crops from 64 unrelated Wikimedia shelf photos at the shipped configuration:

  LOCAL_ACCEPT 2.0 -> 4.0   false accepts 60 (1.31%) -> 3 (0.07%)
  TEXT_MIN_SHARED 2 -> 4    the two-bigram reads that named sku_l12 via おい/いし

On image6 that is 44 shown / 42 correct at full resolution - 95.5% precision,
65.6% coverage - the highest-coverage cell of the joint sweep that passes both
G2 (>= 95%) and G3 (<= 1%). At live resolution 56% end-to-end at 97%.

The text lane's evidence floor gates its answer only: zeroing the row's score
would reorder the ranking and make the margin gate compare a different pair
than the one it was measured on.

code/sweep_accept_lines.py sweeps both axes jointly through the shipped
DecisionPolicy; the earlier table swept one axis while pinning the other, so
its baseline rows were not the old line.
This commit is contained in:
kiyo9w 2026-09-29 09:28:13 +09:00
parent 4ce41ecb17
commit 5094b5f6ca
12 changed files with 815 additions and 195 deletions

View file

@ -2,129 +2,142 @@
"dataset": "wikimedia-commons-2",
"catalog": "stock-lopia-clean",
"note": "Unrelated shelves: every accept is a false accept by construction.",
"images": 17,
"detections": 462,
"false_accepts": 1,
"false_accept_rate": 0.0022,
"config": {
"frame_long_side": 1280,
"detect_conf": 0.1,
"local_accept": 4.0,
"text_min_shared": 4
},
"images": 18,
"detections": 1076,
"false_accepts": 0,
"false_accept_rate": 0.0,
"rows": [
{
"file": "000_1920px-2011年4月の牛乳_(5588310773).jpg",
"title": "File:2011年4月の牛乳 (5588310773).jpg",
"detections": 78,
"false_accepts": 1,
"ms": 3504
"detections": 105,
"false_accepts": 0,
"ms": 3108
},
{
"file": "001_Candy_in_Japan_2005_(5256472).jpg",
"title": "File:Candy in Japan 2005 (5256472).jpg",
"detections": 12,
"detections": 41,
"false_accepts": 0,
"ms": 408
"ms": 1077
},
{
"file": "002_1920px-Empty_shelves_in_Tokyo_area_as_people_get_ready_for_t.jpg",
"title": "File:Empty shelves in Tokyo area as people get ready for typhoon Hagibis - Oct 11 2019 330pm.jpeg",
"detections": 8,
"detections": 55,
"false_accepts": 0,
"ms": 101
"ms": 637
},
{
"file": "003_1920px-HK_SW_上環_Sheung_Wan_德輔道西_88_Des_Voeux_Road_West_shop_.jpg",
"title": "File:HK SW 上環 Sheung Wan 德輔道西 88 Des Voeux Road West shop 惠康超級市場 Wellcome Supermarket goods August 2020 SS2 27.jpg",
"detections": 10,
"detections": 38,
"false_accepts": 0,
"ms": 1560
"ms": 952
},
{
"file": "005_1920px-Illuminated_wooden_shelf_with_many_glass_jars_contain.jpg",
"title": "File:Illuminated wooden shelf with many glass jars containing cookies for sale in Tokyo.jpg",
"detections": 41,
"detections": 47,
"false_accepts": 0,
"ms": 2946
"ms": 862
},
{
"file": "006_1920px-Interior_of_JUSCO_Shingu_Shopping_Center_20100213c.jpg",
"title": "File:Interior of JUSCO Shingu Shopping Center 20100213c.JPG",
"detections": 105,
"false_accepts": 0,
"ms": 1087
},
{
"file": "007_Japan_earthquake_store_shelves.jpg",
"title": "File:Japan earthquake store shelves.jpg",
"detections": 4,
"detections": 11,
"false_accepts": 0,
"ms": 298
"ms": 277
},
{
"file": "009_Milk_(2655574568).jpg",
"title": "File:Milk (2655574568).jpg",
"detections": 58,
"detections": 153,
"false_accepts": 0,
"ms": 2802
"ms": 2720
},
{
"file": "010_Natsuge-mikado_okashi.jpg",
"title": "File:Natsuge-mikado okashi.jpg",
"detections": 7,
"detections": 30,
"false_accepts": 0,
"ms": 704
"ms": 724
},
{
"file": "012_1920px-Supermarket_in_2006_(646332846).jpg",
"title": "File:Supermarket in 2006 (646332846).jpg",
"detections": 129,
"detections": 174,
"false_accepts": 0,
"ms": 6707
"ms": 1950
},
{
"file": "014_1920px-「ペヤング」予想通りの大売れ!_(18634213682).jpg",
"title": "File:「ペヤング」予想通りの大売れ! (18634213682).jpg",
"detections": 27,
"detections": 30,
"false_accepts": 0,
"ms": 762
"ms": 707
},
{
"file": "015_1920px-お客様各位_2008_国内産バター_(2429997079).jpg",
"title": "File:お客様各位 2008 国内産バター (2429997079).jpg",
"detections": 14,
"detections": 28,
"false_accepts": 0,
"ms": 1499
"ms": 1036
},
{
"file": "016_1920px-パン売り場_手動ドア式_2016_(28574754416).jpg",
"title": "File:パン売り場 手動ドア式 2016 (28574754416).jpg",
"detections": 21,
"detections": 63,
"false_accepts": 0,
"ms": 1842
"ms": 1248
},
{
"file": "017_1920px-プラレール_2015_(22339689873).jpg",
"title": "File:プラレール 2015 (22339689873).jpg",
"detections": 12,
"detections": 73,
"false_accepts": 0,
"ms": 864
"ms": 1324
},
{
"file": "018_一家族様一本限り_(5588902836).jpg",
"title": "File:一家族様一本限り (5588902836).jpg",
"detections": 27,
"detections": 41,
"false_accepts": 0,
"ms": 3880
"ms": 1208
},
{
"file": "019_1920px-洗濯洗剤_(10852819193).jpg",
"title": "File:洗濯洗剤 (10852819193).jpg",
"detections": 8,
"detections": 44,
"false_accepts": 0,
"ms": 704
"ms": 606
},
{
"file": "020_1920px-申し訳ございませんが_ごめんなさい_お魚本日の調理は終了いたしました。_どうぞよろしくお願いします_(11.jpg",
"title": "File:申し訳ございませんが ごめんなさい お魚本日の調理は終了いたしました。 どうぞよろしくお願いします (11331761984).jpg",
"detections": 6,
"detections": 25,
"false_accepts": 0,
"ms": 957
"ms": 571
},
{
"file": "021_1920px-要冷蔵_(4513315790).jpg",
"title": "File:要冷蔵 (4513315790).jpg",
"detections": 0,
"detections": 13,
"false_accepts": 0,
"ms": 190
"ms": 259
}
]
}