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 ?
- Documentation de référence du SDK
- Documentation sur l’API Vision par ordinateur de Cognitive Services
Prérequis
- Abonnement Azure - Créer un compte gratuit
- Ressource Vision par ordinateur Azure
- Python 3.6+
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 rempli 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
)
Usage
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, 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 : obtenez 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
- Obtenir une liste de domaines
- Analyser une image par domaine
- Obtenir la description textuelle d’une image
- Obtenir le texte manuscrit d’une image
- Générer une miniature
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 vérifier 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 ComputerVisionErrorException
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.
Azure SDK for Python