ポケモンカードをスマホカメラで撮影して、カード種類をパッと一意に識別できると、便利ですよね。
この記事では、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.