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
}
]
}

View file

@ -2,325 +2,338 @@
"dataset": "wikimedia-commons",
"catalog": "stock-lopia-clean",
"note": "Unrelated shelves: every accept is a false accept by construction.",
"images": 45,
"detections": 2133,
"false_accepts": 7,
"false_accept_rate": 0.0033,
"config": {
"frame_long_side": 1280,
"detect_conf": 0.1,
"local_accept": 4.0,
"text_min_shared": 4
},
"images": 46,
"detections": 3504,
"false_accepts": 3,
"false_accept_rate": 0.0009,
"rows": [
{
"file": "000_1920px-198円_中華弁当_2016_(25800617695).jpg",
"title": "File:198円 中華弁当 2016 (25800617695).jpg",
"detections": 2,
"detections": 14,
"false_accepts": 0,
"ms": 1774
"ms": 1669
},
{
"file": "001_1920px-2011年4月の牛乳_(5588310773).jpg",
"title": "File:2011年4月の牛乳 (5588310773).jpg",
"detections": 78,
"false_accepts": 1,
"ms": 4553
"detections": 105,
"false_accepts": 0,
"ms": 3225
},
{
"file": "002_1920px-20140909-0252_Costa_Mesa_Mitsuwa.JPG",
"title": "File:20140909-0252 Costa Mesa Mitsuwa.JPG",
"detections": 95,
"detections": 121,
"false_accepts": 0,
"ms": 3025
"ms": 2674
},
{
"file": "003_1920px-Aomori_Home_(4721758999).jpg",
"title": "File:Aomori Home (4721758999).jpg",
"detections": 76,
"detections": 97,
"false_accepts": 0,
"ms": 3634
"ms": 3333
},
{
"file": "004_1920px-Asakusa_15_-_making_rice_crackers_the_old_way_(155797.jpg",
"title": "File:Asakusa 15 - making rice crackers the old way (15579727827).jpg",
"detections": 14,
"detections": 40,
"false_accepts": 0,
"ms": 162
"ms": 456
},
{
"file": "005_1920px-Asakusa_16_-_making_rice_crackers_the_old_way_(155794.jpg",
"title": "File:Asakusa 16 - making rice crackers the old way (15579472088).jpg",
"detections": 3,
"detections": 30,
"false_accepts": 0,
"ms": 131
"ms": 537
},
{
"file": "006_1920px-Asakusa_17_-_making_rice_crackers_the_old_way_(155794.jpg",
"title": "File:Asakusa 17 - making rice crackers the old way (15579471588).jpg",
"detections": 4,
"detections": 30,
"false_accepts": 0,
"ms": 132
"ms": 485
},
{
"file": "007_1920px-Asakusa_19_-_the_woman_selling_the_rice_crackers_(157.jpg",
"title": "File:Asakusa 19 - the woman selling the rice crackers (15764889785).jpg",
"detections": 3,
"detections": 33,
"false_accepts": 0,
"ms": 67
"ms": 502
},
{
"file": "008_1920px-Azabudai-Hills---2025-04-05_015.jpg",
"title": "File:Azabudai-Hills---2025-04-05 015.jpg",
"detections": 37,
"detections": 54,
"false_accepts": 2,
"ms": 2113
"ms": 2525
},
{
"file": "010_1920px-Breathalyzers_in_a_MaxValu_supermarket.jpg",
"title": "File:Breathalyzers in a MaxValu supermarket.jpg",
"detections": 5,
"detections": 24,
"false_accepts": 0,
"ms": 368
"ms": 1508
},
{
"file": "011_1920px-Chocolate_in_Japan_(5137097169).jpg",
"title": "File:Chocolate in Japan (5137097169).jpg",
"detections": 65,
"false_accepts": 1,
"ms": 3829
"detections": 78,
"false_accepts": 0,
"ms": 1961
},
{
"file": "013_1920px-Confectionery_at_WCTC_Shopping_Center,_Koror_City,_Pa.jpg",
"title": "File:Confectionery at WCTC Shopping Center, Koror City, Palau.jpg",
"detections": 96,
"detections": 154,
"false_accepts": 0,
"ms": 6114
"ms": 3424
},
{
"file": "014_1920px-Deer_cookies_at_Nara,_Japan.jpg",
"title": "File:Deer cookies at Nara, Japan.jpg",
"detections": 10,
"detections": 24,
"false_accepts": 0,
"ms": 733
"ms": 465
},
{
"file": "015_1920px-ESL_Price_Tag.JPG",
"title": "File:ESL Price Tag.JPG",
"detections": 32,
"detections": 56,
"false_accepts": 0,
"ms": 1506
"ms": 1383
},
{
"file": "017_1920px-Food-with-physiological-energy-value-example.jpg",
"title": "File:Food-with-physiological-energy-value-example.jpg",
"detections": 10,
"detections": 32,
"false_accepts": 0,
"ms": 454
"ms": 1070
},
{
"file": "019_1920px-HK_CWB_Wellcome_Shop_Supermarket_goods_Carbonated_sof.jpg",
"title": "File:HK CWB Wellcome Shop Supermarket goods Carbonated soft drink codd-neck bottles 波子汽水 Apple Ramune Japanese products July 2017 IX1.jpg",
"detections": 18,
"detections": 42,
"false_accepts": 0,
"ms": 712
"ms": 1094
},
{
"file": "021_1920px-Interior_of_Supermarket_in_Japan_02.jpg",
"title": "File:Interior of Supermarket in Japan 02.jpg",
"detections": 5,
"detections": 18,
"false_accepts": 0,
"ms": 286
"ms": 491
},
{
"file": "022_1920px-JP_日本_Japan_沖繩_OKINAWA_浦添市_Urasoe-city_AEON_Supermark.jpg",
"title": "File:JP 日本 Japan 沖繩 OKINAWA 浦添市 Urasoe-city AEON Supermarket food drinks February 2026 N13p 02.jpg",
"detections": 119,
"detections": 165,
"false_accepts": 0,
"ms": 4603
"ms": 3522
},
{
"file": "023_1920px-thumbnail.jpg",
"title": "File:JP 日本 Japan 沖繩 OKINAWA 那霸 Naha Omoromachi Shintoshin 新都心 Naha Main Place 商場 Shopping Mall shop Aeon Supermarket drink 益力多 January 2025 R12S 01.jpg",
"detections": 117,
"detections": 197,
"false_accepts": 0,
"ms": 2581
"ms": 3389
},
{
"file": "024_1920px-JaSupermarket_Instant_noodles.JPG",
"title": "File:JaSupermarket Instant noodles.JPG",
"detections": 97,
"detections": 147,
"false_accepts": 0,
"ms": 2750
"ms": 2744
},
{
"file": "026_1920px-Kawasaki-Inryo-1.jpg",
"title": "File:Kawasaki-Inryo-1.jpg",
"detections": 12,
"detections": 45,
"false_accepts": 0,
"ms": 892
"ms": 2007
},
{
"file": "029_1920px-Miyazu_Mipple_1F_2021-04_ac.jpg",
"title": "File:Miyazu Mipple 1F 2021-04 ac.jpg",
"detections": 73,
"detections": 157,
"false_accepts": 0,
"ms": 852
"ms": 1782
},
{
"file": "030_1920px-Octopus_rice_crackers_No,1.JPG",
"title": "File:Octopus rice crackers No,1.JPG",
"detections": 5,
"detections": 22,
"false_accepts": 0,
"ms": 247
"ms": 556
},
{
"file": "031_1920px-Octopus_senbei.JPG",
"title": "File:Octopus senbei.JPG",
"detections": 4,
"detections": 23,
"false_accepts": 0,
"ms": 140
"ms": 612
},
{
"file": "032_1920px-Okaki_for_sale_in_Kawagoe.jpg",
"title": "File:Okaki for sale in Kawagoe.jpg",
"detections": 27,
"detections": 70,
"false_accepts": 0,
"ms": 267
"ms": 1042
},
{
"file": "033_Okonomiyaki_and_takoyaki_ingredients.jpg",
"title": "File:Okonomiyaki and takoyaki ingredients.jpg",
"detections": 39,
"detections": 55,
"false_accepts": 0,
"ms": 1228
"ms": 2553
},
{
"file": "034_1920px-Rice_toppings_&_additional_ingredients_(5846028686).jpg",
"title": "File:Rice toppings & additional ingredients (5846028686).jpg",
"detections": 59,
"false_accepts": 0,
"ms": 1871
},
{
"file": "035_1920px-SW_4963.jpg",
"title": "File:SW 4963.jpg",
"detections": 5,
"detections": 41,
"false_accepts": 0,
"ms": 200
"ms": 755
},
{
"file": "037_1920px-Soy_Sauce_selection_(6362318717).jpg",
"title": "File:Soy Sauce selection (6362318717).jpg",
"detections": 68,
"detections": 85,
"false_accepts": 0,
"ms": 1671
"ms": 1623
},
{
"file": "038_1920px-Soy_sauce_(5846027636).jpg",
"title": "File:Soy sauce (5846027636).jpg",
"detections": 103,
"false_accepts": 1,
"ms": 1626
"detections": 216,
"false_accepts": 0,
"ms": 2534
},
{
"file": "039_1920px-Soy_sauce_in_supermarket.JPG",
"title": "File:Soy sauce in supermarket.JPG",
"detections": 71,
"detections": 101,
"false_accepts": 0,
"ms": 2380
"ms": 1884
},
{
"file": "040_1920px-Spice_Supermarket_Japan.JPG",
"title": "File:Spice Supermarket Japan.JPG",
"detections": 254,
"detections": 300,
"false_accepts": 0,
"ms": 2544
"ms": 2994
},
{
"file": "041_1920px-Strong_Zero_4962.jpg",
"title": "File:Strong Zero 4962.jpg",
"detections": 18,
"detections": 45,
"false_accepts": 0,
"ms": 856
"ms": 1731
},
{
"file": "042_1920px-Supermarket_Digital_Displays_(2927051130).jpg",
"title": "File:Supermarket Digital Displays (2927051130).jpg",
"detections": 89,
"detections": 97,
"false_accepts": 1,
"ms": 3561
"ms": 2454
},
{
"file": "043_1920px-Tasty_Food_Abundance_in_Healthy_Europe.png",
"title": "File:Tasty Food Abundance in Healthy Europe.png",
"detections": 13,
"detections": 32,
"false_accepts": 0,
"ms": 1202
"ms": 982
},
{
"file": "047_1920px-Tokyo---Ebisu-and-Shibuya---2026-02-04_162.jpg",
"title": "File:Tokyo---Ebisu-and-Shibuya---2026-02-04 162.jpg",
"detections": 74,
"detections": 81,
"false_accepts": 0,
"ms": 4770
"ms": 1356
},
{
"file": "048_1920px-Tokyo---Ebisu-and-Shibuya---2026-02-04_167.jpg",
"title": "File:Tokyo---Ebisu-and-Shibuya---2026-02-04 167.jpg",
"detections": 46,
"detections": 51,
"false_accepts": 0,
"ms": 2557
"ms": 823
},
{
"file": "050_1920px-Umami_Snack_(41957534).jpeg",
"title": "File:Umami Snack (41957534).jpeg",
"detections": 33,
"detections": 55,
"false_accepts": 0,
"ms": 3096
"ms": 2518
},
{
"file": "051_1920px-このかねをならすのはだーれ_(3079692697).jpg",
"title": "File:このかねをならすのはだーれ (3079692697).jpg",
"detections": 0,
"detections": 3,
"false_accepts": 0,
"ms": 125
"ms": 170
},
{
"file": "052_1920px-スーパーの野菜コーナー_2008_(2785121488).jpg",
"title": "File:スーパーの野菜コーナー 2008 (2785121488).jpg",
"detections": 25,
"detections": 85,
"false_accepts": 0,
"ms": 1681
"ms": 1963
},
{
"file": "055_1920px-中央フード山手店_-_panoramio.jpg",
"title": "File:中央フード山手店 - panoramio.jpg",
"detections": 15,
"detections": 39,
"false_accepts": 0,
"ms": 263
"ms": 689
},
{
"file": "056_1920px-何このリポD人気⁈買い占めてしまおう。_(4025507198).jpg",
"title": "File:何このリポD人気⁈買い占めてしまおう。 (4025507198).jpg",
"detections": 38,
"detections": 72,
"false_accepts": 0,
"ms": 2912
"ms": 2286
},
{
"file": "057_1920px-味噌売り場_(16183474871).jpg",
"title": "File:味噌売り場 (16183474871).jpg",
"detections": 61,
"detections": 76,
"false_accepts": 0,
"ms": 3355
"ms": 2081
},
{
"file": "058_1920px-塩ひかえめ_(25347152904).jpg",
"title": "File:塩ひかえめ (25347152904).jpg",
"detections": 66,
"detections": 86,
"false_accepts": 0,
"ms": 3043
"ms": 2496
},
{
"file": "060_1920px-牛乳_豆乳_2016_(32081175436).jpg",
"title": "File:牛乳 豆乳 2016 (32081175436).jpg",
"detections": 103,
"false_accepts": 1,
"ms": 3677
"detections": 130,
"false_accepts": 0,
"ms": 4677
},
{
"file": "061_1920px-表示価格より100円引_(38057600585).jpg",
"title": "File:表示価格より100円引 (38057600585).jpg",
"detections": 5,
"detections": 17,
"false_accepts": 0,
"ms": 632
"ms": 899
}
]
}