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!