Migrer vers la bibliothèque cliente Ruby v0.32.0 de l'API Cloud Vision

La bibliothèque cliente Ruby v0.32.0 de l'API Cloud Vision présente des différences de conception importantes par rapport aux versions précédentes.

Les modifications suivantes ont été apportées à la bibliothèque de l'API Cloud Vision :

  • La bibliothèque cliente est plus stable avec l'API RPC.

  • Les paramètres des méthodes de contenu font désormais la distinction entre une image locale et une image stockée dans Google Cloud Storage.

  • Par défaut, les requêtes sont désormais traitées par lots plutôt que sur la base d'images individuelles.

Cette page décrit en détail les modifications à apporter à votre code Ruby pour les bibliothèques clientes de l'API Cloud Vision afin d'utiliser la bibliothèque cliente Ruby v0.32.0.

Exécuter des versions précédentes de la bibliothèque cliente

Vous n'êtes pas obligé de passer à la version 0.32 de la bibliothèque cliente Ruby. Cependant, les nouvelles fonctionnalités de l'API Cloud Vision ne sont compatibles qu'avec les versions 0.32 et ultérieures.

Pour continuer à utiliser une version précédente de la bibliothèque cliente Ruby sans migrer le code, indiquez la version de la bibliothèque cliente Ruby utilisée par l'application. Pour spécifier une version de bibliothèque, modifiez le fichier Gemfile comme suit :

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

Classes supprimées

Les classes suivantes ont été supprimées du gem de la bibliothèque Ruby v0.32.0 de l'API Cloud Vision.

  • Google::Cloud::Vision::Project

  • Google::Cloud::Vision::Location

  • Google::Cloud::Vision::Image

  • Google::Cloud::Vision::Annotate

  • Google::Cloud::Vision::Annotation

Classes déplacées

Les classes indiquées ci-dessous sont désormais associées à un espace de noms pour chaque version de l'API Cloud Vision. Vous pourrez ainsi effectuer des mises à jour par version d'API.

  • La classe Google::Cloud::Vision::Credentials est désormais associée à un espace de noms dans la version Google::Cloud::Vision::V[API_VERSION]::Credentials de l'API.

Vous pouvez accéder à cette classe depuis Google::Cloud::Vision et utiliser une version spécifique de l'API Vision en initialisant le client comme suit :

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

Modifications de code requises

Dépendance du gem

Aucune modification n'est nécessaire sur le chemin d'accès requis pour le gem de la bibliothèque cliente Ruby v0.32.0 de l'API Cloud Vision.

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

Créer un client

Lorsque vous créez un client de l'API Cloud Vision à l'aide de la bibliothèque cliente Ruby v0.32.0 de l'API Cloud Vision, vous devez apporter les modifications suivantes :

  • Supprimez le paramètre project. Le paramètre project a été supprimé, car l'API Cloud Vision n'inclut pas de nom de projet dans les requêtes.
  • Plutôt que de construire un client Vision, créez un client image_annotator ou un client product_search. Le client image_annotator contient les fonctionnalités de l'ancien client Vision.
image_annotator = Google::Cloud::Vision::ImageAnnotator.new

Créer des requêtes

Les sections suivantes décrivent la procédure à suivre pour créer des requêtes à l'aide de la bibliothèque cliente Ruby v0.32.0 de l'API Cloud Vision. Dans les exemples présentés ci-dessous, des requêtes sont envoyées à l'aide d'un fichier d'image local et de l'URI d'un fichier dans Google Cloud Storage.

Créer des objets représentant du contenu image à partir d'un fichier local

L'exemple suivant vous montre la nouvelle façon de demander la détection de libellés sur un fichier local.

Versions précédentes de la bibliothèque cliente :

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
    

Bibliothèque cliente Ruby v0.32.0 :

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

Créer des objets représentant du contenu image à partir d'un URI Google Cloud Storage

L'exemple suivant illustre la nouvelle façon de demander la détection de libellés pour une image stockée dans Google Cloud Storage.

Versions précédentes de la bibliothèque cliente :

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
    

Bibliothèque cliente Ruby v0.32.0 :


    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

Détection des possibilités de découpage

L'exemple suivant montre la nouvelle façon de demander la détection des suggestions de cadrage et de traiter la réponse.

Versions précédentes de la bibliothèque cliente :

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
    

Bibliothèque cliente Ruby v0.32.0 :

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

Détection des documents texte

L'exemple suivant montre la nouvelle façon de demander la détection de documents texte et de traiter la réponse.

Versions précédentes de la bibliothèque cliente :

image  = vision_client.image image_path

    document = image.document

    puts document.text
    

Bibliothèque cliente Ruby v0.32.0 :

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

Détection de visages

L'exemple suivant montre la nouvelle façon de demander la détection de documents texte et de traiter la réponse.

Versions précédentes de la bibliothèque cliente :

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
    

Bibliothèque cliente Ruby v0.32.0 :

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

Détection des propriétés de l'image

L'exemple suivant montre la nouvelle façon de demander la détection des propriétés de l'image et de traiter la réponse.

Versions précédentes de la bibliothèque cliente :

image  = vision_client.image image_path

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

Bibliothèque cliente Ruby v0.32.0 :

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

Détection de thèmes

L'exemple suivant montre la nouvelle façon de demander la détection de libellés et de traiter la réponse.

Versions précédentes de la bibliothèque cliente :

image  = vision_client.image image_path

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

Bibliothèque cliente Ruby v0.32.0 :

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

Détection de points de repère

L'exemple suivant montre la nouvelle façon de demander la détection de points de repère et de traiter la réponse.

Versions précédentes de la bibliothèque cliente :

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
    

Bibliothèque cliente Ruby v0.32.0 :

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

Détection de logos

L'exemple suivant montre la nouvelle façon de demander la détection de logos et de traiter la réponse.

Versions précédentes de la bibliothèque cliente :

image  = vision_client.image image_path

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

Bibliothèque cliente Ruby v0.32.0 :

response = image_annotator.logo_detection image: image_path

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

Détection de recherches sécurisées

L'exemple suivant montre la nouvelle façon de demander une détection SafeSearch et de traiter la réponse.

Versions précédentes de la bibliothèque cliente :

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?}"
    

Bibliothèque cliente Ruby v0.32.0 :

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

Détection de texte

L'exemple suivant montre la nouvelle façon de demander la détection de texte et de traiter la réponse.

Versions précédentes de la bibliothèque cliente :

image  = vision_client.image image_path

    puts image.text
    

Bibliothèque cliente Ruby v0.32.0 :

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

Détection sur le Web

L'exemple suivant montre la nouvelle façon de demander la détection sur le Web et de traiter la réponse.

Versions précédentes de la bibliothèque cliente :

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
    

Bibliothèque cliente Ruby v0.32.0 :

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

Détection de la localisation d'objets

L'exemple suivant montre la nouvelle façon de demander la détection de la localisation d'objets et de traiter la réponse.

Versions précédentes de la bibliothèque cliente :

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
    

Bibliothèque cliente Ruby v0.32.0 :

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

Détection de texte PDF

La méthode async_batch_annotate_files reste inchangée. Une nouvelle méthode document_text_detection a été ajoutée pour simplifier le processus. L'exemple suivant montre la nouvelle façon de demander la détection de texte PDF. L'objet "Operation" renvoyé reste identique.

# 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!
    

Bibliothèque cliente Ruby v0.32.0 :

# 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!