Ruby Cloud Vision API クライアント ライブラリ v0.32.0 への移行

Ruby Cloud Vision API クライアント ライブラリ v0.32.0 には、以前のクライアント ライブラリと比べ、設計に関する大きな違いがあります。

Cloud Vision API ライブラリには次の変更が加えられています。

  • このクライアント ライブラリは RPC API との整合性が高まっています。

  • コンテンツ メソッド パラメータで、ローカル画像と Google Cloud Storage 上の画像が区別されるようになりました。

  • リクエストは画像ごとに行われるのではなく、デフォルトでバッチ処理されます。

このページでは、v0.32.0 の Ruby クライアント ライブラリを使用するために、Cloud Vision API クライアント ライブラリ用の Ruby コードに加える必要のある変更内容について詳しく説明します。

旧バージョンのクライアント ライブラリの実行

Ruby クライアント ライブラリの v0.32 へのアップグレードは必須ではありません。ただし、Cloud Vision API の新機能は v0.32 以降のバージョンでのみサポートされています。

Ruby クライアント ライブラリの旧バージョンを引き続き使用し、コードを移行しない場合は、アプリで使用する Ruby クライアント ライブラリのバージョンを指定する必要があります。ライブラリの特定バージョンを指定するには、Gemfile ファイルを次のように編集します。

gem "google-cloud-vision", "~> 0.31.0"

削除されたクラス

Ruby Cloud Vision API v0.32.0 gem では、次のクラスが削除されました。

  • Google::Cloud::Vision::Project

  • Google::Cloud::Vision::Location

  • Google::Cloud::Vision::Image

  • Google::Cloud::Vision::Annotate

  • Google::Cloud::Vision::Annotation

移動されたクラス

次のクラスは、Cloud Vision API のバージョンごとに名前空間が設定されるため、API のバージョン単位で更新できます。

  • Google::Cloud::Vision::Credentials は、API バージョン Google::Cloud::Vision::V[API_VERSION]::Credentials で名前空間が指定されています。

このクラスは Google::Cloud::Vision からアクセスでき、次の方法でクライアントを初期化することにより、特定のバージョンの Cloud Vision API を使用できます。

# Instantiates a client with a specified version
image_annotator = Google::Cloud::Vision::ImageAnnotator.new version: :v1

必要なコードの変更

gem の依存関係

Ruby Cloud Vision API クライアント ライブラリ v0.32.0 gem の require のパスに変更はありません。

# Imports the Google Cloud client library
require "google/cloud/vision"

クライアントの作成

Ruby Cloud Vision API クライアント ライブラリ v0.32.0 を使用して Cloud Vision API クライアントを作成する場合は、次の変更を行う必要があります。

  • project パラメータを削除します。Cloud Vision API はリクエストにプロジェクト名を含めないため、project パラメータは削除されました。
  • vision クライアントを構築するのではなく、image_annotator クライアントまたは product_search クライアントを作成します。image_annotator クライアントには、旧 vision クライアントの機能が含まれています。
image_annotator = Google::Cloud::Vision::ImageAnnotator.new

リクエストの作成

以降のセクションで、Ruby Cloud Vision API クライアント ライブラリ v0.32.0 を使用してリクエストを作成する方法を説明します。記載されている例では、ローカル画像を使用したリクエストと Google Cloud Storage 内にある画像の URI を使用したリクエストの両方を行います。

ローカル ファイルからの画像コンテンツを表すオブジェクトの作成

次の例は、ローカル ファイルのラベル検出をリクエストする新しい方法を示しています。

クライアント ライブラリの旧バージョン:

project_id = "YOUR_PROJECT_ID"
vision = Google::Cloud::Vision.new project: project_id
file_name = "./resources/cat.jpg"
labels = vision.image(file_name).labels

puts "Labels:"
labels.each do |label|
  puts label.description
end

Ruby クライアント ライブラリ v0.32:

image_annotator = Google::Cloud::Vision::ImageAnnotator.new

# The name of the image file to annotate
file_name = "./resources/cat.jpg"

# Performs label detection on the image file
response = image_annotator.label_detection image: file_name
response.responses.each do |res|
  puts "Labels:"
  res.label_annotations.each do |label|
    puts label.description
  end
end

Google Cloud Storage URI からの画像コンテンツを表すオブジェクトの作成

次の例は、Google Cloud Storage に保存されている画像のラベル検出をリクエストする新しい方法を示しています。

クライアント ライブラリの旧バージョン:

project_id = "YOUR_PROJECT_ID"
vision = Google::Cloud::Vision.new project: project_id
storage_uri = "gs://gapic-toolkit/President_Barack_Obama.jpg"
labels = vision.image(storage_uri).labels

puts "Labels:"
labels.each do |label|
  puts label.description
end

Ruby クライアント ライブラリ v0.32:


