Google Cloud Vision APIを使ってみた


Google Cloud Visionとは

Google Cloud VisionはGoogleが提供しているが提供している画像の分析サービスです。
今回は、画像内の文章を読み込むために使ってみました。

手順1 Google Cloud Platformに登録する

以下のリンク先からGoogle Cloud Platformに登録しましょう。
なお、登録にはクレジットカードが必要となります。
https://console.cloud.google.com/getting-started?hl=ja

Cloud Vision APIを有効にする

画面上部の検索窓に「Cloud Vision API」を入力ましょう。

遷移後の画面でCloud Vision APIを有効にすれば完了です。

サービスアカウントの作成

サービスアカウントとは?
ここから引用→https://cloud.google.com/iam/docs/service-accounts?hl=ja

サービスアカウントは、ユーザーではなく、アプリケーションや仮想マシン(VM)インスタンスで使用される特別なアカウントです。アプリケーションはサービスアカウントを使用して、承認されたAPI呼び出しを行います。

それではサービスアカウントを作ってみましょう。
「IAMと管理」からサービスアカウントをクリック。

遷移後の画面で「サービスアカウントを作成」をクリックしましょう。

適当なサービスアカウント名を入力して「作成」をクリック

「続行」をクリック

「完了」をクリック

続いて認証用の秘密鍵の作成です。上記の操作を行った後、以下のような画面になっていると思うので「操作」をクリックしてキーの作成を行います

ダイアログが表示されるのでJSONを選択してキーを作成します。
キーは任意のフォルダに配置し、後述の環境変数(GOOGLE_APPLICATION_CREDENTIALS)にキーのパスを指定してください。

gemをインストール。

gem 'google-cloud-vision'

秘密鍵のパスを環境変数に設定して、準備は完了です。

export GOOGLE_APPLICATION_CREDENTIALS="/hoge/fuga.json"

実装

公式のドキュメントを参考にし、以下のようになりました。
・公式ドキュメント
https://cloud.google.com/vision/docs/libraries?hl=ja#client-libraries-usage-ruby

公式の例と最も異なる点はlabel_detectionではなくtext_detectionを使用していることです。
label_detectionを使用すると、どのようなものが画像内に含まれているか検出することが出来ます。
例えば、駅内を撮った写真ですと改札や線路、券売機といった物が検出されるわけです。
今回は画像内の文字を検出したかったため、text_detectionを使用しました。

@image = Image.new

require "google/cloud/vision"
image_annotator = Google::Cloud::Vision.image_annotator

# 読み込む画像を指定
file_name = "~/hoge.jpg"

# file_nameを引数にしてCloud Visionで解析する
response = image_annotator.text_detection image: file_name

response.responses.each do |res|
  @image.OCR = res.text_annotations[0].description
end

まとめ

Google Cloud Vision APIは、今回の例以外にもPDFファイルの分析や画像内の顔検出などにも使えます。
月に1000件の読み込みまでは無料で行えますので、色々と試して自作アプリに組み込んでみましょう!