何をするか

PoiMae(ポイ前)は、ごみを捨てる直前の10秒のための小さなWebアプリです。写真を選ぶと、材質の候補を「そう見えた理由」つきで返し、その材質語で選んだ自治体の公式分別辞典を引いて、区分の候補と注記を出します。

アプリは断定しません。写真から品目を1つに決めることは原理的に無理だからです(同じ「プラスチック」でも容器包装プラスチックと不燃ごみに分かれます)。候補を並べ、決めるのは人にします。画面には必ず次を出します。

  • 材質の候補と根拠(例:「半透明で、つやがある」)
  • 自治体辞典での候補(品目名・区分・手数料・公式の注記)
  • 他の自治体では区分が違うという警告
  • 「30cm以上は大型ごみ」のような条件つき注記
  • 今週のごみの日(収集曜日はブラウザにだけ保存)

写真は端末の外に出ません。外部API・CDN・解析タグを一切読みません。

Rethinking Waste:狙った問題と、どう測るか

日本の家庭ごみの分別は自治体ごとに違い、同じ品目でも行き先が変わります。このリポジトリに同梱した広島市と札幌市の公式辞典を突き合わせると、両市に同名で載っている148品目のうち区分を比較できた114品目の 26.3%(30品目)で区分が違いました(例:使い捨てカイロ・クレヨンは広島市「不燃ごみ」/札幌市「燃やせるごみ」)。引っ越した人や当番が変わった家庭で、この差は資源の取り違えと危険物の混入を生みます。捨てる前の10秒に公式辞典ベースの候補と根拠を出すことで、その取り違えを減らすのが狙いです。

効果は3層で測ります。(1) 分類器の精度 — ラベル付き画像のtop-1/top-3と材質ごとの再現率。(2) 配管の正しさ — 写真→材質語→辞典の答えが、辞典の確信ある応答と一致する割合。(3) 実際の効果 — 「分別に迷った品目」を記録してもらい、導入前後で手戻り(出し直し)と問い合わせ件数、誤投入が減ったかを同じ品目集合で前後比較する。本提出で測れているのは (1)(2) で、(3) は未実施です。

どう作ったか

  • 前処理と特徴量化(src/poimae/features.py):OpenCVで縮小→グレースケール→Otsu→画像の外周から前景/背景の極性を判定→最大ブロブを物体として切り出し→色相・彩度・明るさ・色数・テクスチャ・エッジ密度・ハイライト率・solidityを物体の内側だけで計算。白い机の背景に引っ張られないための工夫です。
  • 材質の候補(classifier.py):学習モデルではなく10材質のルール表。各材質に「らしい証拠」と「らしくない証拠(減点)」を持たせ、max(0, 獲得点/正の重み合計) をスコアにします。0.34未満なら「不明」を先頭に置きます。
  • 自治体ルール(municipalities.py):JSON 1ファイル=1自治体。完全一致/前方一致/部分一致/あいまい一致の4段階で引き、表記ゆれ(ひらがな・全角・括弧・送り仮名)を吸収。確信をもって答えられるかを別に判定します。
  • 都市間の差分(crosscity.py):同じ品目名で区分が違うものを自動検出。
  • Web(app.py + static/):FastAPI 8エンドポイント+素のHTML/CSS/JS。CDNもwebfontも使いません。
  • データ(tools/build_municipalities.py):広島市(618品目・10区分)と札幌市(1019品目・14区分)の公式ページから取得し、出典URL・取得日・SHA-256をJSONに埋め込みました。3つめは架空のサンプル市で、そう表示されます。

実測したこと(弱点も含めて)

  • ホールドアウトした合成画像60枚で、材質のtop-1正解率 65.0%、top-3 88.3%(常に最頻クラスを答える基準線は10.0%)。
  • 写真→材質語→辞典の配管は、架空のサンプル市で 71.7%(基準線30.0%)。実在2市は「材質語だけでは品目が決まらない」ため採点対象が減り、広島市 58.3%(12枚)/札幌市 50.0%(24枚)。枚数が少ないので参考値です。
  • これは実世界の精度ではありません。 合成画像で測った「配管が動く証拠」です。ガラス瓶 0%、陶磁器・生ごみ・ペットボトル 50% という弱点もすべて docs/EVALUATION.md に公開しています。
  • テストは84本、make test 一発で再現します。

正直な限界

実写真での精度は未測定です。「実世界で65%当たる」とは書きません。自治体データは2市のみ(+架空1)で「全国対応」ではありません。収集日は自動取得しません(外部に問い合わせない設計のため、曜日は利用者が入力)。分類器は学習モデルではありません。

次にやること

  1. ガラス瓶(唯一の0%):背景色を差し引く撮影方法と、エッジの屈折を使う特徴量。
  2. 実写真100枚でのラベル付けと再測定(合成画像の数字を実世界の数字に置き換える)。
  3. 自治体を増やす(JSONを足すだけの形にしてあります)。
  4. 複数物体への対応(1枚に1物体という現在の前提を外す)。

リンク

Built With

Share this project:

Updates

Submission history