Migrar para a biblioteca cliente Python v0.25.1

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.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 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.

from google.cloud import vision

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:

client = vision.ImageAnnotatorClient()

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:

with open(path, "rb") as image_file:
    content = image_file.read()

image = vision.Image(content=content)

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:

image = vision.Image()
image.source.image_uri = uri

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:

with open(path, "rb") as image_file:
    content = image_file.read()

image = vision.Image(content=content)

response = client.face_detection(image=image)
faces = response.face_annotations

# Names of likelihood from google.cloud.vision.enums
likelihood_name = (
    "UNKNOWN",
    "VERY_UNLIKELY",
    "UNLIKELY",
    "POSSIBLE",
    "LIKELY",
    "VERY_LIKELY",
)
print("Faces:")

for face in faces:
    print(f"anger: {likelihood_name[face.anger_likelihood]}")
    print(f"joy: {likelihood_name[face.joy_likelihood]}")
    print(f"surprise: {likelihood_name[face.surprise_likelihood]}")

    vertices = [
        f"({vertex.x},{vertex.y})" for vertex in face.bounding_poly.vertices
    ]

    print("face bounds: {}".format(",".join(vertices)))

if response.error.message:
    raise Exception(
        "{}\nFor more info on error messages, check: "
        "https://cloud.google.com/apis/design/errors".format(response.error.message)
    )

Fazer um pedido de deteção de etiquetas e processar a resposta

Versões anteriores das bibliotecas de cliente::

with io