La biblioteca de cliente de Python v0.25.1 incluye algunos cambios significativos en el diseño de las bibliotecas de cliente anteriores. Estos cambios se pueden resumir de la siguiente manera:
Consolidación de módulos en menos tipos
Sustituir parámetros sin tipo por clases y enumeraciones con tipo estricto
En este tema se explica qué cambios debes hacer en el código de Python de las bibliotecas de cliente de la API Cloud Vision para usar la biblioteca de cliente de Python v0.25.1.
Ejecutar versiones anteriores de la biblioteca de cliente
No es obligatorio actualizar la biblioteca de cliente de Python a la versión 0.25.1. Si quieres seguir usando una versión anterior de la biblioteca de cliente de Python y no quieres migrar tu código, debes especificar la versión de la biblioteca de cliente de Python que usa tu aplicación. Para especificar una versión concreta de la biblioteca, edita el archivo requirements.txt
como se muestra a continuación:
google-cloud-vision==0.25
Módulos retirados
Los siguientes módulos se han eliminado del paquete de la biblioteca de 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 de cliente de Python v. 0.25.1.
El módulo types
contiene las nuevas clases necesarias para crear solicitudes, como types.Image
.
Además, el nuevo módulo google.cloud.vision.enums
contiene las enumeraciones útiles para analizar y comprender las respuestas de la API, como enums.Likelihood.UNLIKELY
y enums.FaceAnnotation.Landmark.Type.LEFT_EYE
.
Crear un cliente
La clase Client
se ha sustituido por la clase ImageAnnotatorClient
. Sustituye las referencias a la clase Client
por ImageAnnotatorClient
.
Versiones anteriores de las bibliotecas de cliente:
old_client = vision.Client()
Biblioteca de cliente de Python v0.25.1:
Construir objetos que representen contenido de 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
.
Crear objetos que representen el contenido de una imagen a partir 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 de cliente:
with io.open(file_name, 'rb') as image_file:
content = image_file.read()
image = old_client.image(content=content)
Biblioteca de cliente de Python v0.25.1:
Construir objetos que representen contenido de imagen a partir de un URI
En el siguiente ejemplo se muestra la nueva forma de representar el contenido de una imagen a partir de un URI de Google Cloud Storage o de 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 de cliente:
image = old_client.image(source_uri=uri)
Biblioteca de cliente de Python v0.25.1:
Enviar solicitudes y procesar respuestas
Con la biblioteca de cliente de Python v.0.25.1, los métodos de la API, como face_detection
, pertenecen al objeto ImageAnnotatorClient
en lugar de a los objetos Image
.
Los valores devueltos son diferentes para varios métodos, como se explica a continuación.
En concreto, los vértices de los cuadros delimitadores ahora se almacenan en bounding_poly.vertices
en lugar de 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 en el cuadro envolvente afecta a face_detection
, logo_detection
, text_detection
, document_text_detection
y crop_hints
.
Enviar una solicitud de detección de caras y procesar la respuesta
Las probabilidades de las emociones ahora se devuelven como enumeraciones almacenadas en face.surprise_likelihood
en lugar de en face.emotions.surprise
. Los nombres de las etiquetas de probabilidad se pueden recuperar importando google.cloud.vision.enums.Likelihood
.
Versiones anteriores de las 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 de Python v0.25.1:
Hacer una solicitud de detección de etiquetas y procesar la respuesta
Versiones anteriores de las 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 de Python v0.25.1:
Enviar una solicitud de detección de puntos de referencia y procesar la respuesta
Versiones anteriores de las bibliotecas de cliente:
La latitud y la longitud 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 de cliente de Python v0.25.1:
Enviar una solicitud de detección de logotipos y procesar la respuesta
Versiones anteriores de las 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 de Python v0.25.1:
Enviar una solicitud de detección de Búsqueda segura y procesar la respuesta
Ahora, las probabilidades de Búsqueda Segura se devuelven como enumeraciones. Los nombres de las etiquetas de probabilidad se pueden recuperar importando google.cloud.vision.enums.Likelihood
.
Versiones anteriores de las 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 de Python v0.25.1:
Enviar una solicitud de detección de texto y procesar la respuesta
Versiones anteriores de las 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 de Python v0.25.1:
Enviar una solicitud de detección de texto en documentos y procesar la respuesta
Versiones anteriores de las 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 de Python v0.25.1:
Enviar una solicitud de propiedades de imagen y procesar la respuesta
La información del color dominante ahora se almacena en props.dominant_colors.colors
en lugar de en props.colors
.
Versiones anteriores de las 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 de Python v0.25.1:
Hacer una solicitud de detección web y procesar la respuesta
Versiones anteriores de las 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 de Python v0.25.1:
Enviar una solicitud de sugerencias de recorte y procesar la respuesta
Versiones anteriores de las 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 de Python v0.25.1:
Ten en cuenta que las relaciones de aspecto deben transferirse a través de CropHintsParams
y ImageContext
.