酢ろぐ!スマートフォン用の表示で見る酢ろぐ!カレーが嫌いなスマートフォンアプリプログラマのブログ。開発-画像処理2年くらい前に「機械学習」や「ディープラーニング」といった感じにキーワードだけが先行して飛び交っていた時期がありました。猫も杓子もAIとニュースになっていました。ここ最近では、そういった流行り技術から実用技術へシフトしたのか、以前のように「ディープラーニングで○○やってみた!」系の記事もあまり見かけなくなってきました。話は変わりますが、僕は2ヶ月前にポケモンカードゲーム(以下ポケカ)を始めたばかりなのですが、お店で売っているのカードをみながら、このポケモンは他のポケモンとコンボを決めることができるんだろう?と気になることが多々あります。写真からなんのカードなのかを特定することができれば作業が捗りそうです!僕も遅ればせながらTensorFlowを使って画像識別をやっていきたいと思います。本記事では、ポケカのカードをTensorFlowで学習させて写真からどのポケモンかを判定させるまでを紹介したいと思います。TensorFlowもPythonもよくわからない状態でしたが、プログラミング要素なしでどのカードかを判定する識別器を作ることができました。全体を通してPythonを使っているので、その部分の説明に関しては省かせていただきます。自分のOSやバージョン等の環境に合ったインストール方法を採用してください。この記事で扱うのは「ラランテスGX」と「かんこうきゃく」のみですが、画像を集めることができれば他のカードにも応用が効くと思います。Hubをインストールしてなかったディレクトリ構造がおかしい/教師画像ディレクトリがひとつしかないもしこの記事を読んでポケカに興味を持たれた方がいれば「GXスタートデッキ」がオススメです。一時期人気が殺到して店舗から消えていましたが、先週末くらいから再販されて再び店頭に並ぶようになってきました。個人的には草ラランテスデッキが好きです。おもちゃ&ホビーこの商品を含むブログを見る画像を集めるまずは識別器を作るために対象物の写真を複数枚用意する必要があります。トラブルシューティングには書きませんでしたが最低20画像ないとエラーになってしまったような気がします。pipを使ってgoogle-images-downloadをインストールします。google_images_downloadgoogle-images-downloadはGoogle画像検索の画像を一気にダウンロードしてこれるので、大量に画像を集める必要がある時にとても重宝します。-kはkeywordを指定するオプションで、その他のオプションについてはこちらをご覧ください。"ラランテスGX"ラランテスGXの画像がたくさん集まりました。GXスタートバトルの動画のアイキャッチ画像などもひっかりましたがその辺りは手作業で削除しました。枚数はあればあるほど精度があがりますが学習に時間がかかります。酢ろぐ!複数のカードが写っている写真に関しては、対象物だけを切り抜いたりした方が精度があがります。TensorFlowをダウンロードする次にTensorFlowをpipを使ってインストールします。Hubは機械学習をモジュールを再利用することができるライブラリです。わかっていないのでここでは言及を避けます。tensorflow-hub画像を元に学習させるretrain.pyと、識別器を使って該当の画像が何なのかを判別するlabel_image.pyが最低限必要になります。それぞれダウンロードして、任意のフォルダに格納しておきます。Tensorflowを使って学習させるTensorflowを使って学習させる準備が整いました!学習前のフォルダとファイル構造は以下の通りとなりました。テスト用の画像TensorFlowに必要な画像だけを与えて学習させます。いくつかパラメータの指定をミスしていて学習でエラーが発生しましたが、詳しくは「retrain.pyのトラブルシューティング」をご覧ください。--image_dir=images順調にいくとフォルダにretrained_graph.pbとretrained_labels.txtが出力されていると思います。これで学習は完了しました。学習したモデルを使って写真からどのポケモンかを判定させるここまでで学習したモデルを使って、与えられた写真からどのポケモンかを判定させます。--input_layer=Placeholder実際にやってみました。ラランテスGXGXスタートデッキのパッケージを飾ったラランテスGXです。このカードはSMHの廉価版カードなのでキラ加工されていません。していないので光による反射もなく識別しやすいと思いましたが、判定結果はなぜか誤判定。SRの方のラランテスが一番スコアが高かったです。(SR)「コレクションムーン(SM1M)」のラランテスGXのSRです。テキストは前述したラランテスGXと同じですが絵柄のみ異なっています。判別結果は83.6%とそこまで高くないながらも正しくラランテスGX(SR)と判定できているようでした。0.025344588かんこうきゃく最後に「かんこうきゃく」を判定させてみました。最終的な手札を6枚にするシロナやリーリエと比べるとドロー枚数は劣りますが、不要カードを好きなだけトラッシュすることができる強サポートです。あと絵柄がとても可愛い。学習した3枚中一番絵柄が異なるので、判別結果は94.7%と上々な結果がでました。0.010914299まとめTensorFlowを使えば簡単に識別器を作ることができることがわかりました。ここまではプログラミング要素は全く必要ありませんでした。反面、ラランテスGXのRRとSRをうまく判別できなかったりと精度を上げるためにはここからやるべきことはたくさんありそうです。トラブルシューティング僕がこの記事を書くにあたって発生したエラーと対処方法などを備忘録として残しておきたいと思います。Hubをインストールしていませんでした。classification.ディレクトリ構造がおかしい/教師画像ディレクトリがひとつしかありませんでした。以下のように判定させる対象はふたつ以上必要のようです。方向性を定めず、その時興味のあるネタを書いています。嫌いな食べ物はカレーです。FirebaseでG...注目記事はてなブログをはじめよう!ch3cooh393さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。