Detectar logotipos

A detecção de logotipos encontra logotipos de produtos famosos em uma imagem.

Logotipo do Google com anotação
Crédito da imagem: Robert Scoble (CC BY 2.0, anotação adicionada) [links em inglês].

Logotipo solicitações de detecção

Configurar autenticação e projeto do GCP

quickstart,gcloud_init vision.googleapis.com Cloud Vision API SERVICE_ACCOUNT True env_var

Detectar logotipos em uma imagem local

A API Vision pode realizar a detecção de recursos em um arquivo de imagem local enviando o conteúdo do arquivo de imagem como uma string codificada em base64 no corpo da sua solicitação.

REST e LINHA DE CMD

Antes de usar os dados de solicitação abaixo, faça as substituições a seguir:

  • base64-encoded-image: a representação em Base64 (string ASCII) dos dados da imagem binária. Essa string precisa ser semelhante à seguinte:
    • /9j/4QAYRXhpZgAA...9tAVx/zDQDlGxn//2Q==
    Para mais informações, consulte o tópico Codificação Base64.

Método HTTP e URL:

POST https://vision.googleapis.com/v1/images:annotate

Corpo JSON da solicitação:

    {
      "requests": [
        {
          "image": {
            "content": "base64-encoded-image"
          },
          "features": [
            {
              "type": "LOGO_DETECTION"
            },
          ]
        }
      ]
    }
    

Para enviar a solicitação, escolha uma destas opções:

curl

Salve o corpo da solicitação em um arquivo chamado request.json e execute o comando a seguir:

curl -X POST \
-H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
https://vision.googleapis.com/v1/images:annotate

PowerShell

Salve o corpo da solicitação em um arquivo chamado request.json e execute o comando a seguir:

$cred = gcloud auth application-default print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://vision.googleapis.com/v1/images:annotate" | Select-Object -Expand Content

Quando a solicitação é bem-sucedida, o servidor retorna um código de status HTTP 200 OK e a resposta no formato JSON.

Resposta:

    {
      "responses": [
        {
          "logoAnnotations": [
            {
              "mid": "/m/045c7b",
              "description": "google",
              "score": 0.980325,
              "boundingPoly": {
                "vertices": [
                  {
                    "x": 12,
                    "y": 42
                  },
                  {
                    "x": 439,
                    "y": 42
                  },
                  {
                    "x": 439,
                    "y": 285
                  },
                  {
                    "x": 12,
                    "y": 285
                  }
                ]
              }
            }
          ]
        }
      ]
    }
    

C#

Antes de testar esta amostra, siga as instruções de configuração do C# no Guia de início rápido da API do Vision: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do Vision para C# (em inglês).

// Load an image from a local file.
    var image = Image.FromFile(filePath);
    var client = ImageAnnotatorClient.Create();
    var response = client.DetectLogos(image);
    foreach (var annotation in response)
    {
        if (annotation.Description != null)
            Console.WriteLine(annotation.Description);
    }

Go

Antes de testar esta amostra, siga as instruções de configuração do Go no Guia de início rápido da API do Vision: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do Vision para Go (em inglês).


    // detectLogos gets logos from the Vision API for an image at the given file path.
    func detectLogos(w io.Writer, file string) error {
    	ctx := context.Background()

    	client, err := vision.NewImageAnnotatorClient(ctx)
    	if err != nil {
    		return err
    	}

    	f, err := os.Open(file)
    	if err != nil {
    		return err
    	}
    	defer f.Close()

    	image, err := vision.NewImageFromReader(f)
    	if err != nil {
    		return err
    	}
    	annotations, err := client.DetectLogos(ctx, image, nil, 10)
    	if err != nil {
    		return err
    	}

    	if len(annotations) == 0 {
    		fmt.Fprintln(w, "No logos found.")
    	} else {
    		fmt.Fprintln(w, "Logos:")
    		for _, annotation := range annotations {
    			fmt.Fprintln(w, annotation.Description)
    		}
    	}

    	return nil
    }
    

Java

