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 présente davantage de cohérence 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.

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

Vous pouvez accéder à cette classe à partir de Google::Cloud::Vision et utiliser une version spécifique de l'API Cloud Vision en initialisant le client de la manière suivante :

# 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 thèmes 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 montre la nouvelle façon de demander la détection de thèmes 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 possibilités de découpage 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 visages 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 thèmes 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 de recherche sécurisée 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!
Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Cloud Vision API Documentation
Besoin d'aide ? Consultez notre page d'assistance.