Instructivo de detección web

Público

El objetivo de este instructivo es ayudarte a desarrollar aplicaciones con la característica de detección web de la API de Cloud Vision. Suponemos que estás familiarizado con las construcciones y las técnicas de programación básicas. Sin embargo, aunque seas un programador principiante, podrás seguir y ejecutar este instructivo sin dificultad y, luego, usar la documentación de referencia de la API de Cloud Vision para crear aplicaciones básicas.

En este instructivo, se analiza una aplicación de la API de Vision y se muestra cómo realizar una llamada a la API de Vision para usar la característica de detección web.

Requisitos previos

Python

Descripción general

En este instructivo, se explica el funcionamiento de una aplicación básica de la API de Vision que usa una solicitud Web detection. Una respuesta de Web detection anota la imagen enviada en la solicitud con lo siguiente:

  • etiquetas obtenidas desde la Web
  • las URL de los sitios que tienen imágenes que coinciden
  • las URL de imágenes web que coinciden de forma parcial o total con la imagen de la solicitud
  • las URL de imágenes visualmente similares

Mira el código

A medida que leas el código, te recomendamos que consultes la referencia de la API de Cloud Vision para 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))

Esta aplicación simple ejecuta las siguientes tareas:

  • Importa las bibliotecas necesarias para ejecutar la aplicación.
  • Toma una ruta de acceso a la imagen como un argumento y la pasa a la función main().
  • Usa el cliente de la API de Google Cloud para realizar la detección web.
  • Repite de forma indefinida la respuesta y, además, imprime los resultados.
  • Imprime la lista de entidades web con la descripción y la puntuación.
  • Imprime una lista de páginas que coinciden.
  • Imprime una lista de imágenes que coinciden de forma parcial.
  • Imprime una lista de las imágenes que coinciden en absoluto.

Información detallada

Importa las bibliotecas

import argparse
import io

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

Importamos las siguientes bibliotecas estándar:

  • argparse para permitir que la aplicación acepte nombres de archivos de entrada como argumentos
  • io para leer archivos

Otras importaciones son:

  • La clase ImageAnnotatorClient de la biblioteca google.cloud.vision para acceder a la API de Vision
  • El módulo types de la biblioteca google.cloud.vision para construir solicitudes

Ejecuta la aplicación

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

Aquí, simplemente analizamos el argumento ingresado que especifica la URL de la imagen web y la pasamos a la función main().

Autentica la API

Antes de comunicarte con el servicio de la API de Vision, debes autenticar tu servicio con las credenciales ya adquiridas. Dentro de una aplicación, la manera más simple de obtener credenciales es usar las Credenciales predeterminadas de la aplicación (ADC). La biblioteca cliente obtiene las credenciales de forma automática. Según configuración predeterminada, esto se realiza si obtienes las credenciales de la variable de entorno GOOGLE_APPLICATION_CREDENTIALS, que se deben establecer para apuntar al archivo de claves JSON de tu cuenta de servicio (consulta Configura una cuenta de servicio a fin de obtener más información.)

Genera la solicitud

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

Ahora que nuestro servicio de la API de Vision está listo, podemos generar una solicitud para el servicio.

Este fragmento de código realiza las siguientes tareas:

  1. Crea una instancia ImageAnnotatorClient como cliente.
  2. Genera un objeto Image de un archivo local o un URI.
  3. Pasa el objeto Image al método web_detection del cliente.
  4. Muestra las anotaciones.

Imprime la respuesta

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

Una vez que la operación se haya completado, explicaremos la WebDetection y también imprimiremos las entidades y las URL contenidas en la anotación (los dos resultados principales de cada tipo de anotación se muestran en la siguiente sección).

Ejecuta la aplicación

Para ejecutar la aplicación, pasamos la URL web (http://www.photos-public-domain.com/wp-content/uploads/2011/01/old-vw-bug-and-van.jpg) de la siguiente imagen del automóvil.

Aquí está el comando de Python, con la URL de web transferida de la imagen del automóvil, seguido del resultado de la consola. Ten en cuenta que una puntuación de relevancia se agrega después de las entidades enumeradas. También, observa que los resultados no se normalizan ni se comparan en diferentes consultas de imágenes.

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

¡Felicitaciones! ¡Realizaste la detección web con la API de Cloud Vision!

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Documentación de la API de Cloud Vision
Si necesitas ayuda, visita nuestra página de asistencia.