Tutorial: Recortar uma imagem com o SDK de Pesquisa Visual do Bing para C#

Aviso

A 30 de outubro de 2020, as APIs de Pesquisa do Bing passaram dos serviços de IA do Azure para os Serviços Pesquisa do Bing. Esta documentação é fornecida apenas para referência. Para obter documentação atualizada, veja a documentação da API de pesquisa do Bing. Para obter instruções sobre como criar novos recursos do Azure para a pesquisa do Bing, veja Criar um recurso de Pesquisa do Bing através do Azure Marketplace.

O SDK de Pesquisa Visual do Bing permite-lhe recortar uma imagem antes de encontrar imagens online semelhantes. Esta aplicação recorta uma única pessoa de uma imagem que contém várias pessoas e, em seguida, devolve os resultados da pesquisa que contêm imagens semelhantes encontradas online.

O código fonte completo para esta aplicação está disponível com processamento de erros e anotações adicionais no GitHub.

Este tutorial ilustra como:

  • Enviar um pedido com o SDK de Pesquisa Visual do Bing
  • Recortar uma área de imagem para procurar com a Pesquisa Visual do Bing
  • Receber e processar a resposta
  • Localizar os URLs dos itens de ação na resposta

Pré-requisitos

  • Qualquer edição do Visual Studio 2019.
  • Se estiver a utilizar o Linux/MacOS, esta aplicação pode ser executada com o Mono.
  • O pacote de Pesquisa Personalizada do NuGetinstalado.
    • No Explorador de Soluções no Visual Studio, clique com o botão direito do rato no projeto e selecione Gerir Pacotes NuGet no menu. Instale o pacote Microsoft.Azure.CognitiveServices.Search.CustomSearch. Quando instala o pacote de Pesquisa Personalizada do NuGet também instala as assemblagens seguintes:
      • Microsoft.Rest.ClientRuntime
      • Microsoft.Rest.ClientRuntime.Azure
      • Newtonsoft.Json

Criar um recurso do Azure

Comece a utilizar a API de Pesquisa Visual do Bing ao criar um dos seguintes recursos do Azure:

Pesquisa do Bing recurso v7

  • Disponível através do portal do Azure até eliminar o recurso.
  • Selecione o S9 escalão de preço.

Recurso de vários serviços

  • Disponível através do portal do Azure até eliminar o recurso.
  • Utilize a mesma chave e ponto final para as suas aplicações, em vários serviços de IA do Azure.

Especificar a área de recorte de imagem

Esta aplicação ressoa uma área desta imagem da equipa de liderança sénior da Microsoft. Esta área de recorte é definida com coordenadas superiores esquerda e inferior direita, representadas como uma percentagem de toda a imagem:

Equipa de Liderança Sénior da Microsoft

Esta imagem é recortada ao criar um ImageInfo objeto a partir da área de recorte e ao carregar o ImageInfo objeto para um VisualSearchRequest. O ImageInfo objeto também inclui o URL da imagem:

CropArea CropArea = new CropArea(top: (float)0.01, bottom: (float)0.30, left: (float)0.01, right: (float)0.20);
string imageURL = "https://learn.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);

Procurar imagens semelhantes à área de recorte

A variável VisualSearchRequest contém informações sobre a área de recorte da imagem e o respetivo URL. O VisualSearchMethodAsync() método 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

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

Pode imprimir os vários tipos com o seguinte código:

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

A aplicação concluída devolve:

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%2fwww.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%2fwww.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%2fwww.bing.com%2fimages%2fsearch%3fq%3dSatya%2bNadella&p=DevEx,5384.1

Conforme mostrado acima, o Entity ActionType contém uma consulta de pesquisa do Bing que devolve informações sobre uma pessoa, local ou coisa reconhecível. Os tipos TopicResults e ImageResults contêm consultas de imagens relacionadas. Os URLs na lista ligam aos resultados da pesquisa do Bing.

Obter URLs para PagesIncludingActionType imagens

Obter os URLs da imagem atual requer uma conversão que lê um ActionType como ImageModuleAction, que contém um elemento Data com uma lista de valores. Cada valor é o URL de uma imagem. O seguinte define 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);
        }
    }

Passos seguintes

Ver também

O que é a API de Pesquisa Visual do Bing?