A biblioteca cliente para Python v0.25.1 inclui algumas alterações significativas à forma como as bibliotecas cliente anteriores foram concebidas. Estas alterações podem ser resumidas da seguinte forma:
Consolidação de módulos em menos tipos
Substituir parâmetros não tipados por classes e enumerações fortemente tipadas
Este tópico fornece detalhes sobre as alterações que tem de fazer ao seu código Python para as bibliotecas cliente da API Cloud Vision de forma a usar a biblioteca cliente Python v0.25.1.
Executar versões anteriores da biblioteca cliente
Não tem de atualizar a sua biblioteca cliente Python para a versão 0.25.1. Se quiser continuar a usar uma versão anterior da biblioteca cliente Python e não quiser migrar o seu código, deve especificar a versão da biblioteca cliente Python usada pela sua app. Para especificar uma versão específica da biblioteca, edite o ficheiro requirements.txt, conforme mostrado:
google-cloud-vision==0.25
Módulos removidos
Os seguintes módulos foram removidos no pacote da biblioteca cliente 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 aceder aos novos tipos na biblioteca cliente Python v0.25.1.
O módulo types contém as novas classes necessárias para criar pedidos, 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.
Crie um cliente
A classe Client foi substituída pela classe ImageAnnotatorClient. Substitua as referências à turma Client por ImageAnnotatorClient.
Versões anteriores das bibliotecas cliente:
old_client = vision.Client()
Biblioteca cliente Python v0.25.1:
Construir objetos que representam conteúdo de imagem
Para identificar conteúdo de imagem a partir de um ficheiro local, de um URI do Google Cloud Storage ou de um URI da Web, use a nova classe Image.
Construir objetos que representam conteúdo de imagem a partir de um ficheiro local
O exemplo seguinte mostra a nova forma de representar conteúdo de imagem a partir de um ficheiro local.
Versões anteriores das bibliotecas cliente:
with io.open(file_name, 'rb') as image_file:
content = image_file.read()
image = old_client.image(content=content)
Biblioteca cliente Python v0.25.1:
Construir objetos que representam conteúdo de imagem a partir de um URI
O exemplo seguinte mostra a nova forma de representar conteúdo de imagem a partir de um URI do Google Cloud Storage ou de um URI da Web. uri é o URI de um ficheiro de imagem no Google Cloud Storage ou na Web.
Versões anteriores das bibliotecas cliente:
image = old_client.image(source_uri=uri)
Biblioteca cliente Python v0.25.1:
Fazer pedidos e processar respostas
Com a biblioteca cliente Python v.0.25.1, os métodos da API, como face_detection, pertencem ao objeto ImageAnnotatorClient, em vez dos objetos Image.
Os valores devolvidos são diferentes para vários métodos, conforme explicado abaixo.
Em particular, os vértices da caixa delimitadora são agora armazenados em bounding_poly.vertices, em vez de bounds.vertices. As coordenadas de cada vértice são armazenadas em vertex.x e vertex.y, em vez de 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.
Fazer um pedido de deteção de caras e processar a resposta
As probabilidades de emoções são agora devolvidas como enumerações armazenadas em face.surprise_likelihood, em vez de face.emotions.surprise. Pode recuperar os nomes das etiquetas de probabilidade importando 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 cliente Python v0.25.1:
Fazer um pedido de deteção de etiquetas 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 cliente Python v0.25.1:
Fazer um pedido de deteção de pontos de referência e processar a resposta
Versões anteriores das bibliotecas de cliente::
A latitude e a longitude das localizações de pontos de referência estão agora armazenadas em location.lat_lng.latitude e location.lat_lng.longitude, em vez de 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 cliente Python v0.25.1:
Fazer um pedido de deteção de logótipo 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 cliente Python v0.25.1:
Fazer um pedido de deteção da Pesquisa Segura e processar a resposta
As probabilidades da Pesquisa segura são agora devolvidas como enumerações. Pode recuperar os nomes das etiquetas de probabilidade importando 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 cliente Python v0.25.1:
Fazer um pedido de deteçã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 cliente Python v0.25.1:
Fazer um pedido de deteçã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 cliente Python v0.25.1:
Fazer um pedido de propriedades de imagens e processar a resposta
As informações de cor dominante são agora armazenadas em props.dominant_colors.colors, em vez de 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 cliente Python v0.25.1:
Fazer um pedido de deteçã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 cliente Python v0.25.1:
Fazer um pedido de sugestões de recorte 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 cliente Python v0.25.1:
Tenha em atenção que os formatos têm de ser transmitidos através de um CropHintsParams
e um ImageContext.