iPhone 牌認識テストの課題(49指摘)を「日付・担当・順番」に落とした実行計画。牌の識別方式に入る変更もすべて図解で説明します。基準日: 2026-07-26(日)
約1ヶ月間気づかれずに止まっていた本番モデルを復旧。camera-ai は今すぐ iPhone で開けば動きます。
「テストが毎回成立し・結果が数値で残り・誤認識が学習に届く」状態を作る 8 項目。あなたの作業は jitaku-pc1 の電源を入れる(7/29) の1つだけ。
KEEP 投票再設計+高速化(P1)→ 誤認識 30 件で自動再学習が発火 → 月末に「実際の認識率」が初めて数字になり、9月のスマートグラス Phase 0 判断につながる。
バーの長さは目安の作業期間。「自動再学習」は誤認識報告が30件貯まった時点で自動発火するため、テスト頻度により前後します。前提として jitaku-pc1 の復旧(7/29)が必要です。
| 日付 | やること | 所要 | 担当 |
|---|---|---|---|
| 7/26(日) | ✅ 本番モデル復旧+検証レポート2本公開(完了) | — | 完了 |
| 7/27(月) | #1 モデル読込の故障検出+バージョン表示 / #2 CDN 死亡時ガード / #5 確定時 video.pause()+カメラエラーの日本語案内 / #6 ガイド枠のモード分岐(図6) | 約3h | Claude(改修指示でOK) |
| 7/28(火) | #3 画面ロック復帰・Wake Lock・連打ガード / #4 150ms スロットリング+400回ごとセッション再生成 / P0-H デプロイ前 assert+日次ヘルスチェック | 約3h | Claude |
| 7/29(水) | #7 誤認識フィードバック送信(worker 改修先行・オプトイン)/ 🔌 jitaku-pc1 の電源投入 → install-pdca-task.ps1 実行(Phase D) | 3.5h+15分 | Claude+あなた(物理) |
| 7/31(金)〜8/1(土) | 📱 実機テストプロトコル初回(15分×2セッション: 基準手牌A/B/C・version と EP を記録)+ iOS 26 クラッシュ対策の10分耐久判定 | 1h | あなた(iPhone)+Claude(記録集計) |
| 8/3(月)〜8/8(土) | P1 一式: KEEP 投票再設計(図4)/ ort 1.27.0 二段ロード / NMS 2段閾値 / COOP/COEP+自ホスト / ズームスライダー+1080p | 約16h | Claude |
| 8月 毎週 火・土 | 📱 定点テスト(15分/回)— ✕削除・訂正がそのまま学習データとして自動送信される | 15分×2/週 | あなた(iPhone) |
| 8/10〜8/22 | P2 一式: 誤ロック個別訂正+牌パレット / conf%・実効fps・セッションサマリ / 点数条件バー(ツモ/ロン・親/子・リーチ・ドラ) | 約8h | Claude |
| 8月中〜下旬 | 誤認識報告 30 件到達 → PDCA 自動再学習が初発火(jitaku-pc1 GTX1050)→ 萬子退行ガード → 合格なら自動デプロイ | 自動 | 自動(jitaku-pc1) |
| 8/31(月)まで | 🎯 実地認識率(field 精度)の一次データ確定 → スマートグラス Phase 0(XREAL 発注 ¥93,780・YOLOX 本格移行)の Go 判断 | — | あなた(判断) |
モデル回収→再デプロイ→content-type 検証(7/26 完了)
モデル読込チェック+version/EP 常時表示。以後のテストが「どのモデルの結果か」判別可能に
CDN ガード/確定時の映像静止/ガイド枠のモード分岐(並行実施可)
画面ロック復帰+Wake Lock/クラッシュ対策(150ms+セッション再生成)
誤認識の自動送信(worker 先行改修)+jitaku-pc1 電源 ON(あなた)
プロトコルどおり15分×2。10分耐久でクラッシュ対策の合否も判定
#7 は feedback-worker(サーバ側)の改修を先にやらないとクライアントから送れないため最後。#1 を最初にやるのは「以降のすべてのテスト結果にモデル版と EP のラベルが付く」ようにするためです。
結論から: 「牌を検出する AI(38クラス YOLO)そのものは変わりません」。変わるのは ①動かし方(常時全速→賢く間引き) ②結果の確定のさせ方(投票の再設計) ③エンジンの土台(ライセンスとランタイム)の3点です。
KEEP モード = 手牌13枚を映し続け、フレームごとの検出結果を「投票」して確定させる仕組み。実機で固まらない原因が4つ見つかり、すべて設計変更します。
| # | ❌ 今まで | ✅ これから | 効果 |
|---|---|---|---|
| ① 開始条件 | 「ちょうど13枚検出できた1フレーム」でしか枠決めが始まらない → 1枚でも見落とすと永遠に始まらず、逆に誤検出込みの13枚で始まると全部汚染 | 直近10フレームの多数決で枠位置を推定(12枚しか見えない時は間隔から欠け位置を補間) | 実機でも数秒で確実に開始 |
| ② 枠への割当 | 横位置(x座標)だけで最寄りの枠に割当 → 手ブレで全部が隣の枠にズレて隣の牌に投票してしまう | フレーム全体のズレ量を先に推定して補正してから割当(+左から順の1対1マッチング) | 手持ち撮影でも投票が汚れない |
| ③ 投票の記憶 | 投票は無限に蓄積 → 最初に照明で誤認識した票が残り続け、正解が続いても確定できない | 直近20票だけで判定(古い票は捨てる)+確定できない枠は「conf不足」など理由を表示 | 途中から正しく映せば直る |
| ④ 赤5の扱い | 「赤5」と「普通の5」を別々の候補として投票 → 認識が揺れると票が割れてどちらにも確定しない | 2層投票: 牌の種類(5萬)としてまず確定し、「赤かどうか」は別の多数決で判定 | 赤5が原因の固まらない現象を解消 |
stamp-maker プロジェクトの牌面実測仕様書(58項目を検証済み)から、AI が混同しやすいペアの決定的な見分け方を後処理ルールとして組み込みます(8月・P1)。AI の予測が牌面の赤の配置と矛盾したら確信度を下げる仕組みです。


