Condividi tramite


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

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.
  • 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:

Team di leadership senior di Microsoft

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);
        }
    }

Passaggi successivi

Vedi anche

Informazioni sull'API Ricerca visiva Bing