Antes de testar esta amostra, siga as instruções de configuração do Java no Guia de início rápido da API do Vision: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do Vision para Java (em inglês).

public static void detectLogos(String filePath, PrintStream out) throws Exception, IOException {
      List<AnnotateImageRequest> requests = new ArrayList<>();

      ByteString imgBytes = ByteString.readFrom(new FileInputStream(filePath));

      Image img = Image.newBuilder().setContent(imgBytes).build();
      Feature feat = Feature.newBuilder().setType(Type.LOGO_DETECTION).build();
      AnnotateImageRequest request =
          AnnotateImageRequest.newBuilder().addFeatures(feat).setImage(img).build();
      requests.add(request);

      try (ImageAnnotatorClient client = ImageAnnotatorClient.create()) {
        BatchAnnotateImagesResponse response = client.batchAnnotateImages(requests);
        List<AnnotateImageResponse> responses = response.getResponsesList();

        for (AnnotateImageResponse res : responses) {
          if (res.hasError()) {
            out.printf("Error: %s\n", res.getError().getMessage());
            return;
          }

          // For full list of available annotations, see http://g.co/cloud/vision/docs
          for (EntityAnnotation annotation : res.getLogoAnnotationsList()) {
            out.println(annotation.getDescription());
          }
        }
      }
    }

Node.js

Antes de testar esta amostra, siga as instruções de configuração do Node.js no Guia de início rápido da API do Vision: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do Vision para Node.js (em inglês).

const vision = require('@google-cloud/vision');

    // Creates a client
    const client = new vision.ImageAnnotatorClient();

    /**
     * TODO(developer): Uncomment the following line before running the sample.
     */
    // const fileName = 'Local image file, e.g. /path/to/image.png';

    // Performs logo detection on the local file
    const [result] = await client.logoDetection(fileName);
    const logos = result.logoAnnotations;
    console.log('Logos:');
    logos.forEach(logo => console.log(logo));

PHP

Antes de testar esta amostra, siga as instruções de configuração do PHP no Guia de início rápido da API do Vision: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do Vision para PHP (em inglês).

namespace Google\Cloud\Samples\Vision;

    use Google\Cloud\Vision\V1\ImageAnnotatorClient;

    // $path = 'path/to/your/image.jpg'

    function detect_logo($path)
    {
        $imageAnnotator = new ImageAnnotatorClient();

        # annotate the image
        $image = file_get_contents($path);
        $response = $imageAnnotator->logoDetection($image);
        $logos = $response->getLogoAnnotations();

        printf('%d logos found:' . PHP_EOL, count($logos));
        foreach ($logos as $logo) {
            print($logo->getDescription() . PHP_EOL);
        }

        $imageAnnotator->close();
    }

Python

Antes de testar esta amostra, siga as instruções de configuração do Python no Guia de início rápido da API do Vision: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do Vision para Python (em inglês).

def detect_logos(path):
        """Detects logos in the file."""
        from google.cloud import vision
        import io
        client = vision.ImageAnnotatorClient()

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

        image = vision.types.Image(content=content)

        response = client.logo_detection(image=image)
        logos = response.logo_annotations
        print('Logos:')

        for logo in logos:
            print(logo.description)

        if response.error.message:
            raise Exception(
                '{}\nFor more info on error messages, check: '
                'https://cloud.google.com/apis/design/errors'.format(
                    response.error.message))

Ruby

Antes de testar esta amostra, siga as instruções de configuração do Ruby no Guia de início rápido da API do Vision: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do Vision para Ruby (em inglês).

# image_path = "Path to local image file, eg. './image.png'"

    require "google/cloud/vision"

    image_annotator = Google::Cloud::Vision::ImageAnnotator.new

    response = image_annotator.logo_detection image: image_path

    response.responses.each do |res|
      res.logo_annotations.each do |logo|
        puts logo.description
      end
    end

Detectar logotipos em uma imagem remota

Para sua conveniência, a API Vision pode realizar a detecção de recursos diretamente em um arquivo de imagem localizado no Google Cloud Storage ou na Web sem a necessidade de enviar o conteúdo do arquivo de imagem no corpo da solicitação.

