La Biblioteca cliente para Python v0.25.1 incluye algunos cambios significativos con respecto al diseño anterior de las bibliotecas cliente. Estos cambios se pueden resumir de la siguiente manera:
Consolidación de módulos en menos tipos
Reemplazo de parámetros sin tipo por clases y enumeraciones con tipos sólidos
En este tema, se proporciona información sobre los cambios que deberás realizar a tu código de Python para las bibliotecas cliente de la API de Cloud Vision a fin de usar la biblioteca cliente de Python v0.25.1.
Ejecutar versiones anteriores de la biblioteca cliente
No es necesario que actualices tu biblioteca cliente de Python a la versión v0.25.1. Si deseas continuar usando una versión anterior de la biblioteca cliente de Python y no deseas migrar el código, debes especificar la versión de la biblioteca cliente de Python que usa tu app. Para especificar una versión de biblioteca en particular, edita el archivo requirements.txt
como se muestra a continuación:
google-cloud-vision==0.25
Módulos quitados
Los siguientes módulos se quitaron del paquete de la Biblioteca cliente de 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
Cambios de código obligatorios
Importaciones
Incluye el nuevo módulo google.cloud.vision.types
para acceder a los nuevos tipos de la biblioteca cliente de Python v0.25.1.
El módulo types
contiene las clases nuevas necesarias para crear solicitudes, como types.Image
.
Además, el nuevo módulo google.cloud.vision.enums
contiene las enumeraciones que sirven para analizar y también interpretar las respuestas de la API, como enums.Likelihood.UNLIKELY
y enums.FaceAnnotation.Landmark.Type.LEFT_EYE
.
Crea un cliente
La clase Client
se reemplazó con la clase ImageAnnotatorClient
. Reemplaza las referencias a la clase Client
con ImageAnnotatorClient
.
Versiones anteriores de las bibliotecas cliente:
old_client = vision.Client()
Biblioteca cliente de Python v0.25.1:
Construir objetos que representen el contexto de la imagen
Para identificar el contenido de una imagen de un archivo local, de un URI de Google Cloud Storage o de un URI web, usa la nueva clase Image
.
Construye objetos que representen el contenido de la imagen de un archivo local
En el siguiente ejemplo, se muestra la nueva forma de representar el contenido de una imagen de un archivo local.
Versiones anteriores de las bibliotecas cliente:
with io.open(file_name, 'rb') as image_file:
content = image_file.read()
image = old_client.image(content=content)
Biblioteca cliente de Python v0.25.1:
Construir objetos que representen el contenido de la imagen de un URI
En el siguiente ejemplo se muestra el nuevo procedimiento de representar el contenido de la imagen desde un URI de Google Cloud Storage o un URI web. uri
es el URI de un archivo de imagen en Google Cloud Storage o en la Web.
Versiones anteriores de las bibliotecas cliente:
image = old_client.image(source_uri=uri)
Biblioteca cliente de Python v0.25.1:
Realizar solicitudes y procesar respuestas
Con la biblioteca cliente de Python v0.25.1, los métodos de API como face_detection
pertenecen al objeto ImageAnnotatorClient
y no a los objetos Image
.
Los valores que se muestran varían para muchos métodos, como se explica a continuación.
En particular, los vértices del cuadro de límite ahora se almacenan en bounding_poly.vertices
y no en bounds.vertices
. Las coordenadas de cada vértice se almacenan en vertex.x
y vertex.y
, en lugar de en vertex.x_coordinate
y vertex.y_coordinate
.
El cambio del cuadro de límite afecta a face_detection
, logo_detection
, text_detection
, document_text_detection
y crop_hints
.
Realiza una solicitud de detección de rostro y procesa la respuesta
Las probabilidades de emociones ahora se muestran como enumeraciones almacenadas en face.surprise_likelihood
y no en face.emotions.surprise
. Los nombres de las etiquetas de probabilidad se pueden recuperar mediante la importación de google.cloud.vision.enums.Likelihood
.
Versiones anteriores de las bibliotecas 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 de Python v0.25.1:
Realizar una solicitud de detección de etiquetas y procesar la respuesta
Versiones anteriores de las bibliotecas 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 de Python v0.25.1:
Realizar una solicitud de detección de puntos de referencia y procesar la respuesta
Versiones anteriores de las bibliotecas cliente:
La latitud y longitud de las ubicaciones de los puntos de referencia ahora se almacenan en location.lat_lng.latitude
y location.lat_lng.longitude
, en lugar de en location.latitude
y 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 de Python v0.25.1:
Realizar una solicitud de detección de logotipos y procesar la respuesta
Versiones anteriores de las bibliotecas 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 de Python v0.25.1:
Realiza una solicitud de detección de SafeSearch y procesar la respuesta
Las probabilidades de SafeSearch ahora se muestran como enumeraciones. Los nombres de las etiquetas de probabilidad se pueden recuperar mediante la importación de google.cloud.vision.enums.Likelihood
.
Versiones anteriores de las bibliotecas 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 de Python v0.25.1:
Realizar una solicitud de detección de texto y procesar la respuesta
Versiones anteriores de las bibliotecas 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 de Python v0.25.1:
Realizar una solicitud de detección de texto en documentos y procesar la respuesta
Versiones anteriores de las bibliotecas 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 de Python v0.25.1:
Realizar una solicitud de propiedades de una imagen y procesar la respuesta
La información de color predominante ahora se almacena en props.dominant_colors.colors
en lugar de en props.colors
.
Versiones anteriores de las bibliotecas 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 de Python v0.25.1:
Realizar una solicitud de detección en la Web y procesar la respuesta
Versiones anteriores de las bibliotecas 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 de Python v0.25.1:
Realizar una solicitud de sugerencias de recorte y procesar la respuesta
Versiones anteriores de las bibliotecas 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 de Python v0.25.1:
Ten en cuenta que las relaciones de aspecto deben pasarse a través de un CropHintsParams
y un ImageContext
.