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.annotationsgoogle.cloud.vision.batchgoogle.cloud.vision.clientgoogle.cloud.vision.colorgoogle.cloud.vision.crop_hintgoogle.cloud.vision.entitygoogle.cloud.vision.facegoogle.cloud.vision.featuregoogle.cloud.vision.geometrygoogle.cloud.vision.imagegoogle.cloud.vision.likelihoodgoogle.cloud.vision.safe_searchgoogle.cloud.vision.textgoogle.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.