Tutoriel sur la détection sur le Web

Public

L'objectif de ce tutoriel est de vous aider à développer des applications à l'aide de la fonctionnalité de détection sur le Web de l'API Cloud Vision. Il y est supposé que vous maîtrisez les concepts et les techniques de base de la programmation. Mais même si vous êtes un programmeur débutant, vous devriez pouvoir suivre et exécuter ce tutoriel sans difficulté, puis utiliser la documentation de référence de l'API Cloud Vision pour créer des applications de base.

Ce tutoriel décrit une application de l'API Vision en vous montrant comment appeler cette API pour en utiliser la fonctionnalité de détection sur le Web.

Prérequis

Python

Aperçu

Ce tutoriel vous présente une application de base de l'API Vision qui utilise une requête Web detection. Une réponse Web detection annote l'image envoyée dans la requête avec :

  • des libellés obtenus à partir du Web ;
  • les URL de sites comportant des images correspondantes ;
  • les URL d'images du Web correspondant partiellement ou parfaitement à l'image de la requête ;
  • les URL d'images visuellement similaires.

Intégralité du code

Lors de la lecture du code, nous vous recommandons de vous reporter également à la documentation de référence de l'API Cloud Vision pour Python.

import argparse
import io

from google.cloud import vision
from google.cloud.vision import types

def annotate(path):
    """Returns web annotations given the path to an image."""
    client = vision.ImageAnnotatorClient()

    if path.startswith('http') or path.startswith('gs:'):
        image = types.Image()
        image.source.image_uri = path

    else:
        with io.open(path, 'rb') as image_file:
            content = image_file.read()

        image = types.Image(content=content)

    web_detection = client.web_detection(image=image).web_detection

    return web_detection

def report(annotations):
    """Prints detected features in the provided web annotations."""
    if annotations.pages_with_matching_images:
        print('\n{} Pages with matching images retrieved'.format(
            len(annotations.pages_with_matching_images)))

        for page in annotations.pages_with_matching_images:
            print('Url   : {}'.format(page.url))

    if annotations.full_matching_images:
        print('\n{} Full Matches found: '.format(
              len(annotations.full_matching_images)))

        for image in annotations.full_matching_images:
            print('Url  : {}'.format(image.url))

    if annotations.partial_matching_images:
        print('\n{} Partial Matches found: '.format(
              len(annotations.partial_matching_images)))

        for image in annotations.partial_matching_images:
            print('Url  : {}'.format(image.url))

    if annotations.web_entities:
        print('\n{} Web entities found: '.format(
              len(annotations.web_entities)))

        for entity in annotations.web_entities:
            print('Score      : {}'.format(entity.score))
            print('Description: {}'.format(entity.description))

if __name__ == '__main__':
    parser = argparse.ArgumentParser(
        description=__doc__,
        formatter_class=argparse.RawDescriptionHelpFormatter)
    path_help = str('The image to detect, can be web URI, '
                    'Google Cloud Storage, or path to local file.')
    parser.add_argument('image_url', help=path_help)
    args = parser.parse_args()

    report(annotate(args.image_url))

Cette application simple effectue les tâches suivantes :

  • Elle importe les bibliothèques nécessaires pour exécuter l'application.
  • Elle utilise un chemin d'accès d'image en tant qu'argument et le transmet à la fonction main().
  • Elle utilise le client de l'API Google Cloud pour effectuer une détection sur le Web.
  • Elle effectue une boucle sur la réponse et affiche les résultats.
  • Elle affiche la liste des entités Web assorties d'une description et d'un score.
  • Elle affiche la liste des pages correspondantes.
  • Elle affiche la liste des images qui correspondent partiellement.
  • Elle affiche la liste des images qui correspondent parfaitement.

En détail

Importer des bibliothèques

import argparse
import io

from google.cloud import vision
from google.cloud.vision import types

Nous importons des bibliothèques standards :

  • argparse pour permettre à l'application d'accepter les noms de fichiers d'entrée en tant qu'arguments.
  • io pour la lecture des fichiers.

Autres importations :

  • La classe ImageAnnotatorClient de la bibliothèque google.cloud.vision pour l'accès à l'API Vision.
  • Le module types de la bibliothèque google.cloud.vision pour la création des requêtes.

Exécuter l'application

parser = argparse.ArgumentParser(
    description=__doc__,
    formatter_class=argparse.RawDescriptionHelpFormatter)
path_help = str('The image to detect, can be web URI, '
                'Google Cloud Storage, or path to local file.')
parser.add_argument('image_url', help=path_help)
args = parser.parse_args()

