Tutorial sobre detecção na Web

Público

O objetivo deste tutorial é ajudar você a desenvolver aplicativos usando o recurso de detecção da Web da API do Cloud Vision. Você precisa conhecer as construções e técnicas básicas de programação. No entanto, mesmo que seja um programador iniciante, você conseguirá acompanhar e executar o tutorial sem dificuldade, além de usar a documentação de referência da API do Cloud Vision para criar aplicativos básicos.

Este tutorial aborda um aplicativo da Vision API e mostra como fazer uma chamada a ela para usar o recurso de detecção na Web.

Pré-requisitos

Visão geral

Neste tutorial, mostramos um aplicativo básico da API Vision em que é usada uma solicitação Web detection. A imagem enviada na solicitação é anotada pela resposta Web detection:

  • marcadores recebidos da Web;
  • URLs com imagens correspondentes;
  • URLs para imagens da Web que correspondem em parte ou totalmente à imagem na solicitação;
  • URLs para imagens visualmente similares.

Listagem de códigos

Durante a leitura do código, recomendamos que você consulte a referência da Cloud Vision API 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))

Esse aplicativo simples executa as seguintes tarefas:

  • Importa as bibliotecas necessárias para executar o aplicativo
  • Usa um caminho de imagem como argumento e o transmite para a função main().
  • Usa o cliente da API Google Cloud para executar a detecção na Web.
  • Retorna a resposta e imprime os resultados.
  • Imprime uma lista de entidades da Web com descrição e pontuação.
  • Imprime uma lista de páginas correspondentes.
  • Imprime uma lista de imagens parcialmente correspondentes.
  • Imprime uma lista de imagens totalmente correspondentes.

Mais detalhes

Como importar bibliotecas

import argparse
import io

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

Importamos bibliotecas padrão:

  • argparse para que o aplicativo aceite nomes de arquivos de entrada como argumentos
  • io para ler os arquivos

Outras importações:

  • A classe ImageAnnotatorClient na biblioteca google.cloud.vision para acessar a API Vision.
  • O módulo types na biblioteca google.cloud.vision para criar solicitações.

Como executar o aplicativo

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

Aqui, simplesmente analisamos o argumento transmitido que especifica o URL da imagem na Web e encaminhamos para uma função main().

Como autenticar na API

Antes de se comunicar com a API do Vision, você precisa autenticar seu serviço usando as credenciais já adquiridas. A maneira mais simples de receber credenciais em um aplicativo é usar o Application Default Credentials (ADC). A biblioteca de cliente recebe as credenciais automaticamente. Por padrão, isso é feito quando são recebidas as credenciais da variável de ambiente GOOGLE_APPLICATION_CREDENTIALS. Elas precisam ser configuradas para indicar o arquivo de chave JSON da sua conta de serviço. Para mais informações, consulte Configurar uma conta de serviço.

Como criar a solicitação

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

Agora que o serviço da Vision API está pronto, podemos criar uma solicitação para ele.

Esse snippet de código executa as seguintes tarefas:

  1. Cria uma instância ImageAnnotatorClient como o cliente.
  2. Cria um objeto Image a partir de um arquivo local ou um URI.
  3. Transmite o objeto Image ao método web_detection do cliente.
  4. Retorna as anotações.

Como imprimir a resposta

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

Após a conclusão da operação, abordamos o WebDetection e imprimimos as entidades e URLs contidos na anotação. Os dois principais resultados de cada tipo de anotação são mostrados na próxima seção.

Como executar o aplicativo

Para executar o aplicativo, transmitimos o URL http://www.photos-public-domain.com/wp-content/uploads/2011/01/old-vw-bug-and-van.jpg da imagem de carro a seguir.

Este é o comando Python com o URL da imagem de carro transmitido, seguido pela saída do console. A pontuação de relevância está localizada após a lista de entidades. As pontuações não são normalizadas ou comparáveis em diferentes consultas de imagem.

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

Parabéns! Você executou a detecção na Web usando a API Cloud Vision.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação da API Cloud Vision
Precisa de ajuda? Acesse nossa página de suporte.