<ruby><cloud vision>ポケカの画像から情報読み取ろうぜ(と思ってた)

高専を卒業しました。 卒業エントリ書くかと思ってたのですが内容まとまらないし、卒業直後で書いてもっていう気がしたので時間をおいて書くかなと思ってます。

ということで、今回はcloud Vision APIを使ってポケモンカードの情報を画像から読み出そうっていうことをした記録です。

目次

  1. やること
  2. 今回使う技術
  3. 詳細な要件
  4. 実際のプログラム
  5. やった結果
  6. その他

1.やること

今回やりたいことの最大の目標として、カードの写真パシャパシャしたら持っているカードの一覧自動で作りたいっていうことが目標です。そのなかでも、今回は画像からカードの情報を取得するところを作ってみます。

2.今回使う技術

今回はgoogleの画像処理系のAPIgoogle Cloud Visionを使います。

cloud.google.com

これは、画像に写っているものを識別したり、画像に写っている文字を読み込んだりできます。 特に、この中のOCR機能を用いて、カードの情報を取得します。

3.詳細な要件

今回はポケモンカードの識別を目標にします。 そのなかでも特に

を撮影して、その画像から、

  • SM"XX"のパックの情報
  • シリーズ内のカードの番号(AA/BB)
  • ポケモンのタイプ
  • ポケモンの名称

を取得します。

4.実際のプログラム

ここからは実際のプログラムです。 今回はrubyを使って書きました。 理由としては、今後web appとしてrailsのアプリ作れたらいいかもとおもったからです。(いいかもと思ったなのでやるとは言っていません

ということで実際のプログラムです。 まず、前提として、cloud visionのサイトにアクセスしてAPIキーを取得します。 今回は作成したコードをgithubにあげて管理しようと思っていたので、APIキー等は全てINIファイルに保管して、実施のプログラムには書かないようにします。 このINIファイルを用いて情報を取得するgemにinifileというものがあります。 今回はそれを用いて設定情報を管理します。 まずは使う設定ファイルは以下の感じです

f:id:poolbooyer:20190331134605p:plain
iniファイル
このファイルから情報を読み込む処理は以下のようになります。
f:id:poolbooyer:20190331134819p:plain
iniファイルを読み込む処理
4行目、6行目でAPIキー等の情報を取得して、8行目にリクエストのURLをAPIキーを含めて作成します。 これをもとにして、実際のリクエストを行います。 このリクエストの作り方は以下のページを参考に作りました。

qiita.com

gemもあるらしいのですが、環境に導入できず、困った結果、この記事にたどり着き、試したところで来たのでこの記事を参考に作成しています。 ほぼ共通しているのですが、画像のファイル名をコマンドライン引数で受け取るようにし、画像の解析をINIファイルから取得した形式で行なうように修正しています。

その上で、取得した情報をJSONでパースします。 パースするデータがこんな感じですって言って見せたかったんですが、カードの情報を全部乗せるのは著作権的にもマズそうなんで、やめときます。
その読み込んだデータをもとにして、情報を切り出します。 この先全般著作権に関わりそうなので書くのは控えますが、include?を使って情報を探して、結果を探し出します。 実際にやってみた詳細はもう少し作成が進んだら追記します。 とりあえず今回はこれで