report(annotate(args.image_url))

Ici, nous analysons simplement l'argument transmis, qui spécifie l'URL de l'image Web, et nous le transmettons à la fonction main().

S'authentifier dans l'API

Avant de communiquer avec le service de l'API Vision, vous devez authentifier votre service avec les identifiants précédemment acquis. Dans une application, le moyen le plus simple d'obtenir des identifiants est d'utiliser les identifiants par défaut de l'application. La bibliothèque cliente obtient les identifiants automatiquement. Par défaut, elle accède pour cela aux identifiants de la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS, laquelle doit être définie de manière à pointer sur le fichier de clé JSON de votre compte de service (consultez la section Configurer un compte de service pour en savoir plus).

Construire la requête

client = vision.ImageAnnotatorClient()

if path.startswith('http') or path.startswith('gs:'):
    image = types.Image()
    image.source.image_uri = path

else:
    with io.open(path, 'rb') as image_file:
        content = image_file.read()

    image = types.Image(content=content)

web_detection = client.web_detection(image=image).web_detection

Maintenant que le service de l'API Vision est prêt, nous pouvons créer une requête à lui envoyer.

Cet extrait de code effectue les tâches suivantes :

  1. Il crée une instance ImageAnnotatorClient en tant que client.
  2. Il crée un objet Image à partir d'un fichier local ou d'un URI.
  3. Il transmet l'objet Image à la méthode web_detection du client.
  4. Il renvoie les annotations.

Afficher la réponse

if annotations.pages_with_matching_images:
    print('\n{} Pages with matching images retrieved'.format(
        len(annotations.pages_with_matching_images)))

    for page in annotations.pages_with_matching_images:
        print('Url   : {}'.format(page.url))

if annotations.full_matching_images:
    print('\n{} Full Matches found: '.format(
          len(annotations.full_matching_images)))

    for image in annotations.full_matching_images:
        print('Url  : {}'.format(image.url))

if annotations.partial_matching_images:
    print('\n{} Partial Matches found: '.format(
          len(annotations.partial_matching_images)))

    for image in annotations.partial_matching_images:
        print('Url  : {}'.format(image.url))

if annotations.web_entities:
    print('\n{} Web entities found: '.format(
          len(annotations.web_entities)))

    for entity in annotations.web_entities:
        print('Score      : {}'.format(entity.score))
        print('Description: {}'.format(entity.description))

Une fois l'opération terminée, nous parcourons WebDetection et nous affichons les entités et les URL contenues dans l'annotation (les deux premiers résultats de chaque type d'annotation sont présentés dans la section suivante).

Exécuter l'application

Pour exécuter l'application, nous transmettons l'URL Web (http://www.photos-public-domain.com/wp-content/uploads/2011/01/old-vw-bug-and-van.jpg) de l'image de voiture suivante.

Voici la commande Python avec l'URL Web de l'image de voiture transmise, suivie de la sortie de la console. Notez qu'un score de pertinence est ajouté après les entités répertoriées. Notez que les scores ne sont pas normalisés, ni comparables entre différentes requêtes d'image.

python web_detect.py "http://www.photos-public-domain.com/wp-content/uploads/2011/01/old-vw-bug-and-van.jpg"
5 Pages with matching images retrieved
Url   : http://www.photos-public-domain.com/2011/01/07/old-volkswagen-bug-and-van/
Url   : http://pix-hd.com/old+volkswagen+van+for+sale
...

2 Full Matches found:
Url  : http://www.photos-public-domain.com/wp-content/uploads/2011/01/old-vw-bug-and-van.jpg
Url  : http://www.wbwagen.com/media/old-volkswagen-bug-and-van-picture-free-photograph-photos-public_s_66f487042adad5a6.jpg

4 Partial Matches found:
Url  : http://www.photos-public-domain.com/wp-content/uploads/2011/01/old-vw-bug-and-van.jpg
Url  : http://www.wbwagen.com/media/old-vw-bug-and-vanjpg_s_ac343d7f041b5f8d.jpg
...

5 Web entities found:
Score      : 5.35028934479
Description: Volkswagen Beetle
Score      : 1.43998003006
Description: Volkswagen
Score      : 0.828279972076
Description: Volkswagen Type 2
Score      : 0.75271999836
Description: Van
Score      : 0.690039992332
Description: Car

Félicitations ! Vous avez effectué une détection sur le Web à l'aide de l'API Cloud Vision.

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Documentation de l'API Cloud Vision
Besoin d'aide ? Consultez notre page d'assistance.