約束の地

キャロ組

Ruby/Rails で Google Cloud Vision API を使う

Cloud Vision

こちらです。

やれること(主なこと)

  • 画像を投げると OCR でテキストに変換してくれる
  • 画像を投げると「成人向けか否か」「暴力的か否か」などを判断してくれる
  • 画像を投げると「自由の女神」「黒澤明」などその画像の内容にまつわる固有名詞を返してくれる
  • 他にもたくさんあります*1

Cloud Vison を Ruby/Rails で使う

Cloud Vision を Ruby/Rails で使うのは簡単です。以下、順を追って見ていきます。

1. 公式の gem があるのでインストールする

gem があるのでまずはインストールします。

$ gem install google-cloud-vision

または

Gemfilegem 'google-cloud-vision' を書いて bundle install

です。

2. ドキュメントにある 4つ の準備を行う

ドキュメントの Quick Start にある 4つ の項目の準備を行っていきます*2

2-1. Select or create a Cloud Platform project.

まず GCP に入って今回使うためのプロジェクトを作ります。

2-2. Enable billing for your project.

支払い情報を有効化します。有効化しないと実行時に有効化しろと怒られます。

2-3. Enable the Cloud Vision API.

2-1. で作ったプロジェクト内で Cloud Vision の API を使うように設定をします。

2-4. 認証情報を設定する

GCP の ナビゲーションメニュー から、「IAM と管理」→「サービス アカウント」と選び「サービス アカウント」を作成します。認証情報が書かれた JSON がダウンロードできますので大切に保存します。

どうやって Ruby 側に認証情報を読み込ませるかのところで結構詰まってしまうかもしれません。まずは 公式ドキュメント を読みます。

結論を書くと、環境変数に以下の内容を設定すれば OK です。dotenv などを用いて設定しましょう。

GOOGLE_CLOUD_PROJECT="2-1. で作成したプロジェクトの名前"
GOOGLE_CLOUD_KEYFILE="先ほどダウンロードした JSON ファイルのパス"

3. コードを書く

あとはアプリケーションのコードを書くだけです。

3-1. 基本のコード

例えば、ある画像のテキストを OCR して返すコードは以下のとおりです。

vision = Google::Cloud::Vision.new
image = vision.image(IMAGE_FILE_PATH)

image.text
3-2. ハマりやすいところ

一点ハマりやすい*3ところは、例えば type として WEB_DETECTION を選んだ場合などに、ローカルの画像ファイルをどのように指定するかというところです。ドキュメント では BASE64 エンコード された文字列を渡しています。しかし、gem 経由の場合は ファイルオブジェクトを渡せばよいです

つまり、以下のようなコードになります。

image_annotator_client = Google::Cloud::Vision::V1.new

local_image_path = '/path/to/local_image_file'
image_content = File.open(local_image_path, 'r')
image = { content: image_content }

type = :WEB_DETECTION
features_element = { type: type }
features = [features_element]

requests_element = { image: image, features: features }
requests = [requests_element]

response = image_annotator_client.batch_annotate_images(requests)

gem のドキュメント

gem の詳しいドキュメントはこちらにありますので、これを読めばやりたいことができるかと思います。

総合ドキュメント

他の GCP の API もすべてひっくるめたドキュメントはこちらです。

*1:サイト参照

*2:基本的にドキュメントに従えばよいので、簡略化して書きます

*3:というかハマった

Powered by はてなブログ