Esta página foi traduzida pela API Cloud Translation.
Switch to English

Tutorial sobre detecção na Web

Público-alvo

O objetivo deste tutorial é ajudar você a desenvolver aplicativos usando o recurso de detecção da Web da API Vision. Presumimos que você esteja familiarizado com construções e técnicas básicas de programação, mas mesmo se você for um programador iniciante, poderá acompanhar e executar este tutorial sem dificuldades e usar a documentação de referência da API Vision para criar aplicativos básicos.

Neste tutorial, discutimos sobre um aplicativo da API Vision e mostramos como fazer uma chamada a ela para usar o recurso de detecção na Web.

Pré-requisitos

Visão geral

Neste tutorial, apresentamos um aplicativo básico da API Vision que usa uma solicitação Web detection. Uma resposta Web detection anota a imagem enviada na solicitação com:

  • rótulos 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

Ao ler o código, recomendamos que você acompanhe a referência da API Vision para Python (em inglês).

import argparse
import io

from google.cloud import vision

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

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

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

        image = vision.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

Importamos bibliotecas padrão:

  • argparse para permitir que o aplicativo aceite nomes de arquivo de entrada como argumentos;
  • io para leitura de 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))

Neste caso, simplesmente analisamos o argumento transmitido que especifica o URL da imagem da Web e o transmitimos para a função main().

Como autenticar com a 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 = vision.Image()
    image.source.image_uri = path

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

    image = vision.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 para o 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ê realizou a detecção da Web usando a API Vision.