Roboflow Starter Plan ($60/月) の必要性を実測データから評価:
→ 年間 ¥108,000 の節約 (実機開発・量産費用に再投資)
| 区分 | 件数 | 説明 |
|---|---|---|
frames-roboflow/ | 499 枚 | extract-roboflow-frames.py で M-League sample01/02 から等間隔抽出した raw データ |
frames-roboflow-filtered/ | 201 枚 | filter-roboflow-frames.py が「卓画像」と判定 (keep) |
frames-roboflow-discarded/ | 298 枚 | 同フィルタが「インタビュー・タイトルカード等」と判定 (discard) |
各フレームに scripts/mask-table-region.py の table_region_mask() を適用:
1. HSV で緑域検出 (Hue 30-95, S 30+, V 30-230)
2. Morphological open/close でノイズ除去
3. 最大連結成分抽出 (= 卓本体)
4. min_area_pct < 5% なら fallback (= 卓検出失敗)
5. 凸包 + 5% dilate で「卓の輪郭」確定
出力メトリクス:
- felt_ratio: 緑色域がフレーム全体に占める割合
- hull_area_ratio: 凸包 + dilate 後の卓領域占有率
- fallback: True = 卓未検出
本レポートの数値生成: scripts/mleague-green-table-analysis.py (新規、全フレームをバッチ処理)
| 区分 | 件数 | fallback (卓未検出) | 緑卓 検出成功 | hull median | felt median |
|---|---|---|---|---|---|
| raw (全件) | 499 | 297 (59.5%) | 202 (40.5%) | 0.544 | 0.056 |
| filtered (keep) | 201 | 31 (15.4%) | 170 (84.6%) | 0.592 | 0.293 |
| discarded | 298 | 266 (89.3%) | 32 (10.7%) | 0.143 | 0.023 |
| 区分 | min | p25 | median | p75 | max |
|---|---|---|---|---|---|
| felt_ratio (緑色占有率) | |||||
| raw | 0.000 | 0.012 | 0.056 | 0.279 | 0.566 |
| filtered | 0.083 | 0.227 | 0.293 | 0.366 | 0.566 |
| discarded | 0.000 | 0.005 | 0.023 | 0.077 | 0.482 |
| hull_area_ratio (凸包後の卓占有率、fallback 除く) | |||||
| raw 検出成功 (202件) | 0.052 | 0.426 | 0.544 | 0.674 | 0.937 |
| filtered 検出成功 (170件) | 0.060 | 0.522 | 0.592 | 0.685 | 0.937 |
| discarded 検出成功 (32件) | 0.052 | 0.090 | 0.143 | 0.288 | 0.628 |
最も「卓中心の構図」で撮られたフレーム上位 12。マスク適用後の画像 (卓外を黒塗り)。
緑卓が映っていない (= インタビュー・タイトルカード・観客席・暗転) フレーム。
filter は「keep」と判定したが緑卓検出は失敗した 31 枚 (filter 過剰許容の候補)。
filter は「discard」と判定したが緑卓は検出された 32 枚 (filter 過剰排除の候補)。
| 緑卓 検出成功 | 緑卓 Fallback | 合計 | |
|---|---|---|---|
| filter: keep | 170 (一致) | 31 (不一致) | 201 |
| filter: discard | 32 (不一致) | 266 (一致) | 298 |
| 合計 | 202 | 297 | 499 |
整合率 = (170 + 266) / 499 = 87.4%。
2 つのバイナリ分類の一致度 (期待一致を補正):
p_observed = 0.874
p_expected = ((201 × 202) + (298 × 297)) / 499² = 0.5188
kappa = (0.874 - 0.5188) / (1 - 0.5188) = 0.738
Cohen's Kappa = 0.738 = Substantial agreement (Landis & Koch 基準: 0.61-0.80)
| 機能 | 用途 | 料金 | 代替手段 | 判定 |
|---|---|---|---|---|
| Hosted Inference | 本番推論 | $60/月 (Starter) | ONNX Runtime Web (MIT, 無料, ブラウザ内推論) | 不要 |
| Auto-Label (汎用モデル) | 初期 bbox 提示 | Starter 以上 | 初期は手動 / Roboflow Free 一部利用 | 最小限 |
| Cloud Training | モデル訓練 | Starter 以上 | YOLOX-Nano をローカル GPU (RTX4090) で訓練 (Apache 2.0, 無料) | 不要 |
| Dataset Hosting (公開) | データセット閲覧 | Free | mahjong_huge は Free でダウンロード可 | Free 維持 |
| Universe アクセス | 類似モデル参照 | Free | Free のままで十分 | Free 維持 |
| API Quota (1,000/月) | 推論 API | Free 1,000 / Starter 10,000 | ローカル推論で API 消費ゼロ | 不要 |
| OBB / 高度ヘッド | 傾き検出 | Starter | YOLOX 拡張 or 自前実装 | 不要 |
本実測データが示すのは:
Roboflow Free tier のみで:
(1) アノテーション (1,000 画像まで)
(2) mahjong_huge データセットダウンロード
(3) Universe での類似プロジェクト参照
を完結。有料機能は全て OSS スタックで代替。
年間節約: ¥108,000 (¥60 × 12 = $720 ≒ ¥108,000)
→ 実機 (天井カメラ ¥34,780 + Jetson ¥35,000) 1 セット分以上
詳細は 改訂モデルスタック報告 に記載。本セクションはサマリ。
| レイヤー | 採用技術 | ライセンス | 用途 |
|---|---|---|---|
| 前処理 | scripts/mask-table-region.py | 本プロジェクト | 緑卓抽出 (本レポートで実測検証) |
| 検出モデル | YOLOX-Nano (Megvii) | Apache 2.0 | 麻雀牌の bbox 検出 |
| 訓練データ | mahjong_huge / Riichi Mahjong Detection | CC BY 4.0 | 34 クラス麻雀牌 |
| 合成データ素材 | FluffyStuff/riichi-mahjong-tiles | CC BY 4.0 | SVG → 120×160 PNG エクスポート |
| 推論ランタイム | ONNX Runtime Web (Microsoft) | MIT | ブラウザ内 / Cloudflare Workers / Jetson 共通 |
git clone github.com/Megvii-BaseDetection/YOLOXpython tools/train.py -f exps/example/yolox_nano.py -d 1 -b 64python tools/export_onnx.py --output-name yolox_nano_mahjong.onnx -f ... -c ...generate-synthetic-mahjong.py の素材として組込mahjong-scorekeeping-docs.pages.dev/live-demo.html 上でブラウザ推論デモを公開| 項目 | 月額 | 年額 |
|---|---|---|
| Roboflow Starter Plan | $60 (¥9,000) | $720 (¥108,000) |
| Cloudflare Workers AI 推論 (代替の場合) | $5-10 想定 | $60-120 |
| 合計 (推論 + 訓練 SaaS) | $65-70 | ¥120,000 以上 |
Roboflow Starter は 製品が成長すればコスト線形増 (10,000 推論/月超で追加課金)。 OSS スタック (YOLOX + ORT Web) は 固定費ゼロでスケール するため、 1,000 ユーザー獲得時点で年間 数十万円〜数百万円の差。 クラウドファンディング想定 700 セット完売時には明確な利益寄与。
すでに Roboflow Starter Plan を契約済み or 試用中の場合、以下の手順で Free tier にダウングレードできる。
| 用途 | URL |
|---|---|
| ログイン | https://app.roboflow.com/login |
| ダッシュボード | https://app.roboflow.com/ |
| Workspace 一覧 | https://app.roboflow.com/workspaces |
| Plans & Pricing (新規・変更) | https://roboflow.com/pricing |
| Workspace 設定 (請求 ・ メンバー) | https://app.roboflow.com/[workspace-name]/settings |
| 請求設定 (直接) | https://app.roboflow.com/[workspace-name]/settings/billing |
| サポート (退会・返金) | https://help.roboflow.com/ / support@roboflow.com |
shimanto-mahjong) を選択/settings/billing)もし 7-day Free Trial (または 14-day) を試用中なら、何もしなければ自動的に Trial 終了で Free に降格する。明示的なダウングレード操作は不要。ただしカード登録済の場合は念のためカード削除 (Step 10) しておくと安心。
直近で Starter に課金されたばかりの場合、Roboflow サポートに依頼すれば返金される可能性がある:
To: support@roboflow.com
件名: Refund request — Downgrade from Starter to Free
本文:
Hi Roboflow team,
I subscribed to the Starter Plan for workspace "[workspace-name]"
on [日付], but I would like to downgrade to Free immediately and
request a refund for the unused portion.
Reason: [移行理由を一文。例: We have decided to use an open-source
alternative (YOLOX + ONNX Runtime Web) for our project.]
Workspace name: [workspace-name]
Account email: miyata@shimanto.com
Subscription start date: [日付]
Best regards,
[氏名]
Roboflow は比較的協調的なので、初回支払い後数日以内なら満額返金されるケースが多い (公式 SLA ではないが過去事例多数)。
| 機能 | Free tier で利用可 | 確認方法 |
|---|---|---|
| Project 閲覧 | ✅ | Workspace に既存 Project が見える |
| 画像アップロード | ✅ (1,000 枚まで) | Upload ボタン押下 |
| アノテーション (手動) | ✅ | Annotate タブ |
| Auto-Label | ❌ | 機能ロックされている表示 |
| Generate Version | ✅ (制限あり) | 月 N 回 |
| Cloud Training | ❌ (有料機能) | Train ボタン disabled |
| Hosted Inference (API) | ✅ (月 1,000 推論) | API クォータ表示 |
| Dataset ダウンロード | ✅ | 「Download Dataset」ボタン |
| Universe 公開モデル使用 | ✅ | 変わらず |
もし Mahjong Vision で Roboflow を一切使わない方針なら、アカウント自体を削除することも可能:
mahjong_huge データセットを将来ダウンロードする可能性があるなら、アカウントは残すのが推奨mahjong_huge データセットを Free tier でダウンロード済み--roboflow-model 参照を YOLOX-Nano モデルに更新済みmahjong-scorekeeping-docs.pages.dev/live-demo.html に公開済みROBOFLOW_API_KEY) を .env から削除