Esercitazione: Trovare immagini simili da ricerche precedenti con ImageInsightsToken

Avviso

Il 30 ottobre 2020 le API di Ricerca Bing spostate dai servizi di intelligenza artificiale di Azure ai servizi Ricerca Bing. Questa documentazione viene fornita solo per informazioni di riferimento. Per la documentazione aggiornata, vedere la documentazione dell'API di ricerca Bing. Per istruzioni sulla creazione di nuove risorse di Azure per la ricerca Bing, vedere Creare una risorsa Ricerca Bing tramite la Azure Marketplace.

La libreria client di Ricerca visiva consente di trovare immagini online da ricerche precedenti che restituiscono ImageInsightsToken. Questa applicazione ottiene un oggetto ImageInsightsToken e usa il token in una ricerca successiva. Invia quindi ImageInsightsToken a Bing e restituisce risultati che includono gli URL di Ricerca Bing e gli URL di immagini simili trovate online.

Il codice sorgente completo per questa esercitazione, con l'aggiunta di annotazioni e della gestione degli errori, è disponibile in GitHub.

Prerequisiti

  • Qualsiasi edizione di Visual Studio 2019.
  • Se si usa Linux/MacOS, è possibile eseguire questa applicazione con Mono.
  • I pacchetti Ricerca visiva e Ricerca immagini NuGet.
    • 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 e il pacchetto Microsoft.Azure.CognitiveServices.Search.ImageSearch. Installando i pacchetti NuGet vengono anche installati gli elementi seguenti:
      • Microsoft.Rest.ClientRuntime
      • Microsoft.Rest.ClientRuntime.Azure
      • Newtonsoft.Json

Creare una risorsa di Azure

Per iniziare a usare l'API Ricerca visiva Bing, creare una delle seguenti risorse di Azure:

Risorsa Ricerca Bing v7

  • disponibile tramite il portale di Azure fino a quando la risorsa non viene eliminata.
  • Selezionare il piano tariffario S9.

Risorsa multi-servizio

  • disponibile tramite il portale di Azure fino a quando la risorsa non viene eliminata.
  • Usare la stessa chiave e l'endpoint per le applicazioni in più servizi di intelligenza artificiale di Azure.

Ottenere ImageInsightsToken dalla libreria client di Ricerca immagini Bing

Questa applicazione usa un oggetto ImageInsightsToken ottenuto tramite la libreria client di Ricerca immagini Bing. In una nuova applicazione console C# creare un client per chiamare l'API tramite ImageSearchClient(). Usare quindi SearchAsync() con la query:

var client = new ImageSearchClient(new Microsoft.Azure.CognitiveServices.Search.ImageSearch.ApiKeyServiceClientCredentials(subKey));
var imageResults = client.Images.SearchAsync(query: "canadian rockies").Result;
Console.WriteLine("Search images for query \"canadian rockies\"");

Archiviare il primo risultato di ricerca ottenuto usando imageResults.Value.First() e quindi archiviare l'ImageInsightsToken delle informazioni dettagliate sull'immagine.

String insightTok = "None";
if (imageResults.Value.Count > 0)
{
    var firstImageResult = imageResults.Value.First();
    insightTok = firstImageResult.ImageInsightsToken;
}
else
{
    insightTok = "None found";
    Console.WriteLine("Couldn't find image results!");
}

Questo ImageInsightsToken viene inviato a Ricerca visiva Bing in una richiesta.

Aggiungere l'oggetto ImageInsightsToken a una richiesta di Ricerca visiva

Specificare l'ImageInsightsToken per una richiesta di Ricerca visiva mediante la creazione di un oggetto ImageInfo dall'ImageInsightsToken contenuto nelle risposte di Ricerca visiva Bing.

ImageInfo ImageInfo = new ImageInfo(imageInsightsToken: insightsTok);

Usare Ricerca visiva Bing per trovare immagini da un oggetto ImageInsightsToken

L'oggetto VisualSearchRequest contiene informazioni sull'immagine nell'oggetto ImageInfo da cercare. Il metodo VisualSearchMethodAsync() ottiene i risultati. Non è necessario fornire un file binario di immagine, in quanto l'immagine è rappresentato dal token.

VisualSearchRequest VisualSearchRequest = new VisualSearchRequest(ImageInfo);

var visualSearchResults = client.Images.VisualSearchMethodAsync(knowledgeRequest: VisualSearchRequest).Result;

Eseguire un'iterazione sui risultati di Ricerca visiva

I risultati di Ricerca visiva 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. Ad esempio è possibile eseguire un'iterazione sugli oggetti ImageTag in visualSearchResults.Tags e ottenere il tag ImageAction al suo interno. L'esempio seguente stampa i dettagli delle azioni PagesIncluding:

if (visualSearchResults.Tags.Count > 0)
{
    // List of tags
    foreach (ImageTag t in visualSearchResults.Tags)
    {
        foreach (ImageAction i in t.Actions)
        {
            Console.WriteLine("\r\n" + "ActionType: " + i.ActionType + " WebSearchURL: " + i.WebSearchUrl);

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

PagesIncluding ActionTypes

Ottenere l'URL dell'immagine effettiva dai tipi di azione 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);
        }
    }

Per altre informazioni su questi tipi di dati, vedere Images - Visual Search (Immagini - Ricerca visiva).

URL restituiti

L'applicazione completa restituisce gli URL seguenti:

ActionType URL
MoreSizes -> WebSearchUrl
VisualSearch -> WebSearchUrl
ImageById -> WebSearchUrl
RelatedSearches -> WebSearchUrl:
DocumentLevelSuggestions -> WebSearchUrl:
TopicResults -> WebSearchUrl https://www.bing.com/cr?IG=3E32CC6CA5934FBBA14ABC3B2E4651F9& CID=1BA795A21EAF6A6A63175699B71FC36B7C&rd=1&h=BcQifmzdKFyyBusjLxxgO42kzq1Geh7RucVVqvvH-900&v=1&r=https%3a%2f%2fwww.bing.com%2fdiscover%2fcanadian%2fcanadian%2brocky&p=DevEx,5823.1
ImageResults -> WebSearchUrl https://www.bing.com/cr?IG=3E32CC6CA5934FBBA14ABC3B2E4651F9& CID=1BA795A21EAF6A6A63175699B71FC36B7C&rd=1&h=PV9GzMFOI0AHZp2gKeWJ8DcveSDRE3fP2jHDKMpJSU8&v=1&r=https%3a%2f%2fwww.bing.com%2fimages%2fsearch%3fq%3dmodel&p=DevEx,5831.1

Come mostrato sopra, i tipi TopicResults e ImageResults contengono query per le immagini correlate. Gli URL sono collegati ai risultati della ricerca Bing.

Passaggi successivi