image_annotator = Google::Cloud::Vision::ImageAnnotator.new

response = image_annotator.label_detection(
  image: "gs://gapic-toolkit/President_Barack_Obama.jpg",
  max_results: 15 # optional, defaults to 10
)

puts "Labels:"
response.responses.each do |res|
  res.label_annotations.each do |label|
    puts label.description
  end
end

切り抜きヒント検出

次の例は、切り抜きヒント検出をリクエストしてレスポンスを処理する新しい方法を示しています。

クライアント ライブラリの旧バージョン:

image  = vision_client.image image_path

crop_hints = image.crop_hints

crop_hints.each do |crop_hint|
  puts "Crop hint bounds:"
  crop_hint.bounds.each do |bound|
    puts "#{bound.x}, #{bound.y}"
  end
end

Ruby クライアント ライブラリ v0.32:

response = image_annotator.crop_hints_detection image: image_path

response.responses.each do |res|
  puts "Crop hint bounds:"
  res.crop_hints_annotation.crop_hints.each do |crop_hint|
    crop_hint.bounding_poly.vertices.each do |bound|
      puts "#{bound.x}, #{bound.y}"
    end
  end
end

ドキュメント テキスト検出

次の例は、ドキュメント テキスト検出をリクエストしてレスポンスを処理する新しい方法を示しています。

クライアント ライブラリの旧バージョン:

image  = vision_client.image image_path

document = image.document

puts document.text

Ruby クライアント ライブラリ v0.32:

response = image_annotator.document_text_detection image: image_path

text = ""
response.responses.each do |res|
  res.text_annotations.each do |annotation|
    text << annotation.description
  end
end

puts text

顔検出

次の例は、ドキュメント テキスト検出をリクエストしてレスポンスを処理する新しい方法を示しています。

クライアント ライブラリの旧バージョン:

image  = vision_client.image image_path

image.faces.each do |face|
  puts "Joy:      #{face.likelihood.joy?}"
  puts "Anger:    #{face.likelihood.anger?}"
  puts "Sorrow:   #{face.likelihood.sorrow?}"
  puts "Surprise: #{face.likelihood.surprise?}"
end

Ruby クライアント ライブラリ v0.32:

response = image_annotator.face_detection image: image_path

response.responses.each do |res|
  res.face_annotations.each do |face|
    puts "Joy:      #{face.joy_likelihood}"
    puts "Anger:    #{face.anger_likelihood}"
    puts "Sorrow:   #{face.sorrow_likelihood}"
    puts "Surprise: #{face.surprise_likelihood}"
  end
end

画像プロパティ検出

次の例は、画像プロパティ検出をリクエストしてレスポンスを処理する新しい方法を示しています。

クライアント ライブラリの旧バージョン:

image  = vision_client.image image_path

image.properties.colors.each do |color|
  puts "Color #{color.red}, #{color.green}, #{color.blue}"
end

Ruby クライアント ライブラリ v0.32:

response = image_annotator.image_properties_detection image: image_path

response.responses.each do |res|
  res.image_properties_annotation.dominant_colors.colors.each do |color_info|
    color = color_info.color
    puts "Color #{color.red}, #{color.green}, #{color.blue}"
  end
end

ラベル検出

次の例は、ラベル検出をリクエストしてレスポンスを処理する新しい方法を示しています。

クライアント ライブラリの旧バージョン:

image  = vision_client.image image_path

image.labels.each do |label|
  puts label.description
end

Ruby クライアント ライブラリ v0.32:

response = image_annotator.label_detection(
  image: image_path,
  max_results: 15 # optional, defaults to 10
)

response.responses.each do |res|
  res.label_annotations.each do |label|
    puts label.description
  end
end

ランドマーク検出

次の例は、ランドマーク検出をリクエストしてレスポンスを処理する新しい方法を示しています。

クライアント ライブラリの旧バージョン:

image  = vision_client.image image_path

image.landmarks.each do |landmark|
  puts landmark.description

  landmark.locations.each do |location|
    puts "#{location.latitude}, #{location.longitude}"
  end
end

Ruby クライアント ライブラリ v0.32:

response = image_annotator.landmark_detection image: image_path

response.responses.each do |res|
  res.landmark_annotations.each do |landmark|
    puts landmark.description

    landmark.locations.each do |location|
      puts "#{location.lat_lng.latitude}, #{location.lat_lng.longitude}"
    end
  end
end

ロゴ検出

次の例は、ロゴ検出をリクエストしてレスポンスを処理する新しい方法を示しています。

クライアント ライブラリの旧バージョン:

image  = vision_client.image image_path

image.logos.each do |logo|
  puts logo.description
end

Ruby クライアント ライブラリ v0.32:

response = image_annotator.logo_detection image: image_path

response.responses.each do |res|
  res.logo_annotations.each do |logo|
    puts logo.description
  end
end

セーフサーチ検出

