La libreria client per Python v0.25.1 include alcune modifiche significative alla progettazione delle librerie client precedenti. Queste modifiche possono essere riassunte come segue:
Consolidamento dei moduli in un numero inferiore di tipi
Sostituzione dei parametri non tipizzati con classi ed enumerazioni fortemente tipizzate
Questo argomento fornisce dettagli sulle modifiche che dovrai apportare al codice Python per le librerie client dell'API Cloud Vision per utilizzare la libreria client Python v0.25.1.
Esecuzione delle versioni precedenti della libreria client
Non è obbligatorio eseguire l'upgrade della libreria client Python alla versione 0.25.1. Se vuoi continuare a utilizzare una versione precedente della libreria client Python e non vuoi eseguire la migrazione del codice, devi specificare la versione della libreria client Python utilizzata dalla tua app. Per specificare una versione specifica della libreria, modifica il file requirements.txt come mostrato di seguito:
google-cloud-vision==0.25
Moduli rimossi
I seguenti moduli sono stati rimossi nel pacchetto della libreria client 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
Modifiche del codice obbligatorie
Importazioni
Includi il nuovo modulo google.cloud.vision.types per accedere ai nuovi tipi nella libreria client Python v0.25.1.
Il modulo types contiene le nuove classi necessarie per la creazione delle richieste, ad esempio types.Image.
Inoltre, il nuovo modulo google.cloud.vision.enums contiene le enumerazioni utili per l'analisi e la comprensione delle risposte API, come enums.Likelihood.UNLIKELY e enums.FaceAnnotation.Landmark.Type.LEFT_EYE.
Crea un client
La classe Client è stata sostituita dalla classe ImageAnnotatorClient. Sostituisci i riferimenti alla classe Client con ImageAnnotatorClient.
Versioni precedenti delle librerie client:
old_client = vision.Client()
Libreria client Python v0.25.1:
Costruzione di oggetti che rappresentano i contenuti delle immagini
Per identificare i contenuti delle immagini da un file locale, da un URI Google Cloud Storage o da un URI web, utilizza la nuova classe Image.
Costruzione di oggetti che rappresentano i contenuti delle immagini da un file locale
L'esempio seguente mostra il nuovo modo per rappresentare i contenuti delle immagini da un file locale.
Versioni precedenti delle librerie client:
with io.open(file_name, 'rb') as image_file:
content = image_file.read()
image = old_client.image(content=content)
Libreria client Python v0.25.1:
Costruzione di oggetti che rappresentano i contenuti delle immagini da un URI
L'esempio seguente mostra il nuovo modo per rappresentare i contenuti delle immagini da un URI Google Cloud Storage o da un URI web. uri è l'URI di un file immagine su Google Cloud Storage o sul web.
Versioni precedenti delle librerie client:
image = old_client.image(source_uri=uri)
Libreria client Python v0.25.1:
Invio di richieste ed elaborazione delle risposte
Con la libreria client Python v0.25.1, i metodi API come face_detection appartengono all'oggetto ImageAnnotatorClient anziché agli oggetti Image.
I valori restituiti sono diversi per diversi metodi, come spiegato di seguito.
In particolare, i vertici del riquadro di delimitazione ora sono archiviati in bounding_poly.vertices anziché in bounds.vertices. Le coordinate di ogni vertice sono archiviate in vertex.x e vertex.y anziché in vertex.x_coordinate e vertex.y_coordinate.
La modifica del riquadro di delimitazione influisce su face_detection, logo_detection, text_detection, document_text_detection e crop_hints.
Invio di una richiesta di rilevamento dei volti ed elaborazione della risposta
Le probabilità delle emozioni ora vengono restituite come enumerazioni archiviate in face.surprise_likelihood anziché in face.emotions.surprise. I nomi delle etichette di probabilità possono essere recuperati importando google.cloud.vision.enums.Likelihood.
Versioni precedenti delle librerie client::
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)))
Libreria client Python v0.25.1:
Invio di una richiesta di rilevamento delle etichette ed elaborazione della risposta
Versioni precedenti delle librerie client::
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)
Libreria client Python v0.25.1:
Invio di una richiesta di rilevamento dei punti di riferimento ed elaborazione della risposta
Versioni precedenti delle librerie client::
La latitudine e la longitudine delle posizioni dei punti di riferimento ora sono archiviate in location.lat_lng.latitude e location.lat_lng.longitude, anziché in 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))
Libreria client Python v0.25.1:
Invio di una richiesta di rilevamento dei loghi ed elaborazione della risposta
Versioni precedenti delle librerie client::
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)
Libreria client Python v0.25.1:
Invio di una richiesta di rilevamento SafeSearch ed elaborazione della risposta
Le probabilità di SafeSearch ora vengono restituite come enumerazioni. I nomi delle etichette di probabilità possono essere recuperati importando google.cloud.vision.enums.Likelihood.
Versioni precedenti delle librerie client::
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))
Libreria client Python v0.25.1:
Invio di una richiesta di rilevamento del testo ed elaborazione della risposta
Versioni precedenti delle librerie client::
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)))
Libreria client Python v0.25.1:
Invio di una richiesta di rilevamento del testo del documento ed elaborazione della risposta
Versioni precedenti delle librerie client::
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))
Libreria client Python v0.25.1:
Invio di una richiesta di proprietà dell'immagine ed elaborazione della risposta
Le informazioni sul colore dominante ora sono archiviate in props.dominant_colors.colors anziché in props.colors.
Versioni precedenti delle librerie client::
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))
Libreria client Python v0.25.1:
Invio di una richiesta di rilevamento web ed elaborazione della risposta
Versioni precedenti delle librerie client::
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))
Libreria client Python v0.25.1:
Invio di una richiesta di suggerimenti per il ritaglio ed elaborazione della risposta
Versioni precedenti delle librerie client::
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)))
Libreria client Python v0.25.1:
Tieni presente che le proporzioni devono essere trasmesse tramite un CropHintsParams e un ImageContext.