赤い要素の並ぶ向きが直交している唯一のペア。AI が「9筒」と言ったのに赤が縦に並んでいたら 9索に訂正候補を出す。


どちらも「赤4個が下段」で下半分は完全に同じ。上段が指などで隠れている時の混同はAI の欠陥ではなく情報不足として扱い、低確信マークを付ける。


赤 1 本の位置だけが手掛かり。7索は上下の向きがある牌なので、逆さに置かれると赤が下に来る点も後処理で考慮する。






牌画像: 上段3ペアは camera-ai と同じ表示用画像(docs-site/tiles)、赤5比較は stamp-maker 牌面実測仕様書のレンダラ出力(手続き描画・AI生成ではない)。
AI はガイド枠(黄色い点線)の内側だけを見ています。今の枠は「13枚横一列」専用の薄い帯なので、6枚スキャンで牌を大きく映すと上下がはみ出し、はみ出した部分は AI に渡っていませんでした。7/27 の改修(#6)で枠がモードに追従します。
| 期限 | チェック項目 | 確認方法 |
|---|---|---|
| 7/26 | ☑ 本番でモデルが配信されている | 済 — curl -w "%{content_type}" が octet-stream / 10.6MB |
| 7/31 | ☐ 画面に「モデル版 | webgpu/wasm | 推論ms」が常に出る | iPhone で camera-ai を開いて目視 |
| 7/31 | ☐ 画面ロック→復帰してもテスト続行できる | 実機テスト手順5(耐久) |
| 8/1 | ☐ 10分連続稼働してもクラッシュしない(iOS 26) | P0-4 有効性判定ゲート |
| 8/1 | ☐ 初回プロトコルの記録が log-ml-progress.py に残る | 手牌A/B/C の一発正解率が数字で存在 |
| 8/8 | ☐ KEEP が実機で毎回30秒以内に13枠固定される | 実機テスト手順3 |
| 8月中旬 | ☐ 誤認識の✕削除・訂正が feedback に自動送信される(同意制) | pdca-state.json の new_feedback が増える |
| 8月下旬 | ☐ feedback 30件 → jitaku-pc1 で自動再学習が1周完走 | PDCA ダッシュボード+LINE 通知 |
| 8/31 | ☐ 実地認識率(field 精度)が数値で確定 | field_val_map50 ≠ null |
| 9月〜 | ☐ スマートグラス Phase 0 の Go/No-Go 判断(XREAL 発注) | 親仕様 §10 |