La libreria client per Python v0.25.1 include alcune modifiche significative alle modalità di progettazione delle librerie client precedenti. Queste modifiche possono essere riassunte come segue:
Consolidamento dei moduli in meno tipi
Sostituzione dei parametri non digitati con classi ed enumerazioni con tipi elevati
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 è necessario eseguire l'upgrade della libreria client Python alla versione v0.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:
google-cloud-vision==0.25
Moduli rimossi
I moduli seguenti sono stati rimossi dal pacchetto della libreria client 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
Modifiche al codice richieste
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 creare le richieste, come types.Image
.
Inoltre, il nuovo modulo google.cloud.vision.enums
contiene le enumerazioni utili per analizzare e comprendere le risposte dell'API, come enums.Likelihood.UNLIKELY
e enums.FaceAnnotation.Landmark.Type.LEFT_EYE
.
Creazione di un client
La classe Client
è stata sostituita con la classe ImageAnnotatorClient
. Sostituisci i riferimenti alla classe Client
con ImageAnnotatorClient
.
Versioni precedenti delle librerie client:
old_client = vision.Client()
Libreria client di Python v0.25.1:
Costruzione di oggetti che rappresentano contenuti di immagini
Per identificare i contenuti dell'immagine 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 contenuti di immagini da un file locale
L'esempio seguente mostra il nuovo modo per rappresentare i contenuti di 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 di Python v0.25.1:
Costruzione di oggetti che rappresentano i contenuti di immagini da un URI
L'esempio seguente mostra il nuovo modo per rappresentare i contenuti di immagini da un URI Google Cloud Storage o 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 di Python v0.25.1:
Richieste ed elaborazione delle risposte
Con la libreria client Python v.0.25.1, i metodi dell'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 riquadro di delimitazione ora sono archiviati in bounding_poly.vertices
anziché in bounds.vertices
. Le coordinate di ogni vertice sono memorizzate in vertex.x
e vertex.y
anziché in vertex.x_coordinate
e vertex.y_coordinate
.
La modifica del riquadro di delimitazione interessa face_detection
, logo_detection
, text_detection
, document_text_detection
e crop_hints
.
Richiesta di rilevamento dei volti ed elaborazione della risposta
Le probabilità delle emozioni ora vengono restituite sotto forma di enumerazioni memorizzate 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 di Python v0.25.1:
Esecuzione di una richiesta di rilevamento 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 di Python v0.25.1:
Richiesta di rilevamento di punti di riferimento ed elaborazione della risposta
Versioni precedenti delle librerie client::
La latitudine e la longitudine dei luoghi di interesse sono ora memorizzate 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 di Python v0.25.1:
Esecuzione di una richiesta di rilevamento di 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 di Python v0.25.1:
Richiesta di rilevamento SafeSearch ed elaborazione della risposta
Le probabilità di SafeSearch ora vengono restituite sotto forma di 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 di Python v0.25.1:
Effettuare una richiesta di rilevamento di testo ed elaborare la 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 di Python v0.25.1:
Creazione di una richiesta di rilevamento del testo di un 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 di Python v0.25.1:
Creazione di una richiesta di proprietà dell'immagine ed elaborazione della risposta
Le informazioni sul colore dominante ora vengono memorizzate 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 di Python v0.25.1:
Effettuare una richiesta di rilevamento web ed elaborare la 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 di Python v0.25.1:
Creazione di una richiesta di suggerimenti di 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 di Python v0.25.1:
Tieni presente che le proporzioni devono essere trasmesse tramite CropHintsParams
e ImageContext
.