【ポケモンカード】スマホ写真から、AIでカード識別する方法

  • 2022-07-10
  • 2022-07-10
  • AI
AI

ポケモンカードをスマホカメラで撮影して、カード種類をパッと一意に識別できると、便利ですよね。

この記事では、GoogleのAI画像認識(OCR)で、ポケモンカードのエキスパンションマーク、カード番号等を認識してカードを識別する方法を解説します。
結論、Googleの Vision APIを使用すると、AIで簡単に読み取ることができます。

【ポケモンカード】スマホ写真から、AIでカードを識別するには

ポケモンカードの識別情報

ポケモンカードの左下の方にある上記赤枠部が、カードの識別情報になります。
これをAIで読み取ることで、ポケモンカードを識別できます。

ちなみに左の方から、①エキスパンションマーク、②レギュレーションマーク、③カードリスト、④レアリティとなっています。

入力画像サンプル

上記のピカチュウのカードを、入力画像サンプルとして使用してみましょう。

上記の小さい画像が入力画像サンプル、大きい画像がそれをGoogle AIで、テキスト検出(OCR)にかけた結果です。
カード左下の方の、カード識別情報もしっかりテキスト検出できています。

AIの検出結果

s10b F 028/071 R

ポケモンカードの識別情報を、しっかりと検出できています。

Pythonサンプル

では次に、実際にAIで識別するためのPythonサンプルを見ていきましょう。
以下が、入力画像から、AIでポケモンカードの識別情報を取得するプログラムです。

from google.cloud import vision
from google.oauth2 import service_account
import io, re

# Vision APIのレスポンスから、ポケモンカードのカードIDを抽出
def getCardId(response):
    msgs = response.text_annotations[0].description.splitlines()

# ポケモンカード識別情報のパターンを定義
pat = '.+\d\d\d/\d\d\d.*'
pattern = re.compile(pat)

# 識別情報のパターンに合致するテキストを調査
for msg in msgs:
    # 識別情報の"1"は、"l"と誤検出されることが多いため補正
    msg = msg.replace('l', '1')
    result = pattern.match(msg)
    if result :
        return result.group(0)

# 身元証明書のjson読み込み
credentials = service_account.Credentials.from_service_account_file('key.json')
client = vision.ImageAnnotatorClient(credentials=credentials)

# ポケモンカード写真を読み込み、imageオブジェクト作成
with io.open("./ポケカ写真.jpg", 'rb') as image_file:
    content = image_file.read()
image = vision.Image(content=content)

# Vision APIにアクセスして、テキスト検出結果を受け取る
response = client.text_detection(image=image)

# レスポンスからポケモンカード識別情報を取得して表示
cardId = getCardId(response)
print(cardId)

上記プログラムでは、入力画像からAIでテキスト検出し、ポケモンカードの識別情報に合致するテキストをサーチして、表示しています。

では、Google AIは、他のポケモンカードでも正しく読み取れるでしょうか?
検出例を見ていきましょう。

 

他のポケモンカードでの検出例

入力画像1

AIの検出結果1

s106 F 009/071U

ポケモンカード識別情報を、検出できています。
ただし、Google AIは、"b"と"6"を誤認識してしまっていますね。

しかし上記の誤検出は、検出後にプログラムでそこだけ補正してあげれば、大丈夫そうに感じます。
例えば、エキスパンションマークのリストを予めもっておき、"b"や"6"の部分が一致しない場合は、補正してあげる方法が考えられます。

入力画像2

AIの検出結果2

s8a E 021/028 RR

ポケモンカード識別情報を、こちらは正しく検出できました!

 

Pythonサンプル使用の前提

・Google Vision APIを有効に初期設定済み
・Google Vision APIのサービスアカウントキーファイル(json)を、自分のPCにダウンロード済み

上記の準備の上、ご使用ください。

 

まとめ

GoogleのVision APIを使って、ポケモンカードのキャプチャ画像からポケモンカードの識別情報を取得する方法を解説しました。
ちなみにわたしが色々なカードで試した所、GoogleのAIが"s"と"5"を誤認識する例もあったものの、検出後にプログラムで補正してあげれば、大丈夫そうに感じました。

みなさんも、ご自身のポケモンカードで識別情報を読み取れるか、トライしてみてはどうでしょうか。

ここまで読んでいただき、ありがとうございます。
また、お会いしましょう。

ポケモンカードについて: ©2021 Pokémon/Nintendo/Creatures/GAME FREAK.