Na biblioteca de cliente do Python v0.25.1 estão incluídas algumas alterações significativas em relação à concepção das anteriores. Essas alterações podem ser resumidas da seguinte maneira:
Consolidação de módulos em menos tipos
Substituição de parâmetros não tipados por enumerações e classes fortemente tipadas.
Neste tópico, você encontra detalhes sobre as alterações que precisará fazer no código Python das bibliotecas de cliente da API Cloud Vision para usar a biblioteca de cliente do Python v0.25.1.
Como executar versões anteriores da biblioteca de cliente
Não é obrigatório atualizar a biblioteca de cliente do Python para a versão v0.25.1. Se você quiser continuar usando uma versão anterior da biblioteca de cliente do Python e não quiser migrar seu código, especifique a versão da biblioteca que o aplicativo usa. Para especificar uma determinada versão da biblioteca, edite o arquivo requirements.txt
conforme mostrado:
google-cloud-vision==0.25
Módulos removidos
Os módulos a seguir foram removidos do pacote da biblioteca de cliente do Python v0.25.1.
google.cloud.vision.annotations
google.cloud.vision.batch
google.cloud.vision.client
google.cloud.vision.color
google.cloud.vision.crop_hint
google.cloud.vision.entity
google.cloud.vision.face
google.cloud.vision.feature
google.cloud.vision.geometry
google.cloud.vision.image
google.cloud.vision.likelihood
google.cloud.vision.safe_search
google.cloud.vision.text
google.cloud.vision.web
Alterações de código necessárias
Importações
Inclua o novo módulo google.cloud.vision.types
para acessar os novos tipos na biblioteca de cliente do Python v0.25.1.
O módulo types
contém as novas classes que são necessárias para criar solicitações, como types.Image
.
Além disso, o novo módulo google.cloud.vision.enums
contém as enumerações úteis para analisar e compreender as respostas da API, como enums.Likelihood.UNLIKELY
e enums.FaceAnnotation.Landmark.Type.LEFT_EYE
.
Criar um cliente
A classe Client
foi substituída pela classe ImageAnnotatorClient
. Substitua as referências à classe Client
por ImageAnnotatorClient
.
Versões anteriores das bibliotecas de cliente:
old_client = vision.Client()
Biblioteca de cliente do Python v0.25.1:
Como construir objetos que representam o conteúdo da imagem
Para identificar o conteúdo da imagem de um arquivo local, de um URI do Google Cloud Storage ou de um URI da Web, use a nova classe Image
.
Como construir objetos que representam o conteúdo da imagem de um arquivo local
O exemplo a seguir mostra a nova maneira de representar o conteúdo da imagem em um arquivo local.
Versões anteriores das bibliotecas de cliente:
with io.open(file_name, 'rb') as image_file:
content = image_file.read()
image = old_client.image(content=content)
Biblioteca de cliente do Python v0.25.1:
Como construir objetos que representam o conteúdo da imagem de um URI
Veja no exemplo a seguir a nova maneira de representar o conteúdo da imagem de um URI do Google Cloud Storage ou da Web. uri
é o URI para um arquivo de imagem no Google Cloud Storage ou na Web.
Versões anteriores das bibliotecas de cliente:
image = old_client.image(source_uri=uri)
Biblioteca de cliente do Python v0.25.1:
Como fazer solicitações e processar respostas
Com a biblioteca de cliente do Python v.0.25.1, os métodos da API, como face_detection
, pertencem ao objeto ImageAnnotatorClient
, em oposição aos objetos Image
.
Os valores retornados são diferentes de acordo com os vários métodos, conforme explicado abaixo.
Especificamente, os vértices da caixa delimitadora agora são armazenados em bounding_poly.vertices
, e não em bounds.vertices
. As coordenadas de cada vértice são armazenadas em vertex.x
e vertex.y
, e não em vertex.x_coordinate
e vertex.y_coordinate
.
A alteração da caixa delimitadora afeta face_detection
, logo_detection
, text_detection
, document_text_detection
e crop_hints
.
Como fazer uma solicitação de detecção facial e processar a resposta
As probabilidades de emoção agora são retornadas como enumerações armazenadas em face.surprise_likelihood
, e não em face.emotions.surprise
. É possível recuperar os nomes dos rótulos de probabilidade por meio da importação de google.cloud.vision.enums.Likelihood
.
Versões anteriores das bibliotecas de cliente:
with io.open(file_name, 'rb') as image_file:
content = image_file.read()
image = old_client.image(content=content)
faces = image.detect_faces()
for face in faces:
print('anger: {}'.format(face.emotions.anger))
print('joy: {}'.format(face.emotions.joy))
print('surprise: {}'.format(face.emotions.surprise))
vertices = (['({},{})'.format(bound.x_coordinate, bound.y_coordinate)
for bound in face.bounds.vertices])
print('face bounds: {}'.format(','.join(vertices)))
Biblioteca de cliente do Python v0.25.1:
Como fazer uma solicitação de detecção de rótulos e processar a resposta
Versões anteriores das bibliotecas de cliente:
with io.open(file_name, 'rb') as image_file:
content = image_file.read()
image = old_client.image(content=content)
labels = image.detect_labels()
for label in labels:
print(label.description)
Biblioteca de cliente do Python v0.25.1:
Como fazer uma solicitação de detecção de pontos de referência e processar a resposta
Versões anteriores das bibliotecas de cliente:
A latitude e a longitude dos locais de ponto de referência agora são armazenadas em location.lat_lng.latitude
e location.lat_lng.longitude
, e não em location.latitude
e location.longitude
.
with io.open(file_name, 'rb') as image_file:
content = image_file.read()
image = old_client.image(content=content)
landmarks = image.detect_landmarks()
for landmark in landmarks:
print(landmark.description, landmark.score)
for location in landmark.locations:
print('Latitude'.format(location.latitude))
print('Longitude'.format(location.longitude))
Biblioteca de cliente do Python v0.25.1:
Como fazer uma solicitação de detecção de logotipos e processar a resposta
Versões anteriores das bibliotecas de cliente:
with io.open(file_name, 'rb') as image_file:
content = image_file.read()
image = old_client.image(content=content)
logos = image.detect_logos()
for logo in logos:
print(logo.description, logo.score)
Biblioteca de cliente do Python v0.25.1:
Como fazer uma solicitação de detecção do SafeSearch e processar a resposta
Agora, as probabilidades do SafeSearch são retornadas como enumerações. É possível recuperar os nomes dos rótulos de probabilidade por meio da importação de google.cloud.vision.enums.Likelihood
.
Versões anteriores das bibliotecas de cliente:
with io.open(file_name, 'rb') as image_file:
content = image_file.read()
image = old_client.image(content=content)
safe = image.detect_safe_search()
print('Safe search:')
print('adult: {}'.format(safe.adult))
print('medical: {}'.format(safe.medical))
print('spoofed: {}'.format(safe.spoof))
print('violence: {}'.format(safe.violence))
Biblioteca de cliente do Python v0.25.1:
Como fazer uma solicitação de detecção de texto e processar a resposta
Versões anteriores das bibliotecas de cliente:
with io.open(file_name, 'rb') as image_file:
content = image_file.read()
image = old_client.image(content=content)
texts = image.detect_text()
for text in texts:
print('\n"{}"'.format(text.description))
vertices = (['({},{})'.format(bound.x_coordinate, bound.y_coordinate)
for bound in text.bounds.vertices])
print('bounds: {}'.format(','.join(vertices)))
Biblioteca de cliente do Python v0.25.1:
Como fazer uma solicitação de detecção de texto de documentos e processar a resposta
Versões anteriores das bibliotecas de cliente:
with io.open(file_name, 'rb') as image_file:
content = image_file.read()
image = old_client.image(content=content)
document = image.detect_full_text()
for page in document.pages:
for block in page.blocks:
block_words = []
for paragraph in block.paragraphs:
block_words.extend(paragraph.words)
block_symbols = []
for word in block_words:
block_symbols.extend(word.symbols)
block_text = ''
for symbol in block_symbols:
block_text = block_text + symbol.text
print('Block Content: {}'.format(block_text))
print('Block Bounds:\n {}'.format(block.bounding_box))
Biblioteca de cliente do Python v0.25.1:
Como fazer uma solicitação de propriedades de imagem e processar a resposta
As informações de cor dominante agora são armazenadas em props.dominant_colors.colors
, e não em props.colors
.
Versões anteriores das bibliotecas de cliente:
with io.open(file_name, 'rb') as image_file:
content = image_file.read()
image = old_client.image(content=content)
props = image.detect_properties()
for color in props.colors:
print('fraction: {}'.format(color.pixel_fraction))
print('\tr: {}'.format(color.color.red))
print('\tg: {}'.format(color.color.green))
print('\tb: {}'.format(color.color.blue))
print('\ta: {}'.format(color.color.alpha))
Biblioteca de cliente do Python v0.25.1:
Como fazer uma solicitação de detecção na Web e processar a resposta
Versões anteriores das bibliotecas de cliente:
with io.open(file_name, 'rb') as image_file:
content = image_file.read()
image = old_client.image(content=content)
notes = image.detect_web()
if notes.pages_with_matching_images:
print('\n{} Pages with matching images retrieved')
for page in notes.pages_with_matching_images:
print('Score : {}'.format(page.score))
print('Url : {}'.format(page.url))
if notes.full_matching_images:
print ('\n{} Full Matches found: '.format(
len(notes.full_matching_images)))
for image in notes.full_matching_images:
print('Score: {}'.format(image.score))
print('Url : {}'.format(image.url))
if notes.partial_matching_images:
print ('\n{} Partial Matches found: '.format(
len(notes.partial_matching_images)))
for image in notes.partial_matching_images:
print('Score: {}'.format(image.score))
print('Url : {}'.format(image.url))
if notes.web_entities:
print ('\n{} Web entities found: '.format(len(notes.web_entities)))
for entity in notes.web_entities:
print('Score : {}'.format(entity.score))
print('Description: {}'.format(entity.description))
Biblioteca de cliente do Python v0.25.1:
Como fazer uma solicitação de dicas de corte e processar a resposta
Versões anteriores das bibliotecas de cliente:
with io.open(file_name, 'rb') as image_file:
content = image_file.read()
image = old_client.image(content=content)
hints = image.detect_crop_hints(aspect_ratios=[1.77])
for n, hint in enumerate(hints):
print('\nCrop Hint: {}'.format(n))
vertices = (['({},{})'.format(bound.x_coordinate, bound.y_coordinate)
for bound in hint.bounds.vertices])
print('bounds: {}'.format(','.join(vertices)))
Biblioteca de cliente do Python v0.25.1:
As proporções precisam ser transmitidas por meio de CropHintsParams
e ImageContext
.