1. Présentation

L'API Vision permet aux développeurs d'intégrer facilement des fonctionnalités de détection visuelle dans des applications (telles que l'étiquetage d'images, la détection de visages et de points de repère, la reconnaissance optique des caractères (OCR) et l'ajout de tags aux contenus explicites).
Dans ce tutoriel, vous allez vous concentrer sur l'utilisation de l'API Vision avec Python.
Points abordés
- Configurer votre environnement
- Effectuer une détection de thèmes
- Effectuer une détection de texte
- Effectuer la détection de points de repère
- Effectuer une détection de visages
- Effectuer la détection d'objets
Prérequis
Enquête
Comment allez-vous utiliser ce tutoriel ?
Quel est votre niveau d'expérience avec Python ?
Quel est votre niveau d'expérience avec les services Google Cloud ?
2. Préparation
Configuration de l'environnement au rythme de chacun
- Connectez-vous à la console Google Cloud, puis créez un projet ou réutilisez un projet existant. (Si vous ne possédez pas encore de compte Gmail ou Google Workspace, vous devez en créer un.)



- Le nom du projet est le nom à afficher pour les participants au projet. Il s'agit d'une chaîne de caractères non utilisée par les API Google. Vous pourrez toujours le modifier.
- L'ID du projet est unique parmi tous les projets Google Cloud et non modifiable une fois défini. La console Cloud génère automatiquement une chaîne unique (en général, vous n'y accordez d'importance particulière). Dans la plupart des ateliers de programmation, vous devrez indiquer l'ID de votre projet (généralement identifié par
PROJECT_ID). Si l'ID généré ne vous convient pas, vous pouvez en générer un autre de manière aléatoire. Vous pouvez également en spécifier un et voir s'il est disponible. Après cette étape, l'ID n'est plus modifiable et restera donc le même pour toute la durée du projet. - Pour information, il existe une troisième valeur (le numéro de projet) que certaines API utilisent. Pour en savoir plus sur ces trois valeurs, consultez la documentation.
- Vous devez ensuite activer la facturation dans la console Cloud pour utiliser les ressources/API Cloud. L'exécution de cet atelier de programmation est très peu coûteuse, voire sans frais. Pour désactiver les ressources et éviter ainsi que des frais ne vous soient facturés après ce tutoriel, vous pouvez supprimer le projet ou les ressources que vous avez créées. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai sans frais pour bénéficier d'un crédit de 300 $.
Démarrer Cloud Shell
Bien que Google Cloud puisse être utilisé à distance depuis votre ordinateur portable, nous allons nous servir de Cloud Shell pour cet atelier de programmation, un environnement de ligne de commande exécuté dans le cloud.
Activer Cloud Shell
- Dans Cloud Console, cliquez sur Activer Cloud Shell
.

Si vous démarrez Cloud Shell pour la première fois, un écran intermédiaire s'affiche pour vous expliquer de quoi il s'agit. Si cet écran s'est affiché, cliquez sur Continuer.

Le provisionnement et la connexion à Cloud Shell ne devraient pas prendre plus de quelques minutes.

Cette machine virtuelle contient tous les outils de développement nécessaires. Elle comprend un répertoire d'accueil persistant de 5 Go et s'exécute sur Google Cloud, ce qui améliore nettement les performances du réseau et l'authentification. Vous pouvez réaliser une grande partie, voire la totalité, des activités de cet atelier de programmation dans un navigateur.
Une fois connecté à Cloud Shell, vous êtes en principe authentifié, et le projet est défini avec votre ID de projet.
- Exécutez la commande suivante dans Cloud Shell pour vérifier que vous êtes authentifié :
gcloud auth list
Résultat de la commande
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- Exécutez la commande suivante dans Cloud Shell pour vérifier que la commande gcloud connaît votre projet :
gcloud config list project
Résultat de la commande
[core] project = <PROJECT_ID>
Si vous obtenez un résultat différent, exécutez cette commande :
gcloud config set project <PROJECT_ID>
Résultat de la commande
Updated property [core/project].
3. Configuration de l'environnement
Avant de pouvoir utiliser l'API Vision, exécutez la commande suivante dans Cloud Shell pour l'activer :
gcloud services enable vision.googleapis.com
L'écran qui s'affiche devrait ressembler à ce qui suit :
Operation "operations/..." finished successfully.
Vous pouvez maintenant utiliser l'API Vision.
Accédez à votre répertoire d'accueil :
cd ~
Créez un environnement virtuel Python pour isoler les dépendances :
virtualenv venv-vision
Activez l'environnement virtuel :
source venv-vision/bin/activate
Installez IPython et la bibliothèque cliente de l'API Vision :
pip install ipython google-cloud-vision
L'écran qui s'affiche devrait ressembler à ce qui suit :
... Installing collected packages: ..., ipython, google-cloud-vision Successfully installed ... google-cloud-vision-3.4.0 ...
Vous êtes maintenant prêt à utiliser la bibliothèque cliente de l'API Vision.
Dans les étapes suivantes, vous allez utiliser un interpréteur Python interactif appelé IPython, que vous avez installé à l'étape précédente. Démarrez une session en exécutant ipython dans Cloud Shell :
ipython
L'écran qui s'affiche devrait ressembler à ce qui suit :
Python 3.9.2 (default, Feb 28 2021, 17:03:44) Type 'copyright', 'credits' or 'license' for more information IPython 8.12.0 -- An enhanced Interactive Python. Type '?' for help. In [1]:
Vous êtes prêt à envoyer votre première requête…
4. Effectuer une détection de thèmes
L'une des principales fonctionnalités de l'API Vision est l'identification d'objets ou d'entités dans une image, appelée annotation de libellés. La détection de libellés identifie les objets, les lieux, les activités, les espèces animales, les produits, etc. L'API Vision prend une image en entrée et renvoie les libellés les plus susceptibles de s'appliquer à cette image. Il renvoie les libellés les plus pertinents, ainsi qu'un score de confiance pour la correspondance avec l'image.
Dans cet exemple, vous allez effectuer une détection de libellés sur une image (fournie par Alex Knight) de Setagaya, un quartier populaire de Tokyo :

Copiez le code suivant dans votre session IPython :
from typing import Sequence
from google.cloud import vision
def analyze_image_from_uri(
image_uri: str,
feature_types: Sequence,
) -> vision.AnnotateImageResponse:
client = vision.ImageAnnotatorClient()
image = vision.Image()
image.source.image_uri = image_uri
features = [vision.Feature(type_=feature_type) for feature_type in feature_types]
request = vision.AnnotateImageRequest(image=image, features=features)
response = client.annotate_image(request=request)
return response
def print_labels(response: vision.AnnotateImageResponse):
print("=" * 80)
for label in response.label_annotations:
print(
f"{label.score:4.0%}",
f"{label.description:5}",
sep=" | ",
)
Prenez le temps d'étudier le code et de voir comment il utilise la méthode de la bibliothèque cliente annotate_image pour analyser une image en fonction d'un ensemble de caractéristiques données.
Envoyez une requête avec la fonctionnalité LABEL_DETECTION :
image_uri = "gs://cloud-samples-data/vision/label/setagaya.jpeg"
features = [vision.Feature.Type.LABEL_DETECTION]
response = analyze_image_from_uri(image_uri, features)
print_labels(response)
Vous devez obtenir le résultat suivant :
================================================================================ 97% | Bicycle 96% | Tire 94% | Wheel 91% | Automotive lighting 89% | Infrastructure 87% | Bicycle wheel 86% | Mode of transport 85% | Building 83% | Electricity 82% | Neighbourhood
Voici comment les résultats sont présentés par la démo en ligne :

Résumé
Au cours de cette étape, vous avez pu effectuer une détection de thèmes sur une image et afficher les thèmes les plus probables associés à cette image. En savoir plus sur la détection de libellés
5. Effectuer une détection de texte
La détection de texte effectue une reconnaissance optique des caractères (OCR). afin de détecter et d'extraire le texte dans une image. Compatible avec un grand nombre de langues, elle permet également une identification automatique de la langue.
Dans cet exemple, vous allez effectuer une détection de texte sur une image de panneau de signalisation :

Copiez le code suivant dans votre session IPython :
def print_text(response: vision.AnnotateImageResponse):
print("=" * 80)
for annotation in response.text_annotations:
vertices = [f"({v.x},{v.y})" for v in annotation.bounding_poly.vertices]
print(
f"{repr(annotation.description):42}",
",".join(vertices),
sep=" | ",
)
Envoyez une requête avec la fonctionnalité TEXT_DETECTION :
image_uri = "gs://cloud-samples-data/vision/ocr/sign.jpg"
features = [vision.Feature.Type.TEXT_DETECTION]
response = analyze_image_from_uri(image_uri, features)
print_text(response)
Vous devez obtenir le résultat suivant :
================================================================================ 'WAITING?\nPLEASE\nTURN OFF\nYOUR\nENGINE' | (310,821),(2225,821),(2225,1965),(310,1965) 'WAITING' | (344,821),(2025,879),(2016,1127),(335,1069) '?' | (2057,881),(2225,887),(2216,1134),(2048,1128) 'PLEASE' | (1208,1230),(1895,1253),(1891,1374),(1204,1351) 'TURN' | (1217,1414),(1718,1434),(1713,1558),(1212,1538) 'OFF' | (1787,1437),(2133,1451),(2128,1575),(1782,1561) 'YOUR' | (1211,1609),(1741,1626),(1737,1747),(1207,1731) 'ENGINE' | (1213,1805),(1923,1819),(1920,1949),(1210,1935)
Voici comment les résultats sont présentés par la démo en ligne :

Résumé
Dans cette étape, vous avez pu effectuer la détection de texte sur une image et afficher le texte reconnu à partir de l'image. En savoir plus sur la détection de texte
6. Effectuer une détection de points de repère
La détection des points de repère détecte les structures naturelles ou créées par l'homme au sein d'une image.
Dans cet exemple, vous allez effectuer la détection de points de repère sur une image de la Tour Eiffel (fournie par John Towner) :

Copiez le code suivant dans votre session IPython :
def print_landmarks(response: vision.AnnotateImageResponse, min_score: float = 0.5):
print("=" * 80)
for landmark in response.landmark_annotations:
if landmark.score < min_score:
continue
vertices = [f"({v.x},{v.y})" for v in landmark.bounding_poly.vertices]
lat_lng = landmark.locations[0].lat_lng
print(
f"{landmark.description:18}",
",".join(vertices),
f"{lat_lng.latitude:.5f}",
f"{lat_lng.longitude:.5f}",
sep=" | ",
)
Envoyez une requête avec la fonctionnalité LANDMARK_DETECTION :
image_uri = "gs://cloud-samples-data/vision/landmark/eiffel_tower.jpg"
features = [vision.Feature.Type.LANDMARK_DETECTION]
response = analyze_image_from_uri(image_uri, features)
print_landmarks(response)
Vous devez obtenir le résultat suivant :
================================================================================ Trocadéro Gardens | (303,36),(520,36),(520,371),(303,371) | 48.86160 | 2.28928 Eiffel Tower | (458,76),(512,76),(512,263),(458,263) | 48.85846 | 2.29435
Voici comment les résultats sont présentés par la démo en ligne :

Résumé
Au cours de cette étape, vous avez pu effectuer la détection de points de repère sur une image de la tour Eiffel. En savoir plus sur la détection de repères
7. Effectuer une détection de visages
La détection des caractéristiques faciales détecte plusieurs visages dans une image, ainsi que leurs caractéristiques principales, telles que l'état émotionnel ou les accessoires portés.
Dans cet exemple, vous allez détecter des visages dans l'image suivante (avec l'aimable autorisation de Himanshu Singh Gurjar) :

