【自作ツール公開】写真1枚で32枚のカードを自動値付け。ノーマル束の収益分岐点を真正面からぶっ壊した話

ツール開発

こんにちは、TKGです。

前回の記事(第6弾「ニンジャスピナー3BOX収支検証」)で、こんなことを書きました。

BOX開封の収支は、結局「ノーマル束をいくらで捌けるか」が分岐点になる。
でもノーマルカードは1枚ずつ値段を調べきれないから、ブックオフのセンチ売り(1cm何円)に出すしかない。

今回はその課題を、「写真1枚撮るだけで全部のカードに値段が付く」自作ツールで真正面から解決しました。

結論を先に書きます。

32枚を並べた俯瞰写真1枚から、22枚を完全自動同定(命中率95%)
4市場(駿河屋・遊々亭・カードラッシュ・ヤフオク)の価格を全部読み込んできて、
「センチ売りに出すべきカード」と「単品で値が付くカード」を一発で仕分けるツールが完成しました。

ツール名は norma_pricer(ノーマ・プライサー)。「束(ノーマ)に値段(プライス)を付ける人」という意味で命名しました。

きっかけ:駿河屋の¥160縛りでは見えない「リアル価格」

最初は単純に「駿河屋の販売価格を取ってくれば終わるだろ」と思っていました。ところが、駿河屋には業者販売の最低単価¥160という壁があることに気づきます。

たとえば「ゲコガシラ C 021/083」を駿河屋で調べると¥160。「マスキッパ C 004/083」も¥160。「メリープ C 027/083」も¥160
全部¥160です。

でも、実際にカードショップに行くと、ノーマルカードは¥30だったり¥50だったり、人気カードは¥120だったりするわけです。この「ショーケースのリアル価格」が見えないと、ノーマル束の収益分岐点は判断できない。

そこで、データソースを4つに増やしました。

市場性質サンプル価格
駿河屋業者の単品販売、¥160 floorゲコガシラ ¥160
遊々亭実店舗ショップ販売、細かい値付けありゲコガシラ ¥80
カードラッシュ実店舗価格 + 在庫数ゲコガシラ ¥80(在庫131枚)
ヤフオク落札相場(フリマ単価の指標)ゲコガシラ ¥160(4件)

4つの価格を並べた瞬間、同じカードでも市場によって倍以上の価格差があることが見えてきました。これが、このツールの最大の発見です。

ツールの仕組み:写真→検出→OCR→値付け→レポート

ニンジャスピナー開封後に余ったノーマル束から32枚をピックアップして、白いトレイに並べて真上から1枚撮影しました。

32枚並べた俯瞰写真
入力はこの写真1枚だけ。4列×8行で32枚並べてある。

この写真をツールに食わせると、自動で以下の5ステップが走ります。

  1. カード検出:OpenCVでエッジを検出して、各カードの位置を矩形で切り出し(32/32検出)
  2. カード切り出し:傾きを補正して縦長カードに整形、上下逆さまも自動で180°回転
  3. OCR同定:macOS標準のVision APIで「カード名・番号・レアリティ」を読み取り
  4. 4市場価格取得:駿河屋・遊々亭・カードラッシュ・ヤフオクから自動スクレイプ
  5. レポート生成:HTMLでカード画像 × 4市場価格を一覧化
32枚自動検出
緑枠が自動検出された32枚のカード位置。1枚も漏らさず取れている。

OCRの命中率は実検出22枚中21枚で95%。残り1枚は「AZの安らぎ」というトレーナーズカードで、タイトルが縦書きレイアウトのため自動同定できませんでした(手動補正で対応可能)。

出力レポート:ドヤ顔で出す

これが、たった1枚の写真からツールが出力したレポートです。

自動値付けレポート
写真1枚 → 32枚分のカード画像 + 4市場価格が自動生成される。

たとえば「ゲコガシラ C 021/083」の行を見てみてください。

  • 遊々亭:¥80(実店舗価格)
  • 駿河屋:¥160(業者単品最低価格)
  • ヤフオク:¥160(4件、信頼度✓)

遊々亭が¥80、駿河屋が¥160、ヤフオク落札が¥160。同じカードで2倍の差があります。これは「業者がノーマルカードを在庫として並べる時の最低単価が¥160」というコスト構造の違いから生まれる現象で、フリマで¥30〜50で売られるカードでも駿河屋では¥160になるのです。

ノーマル束の「実質単価」を知りたければ、見るべきは遊々亭の価格。これがツール開発で得た最大の学びでした。