次の例は、セーフサーチ検出をリクエストしてレスポンスを処理する新しい方法を示しています。

クライアント ライブラリの旧バージョン:

image  = vision_client.image image_path

safe_search = image.safe_search

puts "Adult:    #{safe_search.adult?}"
puts "Spoof:    #{safe_search.spoof?}"
puts "Medical:  #{safe_search.medical?}"
puts "Violence: #{safe_search.violence?}"

Ruby クライアント ライブラリ v0.32:

response = image_annotator.safe_search_detection image: image_path

response.responses.each do |res|
  safe_search = res.safe_search_annotation

  puts "Adult:    #{safe_search.adult}"
  puts "Spoof:    #{safe_search.spoof}"
  puts "Medical:  #{safe_search.medical}"
  puts "Violence: #{safe_search.violence}"
end

テキスト検出

次の例は、テキスト検出をリクエストしてレスポンスを処理する新しい方法を示しています。

クライアント ライブラリの旧バージョン:

image  = vision_client.image image_path

puts image.text

Ruby クライアント ライブラリ v0.32:

response = image_annotator.text_detection(
  image: image_path,
  max_results: 1 # optional, defaults to 10
)

response.responses.each do |res|
  res.text_annotations.each do |text|
    puts text.description
  end
end

ウェブ検出

次の例は、ウェブ検出をリクエストしてレスポンスを処理する新しい方法を示しています。

クライアント ライブラリの旧バージョン:

image  = vision_client.image image_path

web = image.web

web.entities.each do |entity|
  puts entity.description
end

web.full_matching_images.each do |image|
  puts image.url
end

Ruby クライアント ライブラリ v0.32:

response = image_annotator.web_detection(
  image: image_path,
  max_results: 15 # optional, defaults to 10
)

response.responses.each do |res|
  res.web_detection.web_entities.each do |entity|
    puts entity.description
  end

  res.web_detection.full_matching_images.each do |match|
    puts match.url
  end
end

オブジェクト ローカライズ検出

次の例は、オブジェクト ローカライズ検出をリクエストしてレスポンスを処理する新しい方法を示しています。

クライアント ライブラリの旧バージョン:

image  = vision_client.image image_path

image.object_localizations.each do |object|
  puts "#{object.name} (confidence: #{object.score})"
  puts "Normalized bounding polygon vertices:"
  object.bounds.each do |vertex|
    puts " - (#{vertex.x}, #{vertex.y})"
  end
end

Ruby クライアント ライブラリ v0.32:

response = image_annotator.object_localization_detection image: image_path

response.responses.each do |res|
  res.localized_object_annotations.each do |object|
    puts "#{object.name} (confidence: #{object.score})"
    puts "Normalized bounding polygon vertices:"
    object.bounding_poly.normalized_vertices.each do |vertex|
      puts " - (#{vertex.x}, #{vertex.y})"
    end
  end
end

PDF テキスト検出

async_batch_annotate_files メソッドは変更されていません。処理を簡素化するため、新しく document_text_detection メソッドが追加されました。次の例は、PDF テキスト検出をリクエストする新しい方法を示しています。返されるオペレーションは同じです。

# gcs_source_uri = "Google Cloud Storage URI, eg. 'gs://my-bucket/example.pdf'"
# gcs_destination_uri = "Google Cloud Storage URI, eg. 'gs://my-bucket/prefix_'"

require "google/cloud/vision"
require "google/cloud/storage"

vision = Google::Cloud::Vision.new

# Supported mime_types are: 'application/pdf' and 'image/tiff'
input_config = {
  gcs_source: { uri: gcs_source_uri },
  mime_type:  "application/pdf"
}

output_config = {
  gcs_destination: { uri: gcs_destination_uri },
  batch_size:      2  # number of pages to group per json output file
}

async_request = {
  input_config:  input_config,
  features:      [{ type: "DOCUMENT_TEXT_DETECTION" }],
  output_config: output_config
}

operation = vision.async_batch_annotate_files [async_request]

puts "Waiting for the operation to finish."
operation.wait_until_done!

Ruby クライアント ライブラリ v0.32:

# gcs_source_uri = "Google Cloud Storage URI, eg. 'gs://my-bucket/example.pdf'"
# gcs_destination_uri = "Google Cloud Storage URI, eg. 'gs://my-bucket/prefix_'"

require "google/cloud/vision"
require "google/cloud/storage"

image_annotator = Google::Cloud::Vision::ImageAnnotator.new

operation = image_annotator.document_text_detection(
  image: gcs_source_uri,
  mime_type: "application/pdf",
  batch_size: 2,
  destination: gcs_destination_uri,
  async: true
)

puts "Waiting for the operation to finish."
operation.wait_until_done!
このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Cloud Vision API ドキュメント
ご不明な点がありましたら、Google のサポートページをご覧ください。