Copiez le code suivant dans votre session IPython :
def print_faces(response: vision.AnnotateImageResponse):
print("=" * 80)
for face_number, face in enumerate(response.face_annotations, 1):
vertices = ",".join(f"({v.x},{v.y})" for v in face.bounding_poly.vertices)
print(f"# Face {face_number} @ {vertices}")
print(f"Joy: {face.joy_likelihood.name}")
print(f"Exposed: {face.under_exposed_likelihood.name}")
print(f"Blurred: {face.blurred_likelihood.name}")
print("-" * 80)
Envoyez une requête avec la fonctionnalité FACE_DETECTION :
image_uri = "gs://cloud-samples-data/vision/face/faces.jpeg"
features = [vision.Feature.Type.FACE_DETECTION]
response = analyze_image_from_uri(image_uri, features)
print_faces(response)
Vous devez obtenir le résultat suivant :
================================================================================ # Face 1 @ (1077,157),(2146,157),(2146,1399),(1077,1399) Joy: VERY_LIKELY Exposed: VERY_UNLIKELY Blurred: VERY_UNLIKELY -------------------------------------------------------------------------------- # Face 2 @ (144,1273),(793,1273),(793,1844),(144,1844) Joy: VERY_UNLIKELY Exposed: VERY_UNLIKELY Blurred: UNLIKELY -------------------------------------------------------------------------------- # Face 3 @ (785,167),(1100,167),(1100,534),(785,534) Joy: VERY_UNLIKELY Exposed: LIKELY Blurred: VERY_LIKELY --------------------------------------------------------------------------------
Voici comment les résultats sont présentés par la démo en ligne :

