Como migrar para a biblioteca de cliente do Ruby v0.32.0 da API Cloud Vision

A biblioteca de cliente do Ruby v0.32.0 da API Cloud Vision apresenta grandes diferenças em relação às bibliotecas de cliente anteriores.

As alterações a seguir foram feitas na biblioteca da API Cloud Vision:

  • A biblioteca de cliente está mais consistente com a API RPC.

  • Os parâmetros do método de conteúdo agora fazem a distinção entre uma imagem local e uma imagem no Google Cloud Storage.

  • As solicitações são agrupadas por padrão em vez de serem feitas por imagem.

Nesta página, você verá os detalhes sobre as mudanças que precisa fazer no seu código do Ruby para as bibliotecas de cliente da API Cloud Vision para usar a biblioteca de cliente do Ruby v0.32.0.

Como executar versões anteriores da biblioteca de cliente

Não é obrigatório atualizar a biblioteca de cliente do Ruby para a versão 0.32. No entanto, a nova funcionalidade na API Cloud Vision é compatível apenas nas versões 0.32 e posteriores.

Se você preferir usar uma versão anterior da biblioteca de cliente do Ruby e não quiser migrar o código, especifique a versão da biblioteca de cliente do Ruby usada pelo seu aplicativo. Para especificar uma determinada versão de biblioteca, edite o arquivo Gemfile conforme mostrado a seguir:

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

Classes removidas

As classes mostradas a seguir foram removidas da gem da API Cloud Vision do Ruby v0.32.0.

  • Google::Cloud::Vision::Project

  • Google::Cloud::Vision::Location

  • Google::Cloud::Vision::Image

  • Google::Cloud::Vision::Annotate

  • Google::Cloud::Vision::Annotation

Classes movidas

As classes mostradas a seguir serão agora divididas em namespaces para cada versão da API Cloud Vision, permitindo atualizações por versão da API.

  • Google::Cloud::Vision::Credentials agora recebe namespaces na versão da API Google::Cloud::Vision::V[API_VERSION]::Credentials

Essa classe pode ser acessada no Google::Cloud::Vision, e uma versão específica da API Cloud Vision pode ser usada por meio da inicialização do cliente da seguinte maneira:

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

Alterações de código necessárias

Dependência da gem

Não há alterações no caminho requerido para a gem da biblioteca de cliente da API Cloud Vision do Ruby v0.32.0.

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

Criar um cliente

Quando você cria um cliente da API Cloud Vision usando a biblioteca de cliente da API Cloud Vision do Ruby v0.32.0, é necessário realizar as seguintes alterações:

  • Remova o parâmetro project. O parâmetro project foi removido porque a API Cloud Vision não inclui um nome de projeto nas solicitações.
  • Em vez de criar um cliente vision, crie um cliente image_annotator ou product_search. O cliente image_annotator contém a funcionalidade do antigo cliente vision.
image_annotator = Google::Cloud::Vision::ImageAnnotator.new

Como criar solicitações

Nas seções a seguir, abordamos a criação de solicitações usando a biblioteca de cliente da API Cloud Vision do Ruby v0.32.0. Os exemplos fazem solicitações usando uma imagem local e um URI para uma imagem do Google Cloud Storage.

Como criar objetos que representam o conteúdo da imagem em um arquivo local

No exemplo a seguir, mostramos a nova maneira de solicitar a detecção de rótulos para um arquivo local.

Versões anteriores da biblioteca de 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 de cliente do 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

Como criar objetos que representam o conteúdo de áudio do URI do Google Cloud Storage

No exemplo a seguir, mostramos a nova maneira de solicitar a detecção de rótulos para uma imagem armazenada no Google Cloud Storage.

Versões anteriores da biblioteca de 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 de cliente do 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

Detecção de dicas de corte

No exemplo a seguir, mostramos a nova maneira de solicitar a detecção de dicas de corte e processar a resposta.

Versões anteriores da biblioteca de 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 de cliente do 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

Detecção de texto de documentos

No exemplo a seguir, mostramos a nova maneira de solicitar a detecção de texto de documentos e processar a resposta.

Versões anteriores da biblioteca de cliente:

image  = vision_client.image image_path

document = image.document

puts document.text

Biblioteca de cliente do 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

Reconhecimento facial

No exemplo a seguir, mostramos a nova maneira de solicitar a detecção de texto de documentos e processar a resposta.

Versões anteriores da biblioteca de 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 de cliente do 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

Detecção de propriedades de imagem

No exemplo a seguir, mostramos a nova maneira de solicitar a detecção de propriedades de imagem e processar a resposta.

Versões anteriores da biblioteca de cliente:

image  = vision_client.image image_path

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

Biblioteca de cliente do 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

Detecção de rótulos

No exemplo a seguir, mostramos a nova maneira de solicitar a detecção de rótulos e processar a resposta.

Versões anteriores da biblioteca de cliente:

image  = vision_client.image image_path

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

Biblioteca de cliente do 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

Detecção de pontos de referência

No exemplo a seguir, mostramos a nova maneira de solicitar a detecção de pontos de referência e processar a resposta.

Versões anteriores da biblioteca de 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 de cliente do 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

Detecção de logotipo

No exemplo a seguir, mostramos a nova maneira de solicitar a detecção de logotipo e processar a resposta.

Versões anteriores da biblioteca de cliente:

image  = vision_client.image image_path

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

Biblioteca de cliente do 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

Detecção de pesquisa segura

No exemplo a seguir, mostramos a nova maneira de solicitar a detecção de pesquisa segura e processar a resposta.

Versões anteriores da biblioteca de 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 de cliente do 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

Detecção de texto

No exemplo a seguir, mostramos a nova maneira de solicitar a detecção de texto e processar a resposta.

Versões anteriores da biblioteca de cliente:

image  = vision_client.image image_path

puts image.text

Biblioteca de cliente do 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

Detecção na Web

No exemplo a seguir, mostramos a nova maneira de solicitar a detecção na Web e processar a resposta.

Versões anteriores da biblioteca de 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 de cliente do 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

Detecção de localização de objetos

No exemplo a seguir, mostramos a nova maneira de solicitar a detecção de localização de objetos e processar a resposta.

Versões anteriores da biblioteca de 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 de cliente do 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

Detecção de texto em PDF

O método async_batch_annotate_files permanece inalterado. Um novo método document_text_detection foi adicionado para ajudar a simplificar o processo. No exemplo a seguir, mostramos a nova maneira de solicitar a detecção de texto em PDF. A operação retornada permanece a mesma.

# 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 de cliente do 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!
Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação da API Cloud Vision
Precisa de ajuda? Acesse nossa página de suporte.