Tutorial: Recortar uma imagem no SDK da Pesquisa Visual do Bing para C#

Aviso

As APIs de Pesquisa do Bing estão migrando dos Serviços Cognitivos para os Serviços de Pesquisa do Bing. A partir de 30 de outubro de 2020, todas as novas instâncias da Pesquisa do Bing precisaram ser provisionadas seguindo o processo documentado aqui. As APIs de Pesquisa do Bing provisionadas por meio dos Serviços Cognitivos terão suporte nos próximos três anos ou até o final do seu Contrato Enterprise, o que ocorrer primeiro. Para obter instruções sobre a migração, confira Serviços de Pesquisa do Bing.

O SDK da Pesquisa Visual do Bing permite recortar uma imagem antes de localizar imagens online semelhantes. Esse aplicativo recorta uma única pessoa a partir de uma imagem que contém várias pessoas e, em seguida, retorna resultados que contêm imagens semelhantes encontradas online.

O código-fonte completo desse aplicativo está disponível com anotações e tratamento de erro adicionais no GitHub.

Esse tutorial ilustra como:

  • Enviar uma solicitação usando o SDK da Pesquisa Visual do Bing
  • Recortar uma área de imagem para pesquisar com a Pesquisa Visual do Bing
  • Receber e lidar com a resposta
  • Encontrar as URLs de itens de ação na resposta

Pré-requisitos

  • Qualquer edição do Visual Studio 2019.
  • Se você estiver usando Linux/MacOS, este aplicativo poderá ser executado usando Mono.
  • O pacote Pesquisa Personalizada do NuGet instalado.
    • No Gerenciador de Soluções do Visual Studio, clique com o botão direito do mouse no seu projeto e selecione Gerenciar Pacotes do NuGet no menu. Instale o pacote Microsoft.Azure.CognitiveServices.Search.CustomSearch. A instalação do pacote Pesquisa Personalizada do NuGet também instala os assemblies a seguir:
      • Microsoft.Rest.ClientRuntime
      • Microsoft.Rest.ClientRuntime.Azure
      • Newtonsoft.Json

Criar um recurso do Azure

Comece a usar a API da Pesquisa Visual do Bing criando um dos seguintes recursos do Azure:

Recurso de Pesquisa do Bing v7

  • Disponível por meio do portal do Azure até que você exclua o recurso.
  • Selecione o tipo de preço S9.

Recurso de vários serviços

  • Disponível por meio do portal do Azure até que você exclua o recurso.
  • Use a mesma chave e ponto de extremidade para seus aplicativos em vários Serviços Cognitivos.

Especificar a área de imagem recortada

Este aplicativo corta uma área da imagem do Time de liderança sênior Microsoft. Essa área de corte é definida usando as coordenadas do canto superior esquerdo e inferior direito, representadas como um percentual da imagem inteira:

Time de Liderança Sênior Microsoft

Essa imagem é cortada, criando um ImageInfoobjeto da área de corte e carrega o ImageInfo objeto em um VisualSearchRequest. O objeto ImageInfo também inclui a URL de uma imagem:

CropArea CropArea = new CropArea(top: (float)0.01, bottom: (float)0.30, left: (float)0.01, right: (float)0.20);
string imageURL = "https://docs.microsoft.com/azure/cognitive-services/bing-visual-search/media/ms_srleaders.jpg";
ImageInfo imageInfo = new ImageInfo(cropArea: CropArea, url: imageURL);

VisualSearchRequest visualSearchRequest = new VisualSearchRequest(imageInfo: imageInfo);

Procure por imagens similares à área de corte

A variável VisualSearchRequest contém informações sobre a área de corte da imagem e sua URL. O método VisualSearchMethodAsync() obtém os resultados:

Console.WriteLine("\r\nSending visual search request with knowledgeRequest that contains URL and crop area");
var visualSearchResults = client.Images.VisualSearchMethodAsync(knowledgeRequest: visualSearchRequest).Result;

Obter os dados de URL de ImageModuleAction

Resultados de Pesquisa Visual do Bing são objetos ImageTag. Cada etiqueta contém uma lista de ImageAction objetos. Cada ImageAction contém um campo Data que é uma lista de valores que dependem do tipo de ação.

Você consegue imprimir vários tipos com o seguinte código:

Console.WriteLine("\r\n" + "ActionType: " + i.ActionType + " -> WebSearchUrl: " + i.WebSearchUrl);

A aplicação completa retorna:

ActionType URL
PagesIncluding WebSearchURL
MoreSizes WebSearchURL
VisualSearch WebSearchURL
ImageById WebSearchURL
RelatedSearches WebSearchURL
Entidade -> WebSearchUrl https://www.bing.com/cr?IG=E40D0E1A13404994ACB073504BC937A4&CID=03DCF882D7386A442137F49BD6596BEF&rd=1&h=BvvDoRtmZ35Xc_UZE4lZx6_eg7FHgcCkigU1D98NHQo&v=1&r=https%3a%2f%2f www.bing.com%2fsearch%3fq%3dSatya%2bNadella&p=DevEx,5380.1
TopicResults -> WebSearchUrl https://www.bing.com/cr?IG=E40D0E1A13404994ACB073504BC937A4&CID=03DCF882D7386A442137F49BD6596BEF&rd=1&h=3QGtxPb3W9LemuHRxAlW4CW7XN4sPkUYCUynxAqI9zQ&v=1&r=https%3a%2f%2f www.bing.com%2fdiscover%2fnadella%2bsatya&p=DevEx,5382.1
ImageResults -> WebSearchUrl https://www.bing.com/cr?IG=E40D0E1A13404994ACB073504BC937A4&CID=03DCF882D7386A442137F49BD6596BEF&rd=1&h=l-WNHO89Kkw69AmIGe2MhlUp6MxR6YsJszgOuM5sVLs&v=1&r=https%3a%2f%2f www.bing.com%2fimages%2fsearch%3fq%3dSatya%2bNadella&p=DevEx,5384.1

Como mostrado acima, o ActionType Entity contém uma consulta de Pesquisa do Bing que retorna informação sobre uma pessoa reconhecida, lugar ou coisa. Os tipos TopicResults e ImageResults contêm consultas para imagens relacionadas. As URLs na lista vinculam os resultados de pesquisa do Bing.

Obter URLs para imagens PagesIncluding ActionType

Obter as URLs de imagem real requer que uma conversão que lê um ActionType como ImageModuleAction, que contém um Data elemento com uma lista de valores. Cada valor é a URL de uma imagem. O seguinte converte o tipo de ação PagesIncluding para ImageModuleAction e lê os valores:

    if (i.ActionType == "PagesIncluding")
    {
        foreach(ImageObject o in (i as ImageModuleAction).Data.Value)
        {
            Console.WriteLine("ContentURL: " + o.ContentUrl);
        }
    }

Próximas etapas

Confira também

O que é a API da Pesquisa Visual do Bing?