Esercitazione: Ritagliare un'immagine con l’SDK Ricerca visiva Bing per C#
Avviso
Il 30 ottobre 2020, le API di Ricerca Bing sono state spostate dai Servizi di Azure AI ai servizi di Ricerca Bing. Questa documentazione è fornita solo come riferimento. Per la documentazione aggiornata, vedere la Documentazione dell'API di Ricerca Bing. Per istruzioni sulla creazione di nuove risorse di Azure per Ricerca Bing, vedere Creare una risorsa di Ricerca Bing tramite Azure Marketplace.
L'SDK di Ricerca visiva Bing consente di ritagliare un'immagine prima di trovare immagini online simili. Questa applicazione ritaglia una singola persona da un'immagine che contiene più persone e quindi restituisce risultati della ricerca che contengono immagini simili disponibili online.
Il codice sorgente completo per questa applicazione è disponibile in GitHub con annotazioni aggiuntive e altre informazioni sulla gestione degli errori.
Questa esercitazione illustra come:
- Inviare una richiesta usando l'SDK di Ricerca visiva Bing
- Ritagliare un'area dell'immagine da cercare con Ricerca visiva Bing
- Ricevere e gestire la risposta
- Trovare gli URL delle azioni nella risposta
Prerequisiti
- Qualsiasi edizione di Visual Studio 2019.
- Se si usa Linux/MacOS, questa applicazione può essere eseguita tramite Mono.
- Il pacchetto Ricerca personalizzata NuGet installato.
- In Esplora soluzioni in Visual Studio fare clic con il pulsante destro del mouse sul progetto e scegliere Gestisci pacchetti NuGet dal menu. Installare il pacchetto
Microsoft.Azure.CognitiveServices.Search.CustomSearch
. L'installazione del pacchetto Ricerca personalizzata NuGet comporta anche l'installazione degli assembly seguenti:- Microsoft.Rest.ClientRuntime
- Microsoft.Rest.ClientRuntime.Azure
- Newtonsoft.Json
- In Esplora soluzioni in Visual Studio fare clic con il pulsante destro del mouse sul progetto e scegliere Gestisci pacchetti NuGet dal menu. Installare il pacchetto
Creare una risorsa di Azure
Per iniziare a usare l'API Ricerca visiva Bing, creare una delle seguenti risorse di Azure:
- disponibile tramite il portale di Azure fino a quando la risorsa non viene eliminata.
- Selezionare il piano tariffario
S9
.
- disponibile tramite il portale di Azure fino a quando la risorsa non viene eliminata.
- Utilizzare la stessa chiave e lo stesso endpoint per le applicazioni nei vari servizi di Azure AI.
Specificare l'area di ritaglio dell'immagine
L'applicazione ritaglia un'area di questa immagine del team di dirigenti senior di Microsoft. L'area di ritaglio viene definita usando la coordinata superiore sinistra e quella inferiore destra, rappresentate come percentuale dell'intera immagine:
Questa immagine viene ritagliata mediante la creazione di un oggetto ImageInfo
dall'area di ritaglio dell'oggetto e il caricamento dell'oggetto ImageInfo
in un VisualSearchRequest
. L'oggetto ImageInfo
include anche l'URL dell'immagine:
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);
Cercare immagini simili all'area di ritaglio
La variabile VisualSearchRequest
contiene informazioni sull'area di ritaglio dell'immagine e il relativo URL. Il metodo VisualSearchMethodAsync()
ottiene i risultati:
Console.WriteLine("\r\nSending visual search request with knowledgeRequest that contains URL and crop area");
var visualSearchResults = client.Images.VisualSearchMethodAsync(knowledgeRequest: visualSearchRequest).Result;
Ottenere i dati dell'URL da ImageModuleAction
I risultati di Ricerca visiva Bing sono oggetti ImageTag
. Ogni tag contiene un elenco di oggetti ImageAction
. Ogni ImageAction
contiene un campo Data
costituito da un elenco di valori che dipendono dal tipo di azione.
È possibile stampare i vari tipi con il codice seguente:
Console.WriteLine("\r\n" + "ActionType: " + i.ActionType + " -> WebSearchUrl: " + i.WebSearchUrl);
L'applicazione completa restituisce:
ActionType | URL |
---|---|
PagesIncluding WebSearchURL | |
MoreSizes WebSearchURL | |
VisualSearch WebSearchURL | |
ImageById WebSearchURL | |
RelatedSearches WebSearchURL | |
Entità -> 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 |
Come mostrato sopra, Entity
ActionType contiene una query di ricerca Bing che restituisce informazioni relative a una persona, un luogo o un oggetto riconoscibile. I tipi TopicResults
e ImageResults
tipi contengono query per le immagini correlate. Gli URL nell'elenco sono collegati ai risultati della ricerca Bing.
Ottenere gli URL per le immagini PagesIncluding
ActionType
Ottenere l'URL dell'immagine effettiva richiede un cast che legge ActionType
come ImageModuleAction
, che contiene un elemento Data
con un elenco di valori. Ogni valore è l'URL di un'immagine. Questo codice esegue il cast del tipo di azione PagesIncluding
in ImageModuleAction
e legge i valori:
if (i.ActionType == "PagesIncluding")
{
foreach(ImageObject o in (i as ImageModuleAction).Data.Value)
{
Console.WriteLine("ContentURL: " + o.ContentUrl);
}
}