SDK di Visione artificiale di Servizi cognitivi di Azure per Python
Il servizio Visione artificiale consente agli sviluppatori di accedere ad algoritmi avanzati per l'elaborazione delle immagini e la restituzione delle informazioni. Gli algoritmi di Visione artificiale analizzano il contenuto di un'immagine in diversi modi, in base alle caratteristiche visive a cui si è interessati.
È possibile usare Visione artificiale in un'applicazione per:
- Analizzare le immagini per ottenere informazioni dettagliate
- Estrarre testo dalle immagini
- Generare anteprime
Per altre informazioni, vedere:
Prerequisiti
- Sottoscrizione di Azure. Creare un account gratuito
- Risorsa Visione artificiale di Azure
- Python 3.6+
Se è necessario un account API Visione artificiale, è possibile crearne uno con questo comando dell'interfaccia della riga di comando di Azure:
RES_REGION=westeurope
RES_GROUP=<resourcegroup-name>
ACCT_NAME=<computervision-account-name>
az cognitiveservices account create \
--resource-group $RES_GROUP \
--name $ACCT_NAME \
--location $RES_REGION \
--kind ComputerVision \
--sku S1 \
--yes
Installazione
Installare l'SDK di Visione artificiale di Servizi cognitivi di Azure con pip. Facoltativamente, eseguire l'installazione in un ambiente virtuale.
Configurare un ambiente virtuale (facoltativo)
Nonostante non sia obbligatorio, è possibile mantenere gli ambienti del sistema di base e degli SDK di Azure isolati tra loro usando un ambiente virtuale. Eseguire questi comandi per configurare un ambiente virtuale con venv, ad esempio cogsrv-vision-env
, e quindi passare a tale ambiente:
python3 -m venv cogsrv-vision-env
source cogsrv-vision-env/bin/activate
Installare l'SDK
Installare il pacchetto dell'SDK di Visione artificiale di Servizi cognitivi di Azure per Python con pip:
pip install azure-cognitiveservices-vision-computervision
Autenticazione
Dopo aver creato la risorsa Visione artificiale, per creare un'istanza dell'oggetto client sono necessarie l'area e una delle chiavi dell'account di tale risorsa.
Usare questi valori per la creazione dell'istanza dell'oggetto client ComputerVisionClient.
Ottenere le credenziali
Usare il frammento seguente dell'interfaccia della riga di comando di Azure per popolare due variabili di ambiente con l'area e una delle chiavi dell'account Visione artificiale. Questi valori sono disponibili anche nel portale di Azure. Il frammento è presentato nel formato per la shell Bash.
RES_GROUP=<resourcegroup-name>
ACCT_NAME=<computervision-account-name>
export ACCOUNT_REGION=$(az cognitiveservices account show \
--resource-group $RES_GROUP \
--name $ACCT_NAME \
--query location \
--output tsv)
export ACCOUNT_KEY=$(az cognitiveservices account keys list \
--resource-group $RES_GROUP \
--name $ACCT_NAME \
--query key1 \
--output tsv)
Creare il client
Dopo aver popolato le ACCOUNT_REGION
variabili di ambiente e ACCOUNT_KEY
, è possibile creare l'oggetto client ComputerVisionClient .
from azure.cognitiveservices.vision.computervision import ComputerVisionClient
from azure.cognitiveservices.vision.computervision.models import VisualFeatureTypes
from msrest.authentication import CognitiveServicesCredentials
import os
region = os.environ['ACCOUNT_REGION']
key = os.environ['ACCOUNT_KEY']
credentials = CognitiveServicesCredentials(key)
client = ComputerVisionClient(
endpoint="https://" + region + ".api.cognitive.microsoft.com/",
credentials=credentials
)
Utilizzo
Dopo aver inizializzato un oggetto client ComputerVisionClient , è possibile:
- Analizzare un'immagine: è possibile analizzare un'immagine per determinate funzionalità, ad esempio visi, colori, tag.
- Genera anteprime: creare un'immagine JPEG personalizzata da usare come anteprima dell'immagine originale.
- Ottenere la descrizione di un'immagine: ottenere una descrizione dell'immagine in base al relativo dominio soggetto.
Per altre informazioni sul servizio, vedere Informazioni su Visione artificiale.
Esempio
Le sezioni seguenti contengono diversi frammenti di codice relativi ad alcune delle attività più comuni di Visione artificiale:
- Analizzare un'immagine
- Ottenere l'elenco dei domini soggetto
- Analizzare un'immagine in base al dominio
- Ottenere la descrizione testuale di un'immagine
- Ottenere testo scritto a mano da un'immagine
- Generare un'anteprima
Analizzare un'immagine
È possibile analizzare un'immagine per individuare determinate caratteristiche con analyze_image
. Usare la proprietà visual_features
per impostare i tipi di analisi da eseguire sull'immagine. I valori comuni sono VisualFeatureTypes.tags
e VisualFeatureTypes.description
.
url = "https://upload.wikimedia.org/wikipedia/commons/thumb/1/12/Broadway_and_Times_Square_by_night.jpg/450px-Broadway_and_Times_Square_by_night.jpg"
image_analysis = client.analyze_image(url,visual_features=[VisualFeatureTypes.tags])
for tag in image_analysis.tags:
print(tag)
Ottenere l'elenco dei domini soggetto
Esaminare i domini soggetto usati per analizzare l'immagine con list_models
. Questi nomi di dominio verranno usati per analizzare un'immagine in base al dominio. Un esempio di dominio è landmarks
.
models = client.list_models()
for x in models.models_property:
print(x)
Analizzare un'immagine in base al dominio
È possibile analizzare un'immagine in base al dominio soggetto con analyze_image_by_domain
. Ottenere l'elenco dei domini soggetto supportati per usare il nome di dominio corretto.
domain = "landmarks"
url = "https://images.pexels.com/photos/338515/pexels-photo-338515.jpeg"
language = "en"
analysis = client.analyze_image_by_domain(domain, url, language)
for landmark in analysis.result["landmarks"]:
print(landmark["name"])
print(landmark["confidence"])
Ottenere la descrizione testuale di un'immagine
È possibile ottenere una descrizione testuale di un'immagine, in base alla lingua, con describe_image
. Se si esegue l'analisi del testo per le parole chiave associate all'immagine, richiedere diverse descrizioni con la proprietà max_description
. Gli esempi di descrizione testuale dell'immagine seguente includono a train crossing a bridge over a body of water
, a large bridge over a body of water
e a train crossing a bridge over a large body of water
.
domain = "landmarks"
url = "http://www.public-domain-photos.com/free-stock-photos-4/travel/san-francisco/golden-gate-bridge-in-san-francisco.jpg"
language = "en"
max_descriptions = 3
analysis = client.describe_image(url, max_descriptions, language)
for caption in analysis.captions:
print(caption.text)
print(caption.confidence)
Ottenere testo da un'immagine
È possibile ottenere qualsiasi testo stampato o scritto a mano da un'immagine. A questo scopo sono necessarie due chiamate all'SDK: read
e get_read_result
. La chiamata a lettura è asincrona. Nei risultati della chiamata get_read_result è necessario verificare se la prima chiamata è stata completata prima OperationStatusCodes
di estrarre i dati di testo. I risultati includono sia il testo sia le coordinate del rettangolo di selezione per il testo.
# import models
from azure.cognitiveservices.vision.computervision.models import OperationStatusCodes
url = "https://github.com/Azure-Samples/cognitive-services-python-sdk-samples/raw/master/samples/vision/images/make_things_happen.jpg"
raw = True
numberOfCharsInOperationId = 36
# SDK call
rawHttpResponse = client.read(url, language="en", raw=True)
# Get ID from returned headers
operationLocation = rawHttpResponse.headers["Operation-Location"]
idLocation = len(operationLocation) - numberOfCharsInOperationId
operationId = operationLocation[idLocation:]
# SDK call
result = client.get_read_result(operationId)
# Get data
if result.status == OperationStatusCodes.succeeded:
for line in result.analyze_result.read_results[0].lines:
print(line.text)
print(line.bounding_box)
Generare un'anteprima
È possibile generare un'anteprima in formato JPG di un'immagine con generate_thumbnail
. L'anteprima non deve necessariamente avere le stesse proporzioni dell'immagine originale.
Questo esempio usa il pacchetto Pillow per salvare la nuova immagine di anteprima in locale.
from PIL import Image
import io
width = 50
height = 50
url = "http://www.public-domain-photos.com/free-stock-photos-4/travel/san-francisco/golden-gate-bridge-in-san-francisco.jpg"
thumbnail = client.generate_thumbnail(width, height, url)
for x in thumbnail:
image = Image.open(io.BytesIO(x))
image.save('thumbnail.jpg')
Risoluzione dei problemi
Generale
Quando si interagisce con l'oggetto client ComputerVisionClient usando l'SDK per Python, per la restituzione degli errori viene usata la classe ComputerVisionErrorException
. Gli errori restituiti dal servizio corrispondono agli stessi codici di stato HTTP restituiti per le richieste di API REST.
Se si prova ad analizzare un'immagine con una chiave non valida, ad esempio, viene restituito un errore 401
. Nel frammento di codice seguente l'errore viene gestito normalmente rilevando l'eccezione e visualizzando informazioni aggiuntive sull'errore.
domain = "landmarks"
url = "http://www.public-domain-photos.com/free-stock-photos-4/travel/san-francisco/golden-gate-bridge-in-san-francisco.jpg"
language = "en"
max_descriptions = 3
try:
analysis = client.describe_image(url, max_descriptions, language)
for caption in analysis.captions:
print(caption.text)
print(caption.confidence)
except HTTPFailure as e:
if e.status_code == 401:
print("Error unauthorized. Make sure your key and region are correct.")
else:
raise
Gestire gli errori temporanei con nuovi tentativi
Mentre si usa il client ComputerVisionClient, potrebbero verificarsi errori temporanei causati dai limiti di frequenza applicati dal servizio o altri problemi temporanei come interruzioni della rete. Per informazioni sulla gestione di questi tipi di errori, vedere Modello di ripetizione dei tentativi nella guida Modelli di progettazione cloud e l'articolo correlato Modello a interruttore.
Passaggi successivi
Altro codice di esempio
Diversi esempi per l'SDK di Visione artificiale per Python sono disponibili nel repository GitHub dell'SDK. Questi esempi offrono codice di esempio per altri scenari comuni correlati all'uso di Visione artificiale:
Documentazione aggiuntiva
Per informazioni più complete sul servizio Visione artificiale, vedere la documentazione su Visione artificiale di Azure in docs.microsoft.com.
Azure SDK for Python