REST e LINHA DE CMD

Antes de usar os dados de solicitação abaixo, faça as substituições a seguir:

  • cloud-storage-image-uri: o caminho para um arquivo de imagem válido em um intervalo do Cloud Storage. Você precisa ter, pelo menos, privilégios de leitura para o arquivo. Exemplo:
    • gs://cloud-samples-data/vision/logo/google_logo.jpg

Método HTTP e URL:

POST https://vision.googleapis.com/v1/images:annotate

Corpo JSON da solicitação:

    {
      "requests": [
        {
          "image": {
            "source": {
              "gcsImageUri": "cloud-storage-image-uri"
            }
          },
          "features": [
            {
              "type": "LOGO_DETECTION"
            },
          ]
        }
      ]
    }
    

Para enviar a solicitação, escolha uma destas opções:

curl

Salve o corpo da solicitação em um arquivo chamado request.json e execute o comando a seguir:

curl -X POST \
-H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
https://vision.googleapis.com/v1/images:annotate

PowerShell

Salve o corpo da solicitação em um arquivo chamado request.json e execute o comando a seguir:

$cred = gcloud auth application-default print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://vision.googleapis.com/v1/images:annotate" | Select-Object -Expand Content

Quando a solicitação é bem-sucedida, o servidor retorna um código de status HTTP 200 OK e a resposta no formato JSON.

Resposta:

    {
      "responses": [
        {
          "logoAnnotations": [
            {
              "mid": "/m/045c7b",
              "description": "google",
              "score": 0.980325,
              "boundingPoly": {
                "vertices": [
                  {
                    "x": 12,
                    "y": 42
                  },
                  {
                    "x": 439,
                    "y": 42
                  },
                  {
                    "x": 439,
                    "y": 285
                  },
                  {
                    "x": 12,
                    "y": 285
                  }
                ]
              }
            }
          ]
        }
      ]
    }
    

C#

Antes de testar esta amostra, siga as instruções de configuração do C# no Guia de início rápido da API do Vision: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do Vision para C# (em inglês).

// Specify a Google Cloud Storage uri for the image
    // or a publicly accessible HTTP or HTTPS uri.
    var image = Image.FromUri(uri);
    var client = ImageAnnotatorClient.Create();
    var response = client.DetectLogos(image);
    foreach (var annotation in response)
    {
        if (annotation.Description != null)
            Console.WriteLine(annotation.Description);
    }

Go

Antes de testar esta amostra, siga as instruções de configuração do Go no Guia de início rápido da API do Vision: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do Vision para Go (em inglês).


    // detectLogos gets logos from the Vision API for an image at the given file path.
    func detectLogosURI(w io.Writer, file string) error {
    	ctx := context.Background()

    	client, err := vision.NewImageAnnotatorClient(ctx)
    	if err != nil {
    		return err
    	}

    	image := vision.NewImageFromURI(file)
    	annotations, err := client.DetectLogos(ctx, image, nil, 10)
    	if err != nil {
    		return err
    	}

    	if len(annotations) == 0 {
    		fmt.Fprintln(w, "No logos found.")
    	} else {
    		fmt.Fprintln(w, "Logos:")
    		for _, annotation := range annotations {
    			fmt.Fprintln(w, annotation.Description)
    		}
    	}

    	return nil
    }
    

Java

Antes de testar esta amostra, siga as instruções de configuração do Java no Guia de início rápido da API do Vision: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do Vision para Java (em inglês).