M4(ニンジャスピナー)RR以下 価格ランキング Top40

せっかくなのでツールに「M4セット全部の価格」も自動で読み込ませてランキングを作ってみました。今回紹介するのはRR以下(ダブルレア・レア・アンコモン・ノーマル)に絞った Top40 です。

M4 RR以下 Top40
RR以下のM4カードを遊々亭価格でランキング。在庫数も併記。

RR以下で遊々亭¥100以上のカードを抜き出すと――

順位レアカード名遊々亭駿河屋
1RR(キラ)メガゲッコウガex¥320¥480
2RR(キラ)スピアーex¥180¥380
3Uスペシャルレッドカード¥180¥140
4〜17RR/R/Uキラエネ・対戦需要カード等¥120¥80〜¥160

つまり、RR以下で「単品出品の価値あり」と言えるのは上位17枚程度。それ以下のカードは遊々亭ベースで¥30〜¥80、これがリアルな「ノーマル束の中の1枚あたりの相場」です。

「ノーマル束の収益分岐点」が、ようやく見えた

第6弾で予告した「センチ売りに出すか、単品出品するか」の判断基準が、データで見えるようになりました。

  • 遊々亭¥100以上のカード → 単品出品(メルカリ・ヤフオク)の価値あり、フリマ手数料10%引いても¥80以上残る
  • 遊々亭¥50〜¥80のカード → 出品の手間 vs 価格で微妙ライン、まとめ売りが現実的
  • 遊々亭¥30〜¥50のカード → センチ売り行き、出品コスト割れする

そしてニンジャスピナーの場合、RR以下の上位17枚(遊々亭¥100以上)を抜けば、残りは全部センチ売り行き。これがツールが導き出した結論です。

技術的なハイライト(マニア向け)

このツール、地味にいくつかの「壁」を超えました。エンジニア層向けの裏話です。

  • カードラッシュのCloudflare 403 → Playwright(ヘッドレスChromium)で突破。普通の requests では弾かれるが、ブラウザ自動化ならOK。
  • 遊々亭のレート制限 → 個別カードページを cid 連番(10001〜10117)で全件取得。429エラー時は指数バックオフでリトライ。
  • OCR の「カード上下逆」問題 → カード番号「021/083」が画像上半分にあれば、画像を180°回転して再OCR。
  • カード検出の「隣接カード結合」問題 → multi-pass エッジ検出(Cannyの閾値を3段階で変えて重複検出)+ 等間隔グリッド補完で 32/32 精度を達成。
  • ヤフオクの束売り混入 → 落札件数50超は信頼度低として⚠⚠マーク表示。

普通のスクレイピングだと「駿河屋¥160 floor」で詰むんですが、複数市場を統合することで突破口が見えました。エンジニアリングよりも「ポケカ業界の値付け構造」を理解することが鍵でした。

次回予告:このツールで何ができるか

このツールが手元にあると、これからの記事はめちゃくちゃ書きやすくなります。すでに頭の中にあるネタは――

  1. 「駿河屋¥160の壁」徹底解剖 — なぜ業者は¥160より下を付けないのか
  2. M3(ムニキスゼロ)RR以下ランキング — 第二弾セットでも同じ手法
  3. メルカリで売れない単品ノーマル — PayPayフリマでも単品落札はゼロ件だった話
  4. 遊々亭の在庫数で見るカード人気度 — 在庫1000枚と在庫3枚の差は何か
  5. 定点観測モード — メガゲッコウガex SAR の価格を週次で追う

このブログの「真似できないコンテンツ」を作るベースができました。データドリブンなポケカ収支ブログ、これから本気で書いていきます。

まとめ

  • 写真1枚で32枚のカードを自動値付けするツール norma_pricer を開発
  • 4市場(駿河屋・遊々亭・カードラッシュ・ヤフオク)の価格を統合
  • 駿河屋¥160縛りを突破して、ノーマルカードのリアル価格(¥30〜¥120)が見えるようになった
  • M4 RR以下で単品出品の価値があるのは上位17枚、残りはセンチ売り推奨
  • これでブログのコンテンツ強度が大幅に上がる予定

第6弾で予告した「ノーマル束の収益分岐点」、ようやくデータで答えが出ました。これから書く記事は全部このツールが裏で動いていると思って読んでください。

次回もお楽しみに。TKGでした。


📚 関連シリーズ:自作ツール公開

コメント

タイトルとURLをコピーしました