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
- 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
Criar um recurso do Azure
Comece a utilizar a API de Pesquisa Visual do Bing ao criar um dos seguintes recursos do Azure:
- Disponível através do portal do Azure até eliminar o recurso.
- Selecione o
S9
escalão de preço.
- 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:
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 PagesIncluding
ActionType
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);
}
}