Résumé
Au cours de cette étape, vous avez pu effectuer la détection des visages. En savoir plus sur la détection des visages
8. Effectuer la détection d'objets
Dans cet exemple, vous allez effectuer la détection d'objets sur la même image a priori (gracieusement fournie par Alex Knight) de Setagaya :

Copiez le code suivant dans votre session IPython :
def print_objects(response: vision.AnnotateImageResponse):
print("=" * 80)
for obj in response.localized_object_annotations:
nvertices = obj.bounding_poly.normalized_vertices
print(
f"{obj.score:4.0%}",
f"{obj.name:15}",
f"{obj.mid:10}",
",".join(f"({v.x:.1f},{v.y:.1f})" for v in nvertices),
sep=" | ",
)
Envoyez une requête avec la fonctionnalité OBJECT_LOCALIZATION :
image_uri = "gs://cloud-samples-data/vision/label/setagaya.jpeg"
features = [vision.Feature.Type.OBJECT_LOCALIZATION]
response = analyze_image_from_uri(image_uri, features)
print_objects(response)
Vous devez obtenir le résultat suivant :
================================================================================ 93% | Bicycle | /m/0199g | (0.6,0.6),(0.8,0.6),(0.8,0.9),(0.6,0.9) 92% | Bicycle wheel | /m/01bqk0 | (0.6,0.7),(0.7,0.7),(0.7,0.9),(0.6,0.9) 91% | Tire | /m/0h9mv | (0.7,0.7),(0.8,0.7),(0.8,1.0),(0.7,1.0) 75% | Bicycle | /m/0199g | (0.3,0.6),(0.4,0.6),(0.4,0.7),(0.3,0.7) 51% | Tire | /m/0h9mv | (0.3,0.6),(0.4,0.6),(0.4,0.7),(0.3,0.7)
Voici comment les résultats sont présentés par la démo en ligne :

