Tutorial: Recortar uma imagem no SDK da Pesquisa Visual do Bing para C#
Aviso
Em 30 de outubro de 2020, as APIs de Pesquisa do Bing foram migradas dos serviços de IA do Azure para os Serviços de Pesquisa do Bing. Esta documentação é fornecida apenas para referência. Para obter a documentação atualizada, consulte 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, consulte Criar um recurso de Pesquisa do Bing por meio do Azure Marketplace.
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 de Pesquisa Personalizada do NuGet também instala os seguintes assemblies:- Microsoft.Rest.ClientRuntime
- Microsoft.Rest.ClientRuntime.Azure
- Newtonsoft.Json
- 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
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
.
- 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 nos vários serviços de IA do Azure.
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:
Essa imagem é cortada, criando um ImageInfo
objeto 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://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);
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%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 |
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 aos 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);
}
}