SDK Vision par ordinateur d’Azure Cognitive Services pour Python

Le service Vision par ordinateur offre aux développeurs un accès à des algorithmes avancés pour le traitement d’images et le renvoi d’informations. Les algorithmes du service Vision par ordinateur analysent le contenu d’une image de différentes manières, selon les composants visuels qui vous intéressent.

Vous pouvez utiliser Vision par ordinateur dans votre application pour :

  • Analyser des images pour obtenir des informations
  • Extraire du texte à partir des images
  • Génération de miniatures

Vous cherchez plus de documentation ?

Prérequis

Si vous avez besoin d’un compte d’API Vision par ordinateur, vous pouvez en créer un avec la commande Azure CLI suivante :

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

Installation

Installez le SDK Vision par ordinateur d’Azure Cognitive Services avec pip, éventuellement dans un environnement virtuel.

Configurer un environnement virtuel (facultatif)

Bien que cela ne soit pas obligatoire, vous pouvez maintenir votre environnement système de base et celui du SDK Azure séparés en utilisant un environnement virtuel. Exécutez les commandes suivantes pour configurer un environnement virtuel comme et entrer dans celui-ci avec venvcogsrv-vision-env :

python3 -m venv cogsrv-vision-env
source cogsrv-vision-env/bin/activate

Installer le SDK

Installez le package du SDK Vision par ordinateur d’Azure Cognitive Services pour Python avec pip :

pip install azure-cognitiveservices-vision-computervision

Authentification

Une fois votre ressource Vision par ordinateur créée, utilisez sa région et l’une de ses clés de compte pour instancier l’objet client.

Utilisez ces valeurs quand vous créez l’instance de l’objet client ComputerVisionClient.

Récupérer les informations d’identification

Utilisez l’extrait Azure CLI ci-dessous pour remplir les deux variables d’environnement avec la région et l’une des clés du compte Vision par ordinateur (ces valeurs sont également disponibles dans le portail Azure). L’extrait de code est mis en forme pour l’interpréteur de commandes 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)

Créer un client

Une fois que vous avez renseigné les ACCOUNT_REGION variables d’environnement et ACCOUNT_KEY , vous pouvez créer l’objet 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
)

Utilisation

Une fois que vous avez initialisé un objet client ComputerVisionClient , vous pouvez :

  • Analyser une image : vous pouvez analyser une image pour certaines fonctionnalités telles que les visages, les couleurs et les étiquettes.
  • Générer des miniatures : créez une image JPEG personnalisée à utiliser comme miniature de l’image d’origine.
  • Obtenir la description d’une image : obtenir une description de l’image en fonction de son domaine d’objet.

Pour plus d’informations sur ce service, consultez Qu’est-ce que le service Vision par ordinateur ?.

Exemples

Les sections suivantes fournissent plusieurs extraits de code qui couvrent quelques-unes des tâches Vision par ordinateur les plus courantes, notamment :

Analyser une image

Vous pouvez analyser une image à la recherche de certaines caractéristiques avec analyze_image. Utilisez la propriété visual_features pour définir les types d’analyse à effectuer sur l’image. Les valeurs courantes sont VisualFeatureTypes.tags et 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)

Obtenir une liste de domaines

Passez en revue les domaines utilisés pour analyser votre image avec list_models. Ces noms de domaine sont utilisés lors de l’analyse d’une image par domaine. landmarks est un exemple de domaine.

models = client.list_models()

for x in models.models_property:
    print(x)

Analyser une image par domaine

Vous pouvez analyser une image par domaine avec analyze_image_by_domain. Obtenez la liste des domaines pris en charge pour utiliser le nom de domaine approprié.

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"])

Obtenir la description textuelle d’une image

Vous pouvez obtenir la description textuelle d’une image en langage naturel avec describe_image. Demandez plusieurs descriptions avec la propriété max_description si vous effectuez une analyse de texte à la recherche de mots clés associés à l’image. Voici des exemples de description textuelle pour l’image suivante : a train crossing a bridge over a body of water, a large bridge over a body of water et 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)

Obtenir le texte d’une image

Vous pouvez obtenir n’importe quel texte manuscrit ou imprimé figurant dans une image. Pour cela, deux appels au SDK sont nécessaires : read et get_read_result. L’appel à lire est asynchrone. Dans les résultats de l’appel get_read_result, vous devez case activée si le premier appel s’est terminé avec OperationStatusCodes avant d’extraire les données de texte. Les résultats incluent le texte, ainsi que les coordonnées du cadre englobant le texte.

# 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)

Générer une miniature

Vous pouvez générer une miniature (JPG) d’une image avec generate_thumbnail. La miniature ne doit pas forcément être dans les mêmes proportions que l’image d’origine.

Cet exemple utilise le package Pillow pour enregistrer la nouvelle image miniature localement.

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')

Dépannage

Général

Quand vous interagissez avec l’objet client ComputerVisionClient à l’aide du SDK Python, utilisez la classe ComputerVisionErrorResponseException pour retourner des erreurs. Les erreurs retournées par le service correspondent aux codes d’état HTTP retournés pour les demandes d’API REST.

Par exemple, si vous essayez d’analyser une image avec une clé non valide, une erreur 401 est retournée. Dans l’extrait de code suivant, l’erreur est gérée correctement en interceptant l’exception et en affichant des informations supplémentaires sur l’erreur.


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

Gérer les erreurs temporaires avec de nouvelles tentatives

Quand vous utilisez le client ComputerVisionClient, vous pouvez rencontrer des échecs passagers causés par des limites de débit appliquées par le service ou d’autres problèmes passagers comme des pannes du réseau. Pour plus d’informations sur la gestion de ces types d’échecs, consultez le modèle Nouvelle tentative dans le guide des modèles de conception de cloud et le modèle Disjoncteur connexe.

Étapes suivantes

Autres exemples de code

Plusieurs exemples du SDK Vision par ordinateur pour Python sont disponibles dans le dépôt GitHub du SDK. Vous y trouverez des exemples de code pour d’autres scénarios fréquents associés à l’utilisation du service Vision par ordinateur :

Documentation complémentaire

Pour une documentation plus complète sur le service Vision par ordinateur, consultez la documentation sur le service Azure Vision par ordinateur sur docs.microsoft.com.