Résumé
Au cours de cette étape, vous avez pu effectuer la détection d'objets. En savoir plus sur la détection d'objets
9. Fonctionnalités multiples
Vous avez vu comment utiliser certaines fonctionnalités de l'API Vision, mais il en existe beaucoup d'autres. Vous pouvez demander plusieurs fonctionnalités dans une même requête.
Voici le type de requête que vous pouvez envoyer pour obtenir tous les insights en même temps :
image_uri = "gs://..."
features = [
vision.Feature.Type.OBJECT_LOCALIZATION,
vision.Feature.Type.FACE_DETECTION,
vision.Feature.Type.LANDMARK_DETECTION,
vision.Feature.Type.LOGO_DETECTION,
vision.Feature.Type.LABEL_DETECTION,
vision.Feature.Type.TEXT_DETECTION,
vision.Feature.Type.DOCUMENT_TEXT_DETECTION,
vision.Feature.Type.SAFE_SEARCH_DETECTION,
vision.Feature.Type.IMAGE_PROPERTIES,
vision.Feature.Type.CROP_HINTS,
vision.Feature.Type.WEB_DETECTION,
vision.Feature.Type.PRODUCT_SEARCH,
vision.Feature.Type.OBJECT_LOCALIZATION,
]
# response = analyze_image_from_uri(image_uri, features)
Il existe d'autres possibilités, comme effectuer des détections sur un lot d'images, de manière synchrone ou asynchrone. Consultez tous les guides d'utilisation.
10. Félicitations !

Vous avez appris à utiliser l'API Vision avec Python et testé quelques fonctionnalités de détection d'images.
Effectuer un nettoyage
Pour nettoyer votre environnement de développement, depuis Cloud Shell :
- Si vous êtes toujours dans votre session IPython, revenez à l'invite de commande :
exit - Arrêtez d'utiliser l'environnement virtuel Python :
deactivate - Supprimez le dossier de votre environnement virtuel :
cd ~ ; rm -rf ./venv-vision
Pour supprimer votre projet Google Cloud depuis Cloud Shell :
- Récupérez l'ID de votre projet actuel :
PROJECT_ID=$(gcloud config get-value core/project) - Assurez-vous qu'il s'agit bien du projet que vous souhaitez supprimer :
echo $PROJECT_ID - Supprimez le projet :
gcloud projects delete $PROJECT_ID
En savoir plus
- Testez la démo en ligne dans votre navigateur : https://cloud.google.com/vision.
- Documentation de l'API Vision : https://cloud.google.com/vision/docs
- Python sur Google Cloud : https://cloud.google.com/python
- Bibliothèques clientes Cloud pour Python : https://github.com/googleapis/google-cloud-python
Licence
Ce document est publié sous une licence Creative Commons Attribution 2.0 Generic.