public static void detectLogosGcs(String gcsPath, PrintStream out) throws Exception,
        IOException {
      List<AnnotateImageRequest> requests = new ArrayList<>();

      ImageSource imgSource = ImageSource.newBuilder().setGcsImageUri(gcsPath).build();
      Image img = Image.newBuilder().setSource(imgSource).build();
      Feature feat = Feature.newBuilder().setType(Type.LOGO_DETECTION).build();
      AnnotateImageRequest request =
          AnnotateImageRequest.newBuilder().addFeatures(feat).setImage(img).build();
      requests.add(request);

      try (ImageAnnotatorClient client = ImageAnnotatorClient.create()) {
        BatchAnnotateImagesResponse response = client.batchAnnotateImages(requests);
        List<AnnotateImageResponse> responses = response.getResponsesList();

        for (AnnotateImageResponse res : responses) {
          if (res.hasError()) {
            out.printf("Error: %s\n", res.getError().getMessage());
            return;
          }

          // For full list of available annotations, see http://g.co/cloud/vision/docs
          for (EntityAnnotation annotation : res.getLogoAnnotationsList()) {
            out.println(annotation.getDescription());
          }
        }
      }
    }

Node.js

Antes de testar esta amostra, siga as instruções de configuração do Node.js no Guia de início rápido da API do Vision: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do Vision para Node.js (em inglês).

// Imports the Google Cloud client libraries
    const vision = require('@google-cloud/vision');

    // Creates a client
    const client = new vision.ImageAnnotatorClient();

    /**
     * TODO(developer): Uncomment the following lines before running the sample.
     */
    // const bucketName = 'Bucket where the file resides, e.g. my-bucket';
    // const fileName = 'Path to file within bucket, e.g. path/to/image.png';

    // Performs logo detection on the gcs file
    const [result] = await client.logoDetection(`gs://${bucketName}/${fileName}`);
    const logos = result.logoAnnotations;
    console.log('Logos:');
    logos.forEach(logo => console.log(logo));

PHP

Antes de testar esta amostra, siga as instruções de configuração do PHP no Guia de início rápido da API do Vision: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do Vision para PHP (em inglês).

namespace Google\Cloud\Samples\Vision;

    use Google\Cloud\Vision\V1\ImageAnnotatorClient;

    // $path = 'gs://path/to/your/image.jpg'

    function detect_logo_gcs($path)
    {
        $imageAnnotator = new ImageAnnotatorClient();

        # annotate the image
        $response = $imageAnnotator->logoDetection($path);
        $logos = $response->getLogoAnnotations();

        printf('%d logos found:' . PHP_EOL, count($logos));
        foreach ($logos as $logo) {
            print($logo->getDescription() . PHP_EOL);
        }

        $imageAnnotator->close();
    }

Python

Antes de testar esta amostra, siga as instruções de configuração do Python no Guia de início rápido da API do Vision: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do Vision para Python (em inglês).

def detect_logos_uri(uri):
        """Detects logos in the file located in Google Cloud Storage or on the Web.
        """
        from google.cloud import vision
        client = vision.ImageAnnotatorClient()
        image = vision.types.Image()
        image.source.image_uri = uri

        response = client.logo_detection(image=image)
        logos = response.logo_annotations
        print('Logos:')

        for logo in logos:
            print(logo.description)

        if response.error.message:
            raise Exception(
                '{}\nFor more info on error messages, check: '
                'https://cloud.google.com/apis/design/errors'.format(
                    response.error.message))

Ruby

Antes de testar esta amostra, siga as instruções de configuração do Ruby no Guia de início rápido da API do Vision: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do Vision para Ruby (em inglês).

# image_path = "Google Cloud Storage URI, eg. 'gs://my-bucket/image.png'"

    require "google/cloud/vision"

    image_annotator = Google::Cloud::Vision::ImageAnnotator.new

    response = image_annotator.logo_detection image: image_path

    response.responses.each do |res|
      res.logo_annotations.each do |logo|
        puts logo.description
      end
    end

Comando gcloud

Para realizar a detecção da propriedade de imagem, use o comando gcloud ml vision detect-logos, como mostrado no exemplo a seguir:

    gcloud ml vision detect-logos gs://cloud-samples-data/vision/logo/google_logo.jpg
    

Testar

Teste a detecção de logotipos abaixo. É possível usar a imagem já especificada (gs://cloud-samples-data/vision/logo/google_logo.jpg) ou determinar sua própria imagem. Selecione Executar para enviar a solicitação.

Logotipo do Google com anotação
Crédito da imagem: Robert Scoble (CC BY 2.0, anotação adicionada) [links em inglês].