Migra a la biblioteca cliente de la API de Cloud Vision para Ruby v0.32.0

La biblioteca cliente de la API de Cloud Vision para Ruby v0.32.0 tiene diferencias de diseño significativas con las bibliotecas cliente anteriores.

Se realizaron los siguientes cambios en la biblioteca de la API de Cloud Vision:

  • La biblioteca cliente es más coherente con la API de RPC.

  • Los parámetros del método de contenido ahora distinguen entre una imagen local y una imagen en Google Cloud Storage.

  • De manera predeterminada, las solicitudes se agrupan por en vez de hacerlo por imágenes.

En esta página, se proporcionan detalles de los cambios que necesitas realizar en tu código de Ruby a fin de usar la biblioteca cliente de la API de Cloud Vision para Ruby v0.32.0.

Ejecuta versiones anteriores de la biblioteca cliente

No es necesario que actualices tu biblioteca cliente de Ruby a la versión v0.32. Sin embargo, la funcionalidad nueva en la API de Cloud Vision es compatible solo con la versión v0.32 y posteriores.

Si deseas continuar con una versión anterior de la biblioteca cliente de Ruby y no deseas migrar tu código, debes especificar la versión de la biblioteca cliente de Ruby que usa tu app. Para especificar una versión de biblioteca particular, edita el archivo Gemfile como se muestra a continuación:

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

Clases quitadas

Las clases siguientes se quitaron de la gema de la API de Cloud Vision para Ruby v0.32.0.

  • Google::Cloud::Vision::Project

  • Google::Cloud::Vision::Location

  • Google::Cloud::Vision::Image

  • Google::Cloud::Vision::Annotate

  • Google::Cloud::Vision::Annotation

Clases que se movieron

A las clases siguientes se les asignarán espacio de nombres en cada versión de la API de Cloud Vision que permita actualizaciones por versión de la API.

  • A Google::Cloud::Vision::Credentials se le asignó el espacio de nombres bajo la versión de API Google::Cloud::Vision::V[API_VERSION]::Credentials

Puede accederse a esta clase desde Google::Cloud::Vision y se puede usar una versión específica de la API de Cloud Vision si inicializas el cliente de la siguiente manera:

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

Cambios de código obligatorios

Dependencia de la gema

No existen cambios en la ruta obligatoria para la gema de la biblioteca cliente de la API de Cloud Vision Ruby v0.32.0.

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

Crea un cliente

Cuando creas un cliente de la API de Cloud Vision con la biblioteca cliente de la API de Cloud Vision Ruby v0.32.0, debes realizar los siguientes cambios:

  • Quita el parámetro project. Se quitó el parámetro project debido a que la API de Cloud Vision no incluye un nombre de proyecto en la solicitud.
  • En vez de crear un cliente de Vision, haz un cliente image_annotator o un cliente product_search. El cliente image_annotator contiene la funcionalidad del cliente de Vision anterior.
image_annotator = Google::Cloud::Vision::ImageAnnotator.new

Crear solicitudes

Las siguientes secciones abarcan la creación de solicitudes con la biblioteca cliente de la API de Cloud Vision Ruby v0.32.0. En los ejemplos, se realizan solicitudes con una imagen local y un URI para una imagen del Google Cloud Storage.

Crear objetos que representen un contenido de imagen desde un archivo local

En el siguiente ejemplo, se muestra la manera nueva de solicitar la detección de etiquetas en un archivo local.

Versiones anteriores de la biblioteca 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

Biblioteca cliente para 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

Construir objetos que representen el contenido de la imagen de un URI de Google Cloud Storage

En el siguiente ejemplo, se muestra la manera nueva de solicitar la detección de etiquetas para una imagen almacenada en Google Cloud Storage.

Versiones anteriores de la biblioteca 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

Biblioteca cliente para 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

Detección de sugerencias de recorte

En el siguiente ejemplo, se muestra la manera nueva de solicitar una detección de sugerencias de recorte y procesar la respuesta.

Versiones anteriores de la biblioteca 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

Biblioteca cliente para 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

Detección de texto en documentos

En el siguiente ejemplo, se muestra la manera nueva de solicitar una detección de texto en documentos y procesar la respuesta.

Versiones anteriores de la biblioteca cliente:

image  = vision_client.image image_path

document = image.document

puts document.text

Biblioteca cliente para 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

Detección de rostros

En el siguiente ejemplo, se muestra la manera nueva de solicitar una detección de texto en documentos y procesar la respuesta.

Versiones anteriores de la biblioteca 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

Biblioteca cliente para 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

Detección de propiedades de las imágenes

En el siguiente ejemplo, se muestra la manera nueva de solicitar una detección de propiedades de las imágenes y procesar la respuesta.

Versiones anteriores de la biblioteca cliente:

image  = vision_client.image image_path

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

Biblioteca cliente para 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

Detección de etiquetas

En el siguiente ejemplo, se muestra la manera nueva de solicitar una detección de etiquetas y procesar la respuesta.

Versiones anteriores de la biblioteca cliente:

image  = vision_client.image image_path

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

Biblioteca cliente para 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

Detección de puntos de referencia

En el siguiente ejemplo, se muestra la manera nueva de solicitar una detección de puntos de referencia y procesar la respuesta.

Versiones anteriores de la biblioteca 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

Biblioteca cliente para 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

Detección de logotipos

En el siguiente ejemplo, se muestra la manera nueva de solicitar una detección de logotipos y procesar la respuesta.

Versiones anteriores de la biblioteca cliente:

image  = vision_client.image image_path

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

Biblioteca cliente para 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

Detección de SafeSearch

En el siguiente ejemplo, se muestra la manera nueva de solicitar una detección de SafeSearch y procesar la respuesta.

Versiones anteriores de la biblioteca 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?}"

Biblioteca cliente para 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

Detección de textos

En el siguiente ejemplo, se muestra la manera nueva de solicitar una detección de textos y procesar la respuesta.

Versiones anteriores de la biblioteca cliente:

image  = vision_client.image image_path

puts image.text

Biblioteca cliente para 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

Detección en la Web

En el siguiente ejemplo, se muestra la manera nueva de solicitar una detección en la Web y procesar la respuesta.

Versiones anteriores de la biblioteca 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

Biblioteca cliente para 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

Detección de localización de objetos

En el siguiente ejemplo, se muestra la manera nueva de solicitar una detección de localización de objetos y procesar la respuesta.

Versiones anteriores de la biblioteca 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

Biblioteca cliente para 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

Detección de textos PDF

El método async_batch_annotate_files permanece sin cambios. Se agregó un método nuevo de document_text_detection para simplificar el proceso. En el siguiente ejemplo, se muestra la manera nueva de solicitar una detección de textos pdf. No hay cambios en la operación que se muestra.

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

Biblioteca cliente para 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!
¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Documentación de la API de Cloud Vision
Si necesitas ayuda, visita nuestra página de asistencia.