Dela via


Självstudie: Beskär en bild med SDK för visuell sökning i Bing för C#

Varning

Den 30 oktober 2020 flyttade Bing-sökning API:er från Azure AI-tjänster till Bing-sökning Services. Den här dokumentationen tillhandahålls endast som referens. Uppdaterad dokumentation finns i dokumentationen för API:et för Bing-sökning. Anvisningar om hur du skapar nya Azure-resurser för Bing-sökning finns i Skapa en Bing-sökning resurs via Azure Marketplace.

Med SDK för visuell sökning i Bing kan du beskära en bild innan du hittar liknande onlinebilder. Det här programmet visar en enskild person från en bild som innehåller flera personer och returnerar sedan sökresultat som innehåller liknande bilder som finns online.

Den fullständiga källkoden för det här programmet är tillgänglig med ytterligare felhantering och anteckningar på GitHub.

Den här självstudien visar hur du:

  • Skicka en begäran med hjälp av SDK för visuell sökning i Bing
  • Beskär ett bildområde för att söka med visuell sökning i Bing
  • Ta emot och hantera svaret
  • Hitta URL:er för åtgärdsobjekt i svaret

Förutsättningar

  • Alla utgåvor av Visual Studio 2019.
  • Om du använder Linux/Mac OS kan det här programmet köras med Mono.
  • NuGet-paketet för anpassad sökning installerat.
    • I Solution Explorer i Visual Studio högerklickar du på projektet och väljer Hantera NuGet-paket på menyn. Installera paketet Microsoft.Azure.CognitiveServices.Search.CustomSearch. När du installerar NuGet-paketet för anpassad sökning installeras även följande sammansättningar:
      • Microsoft.Rest.ClientRuntime
      • Microsoft.Rest.ClientRuntime.Azure
      • Newtonsoft.Json

Skapa en Azure-resurs

Börja använda API:et för visuell sökning i Bing genom att skapa någon av följande Azure-resurser:

Bing-sökning v7-resurs

  • Tillgänglig via Azure Portal tills du tar bort resursen.
  • S9 Välj prisnivå.

Resurs för flera tjänster

  • Tillgänglig via Azure Portal tills du tar bort resursen.
  • Använd samma nyckel och slutpunkt för dina program i flera Azure AI-tjänster.

Ange bildområdet för beskärning

Det här programmet beskär ett område i den här bilden av Microsofts ledningsgrupp. Det här beskärningsområdet definieras med hjälp av koordinaterna uppe till vänster och längst ned till höger, som representeras som en procentandel av hela bilden:

Microsofts chefsteam

Den här bilden beskärs genom att skapa ett ImageInfo objekt från beskärningsområdet och läsa in objektet ImageInfo i en VisualSearchRequest. Objektet ImageInfo innehåller även bildens URL:

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

Sök efter bilder som liknar beskärningsområdet

Variabeln VisualSearchRequest innehåller information om bildens beskärningsområde och dess URL. Metoden VisualSearchMethodAsync() hämtar resultatet:

Console.WriteLine("\r\nSending visual search request with knowledgeRequest that contains URL and crop area");
var visualSearchResults = client.Images.VisualSearchMethodAsync(knowledgeRequest: visualSearchRequest).Result;

Hämta URL-data från ImageModuleAction

Visuella sökresultat i Bing är ImageTag objekt. Varje tagg innehåller en lista med ImageAction-objekt. Var och ImageAction en innehåller ett Data fält, som är en lista med värden som är beroende av typen av åtgärd.

Du kan skriva ut de olika typerna med följande kod:

Console.WriteLine("\r\n" + "ActionType: " + i.ActionType + " -> WebSearchUrl: " + i.WebSearchUrl);

Hela programmet returnerar:

ActionType URL
PagesIncluding WebSearchURL
MoreSizes WebSearchURL
VisualSearch WebSearchURL
ImageById WebSearchURL
RelatedSearches WebSearchURL
Entitet –> WebSearchUrl https://www.bing.com/cr?IG=E40D0E1A13404994ACB073504BC937A4& CID=03DCF882D7386A442137F49BD6596BEF&rd=1&h=BvvDoRtmZ35Xc_UZE4lZx6_eg7FHgcCkigU1D98NHQo&v=1&r=http %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&=1&r=https%3a%2f%2fwww.bing.com%2fimages%2fsearch%3fq%3dSatya%2bNadella&p=DevEx,5384.1

Som du ser ovan Entity innehåller ActionType en Bing-sökfråga som returnerar information om en identifierbar person, plats eller sak. TopicResults- och ImageResults-typerna innehåller frågor om relaterade bilder. URL:erna i listan länkar till Bing-sökresultat.

Hämta URL:er för PagesIncludingActionType bilder

Att hämta de faktiska bild-URL:erna kräver en omvandling som läser en ActionType som ImageModuleAction, vilken innehåller ett Data-element med en lista med värden. Varje värde är URL:en till en bild. Följande kastar åtgärdstypen PagesIncluding till ImageModuleAction och läser värdena:

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

Nästa steg

Se även

Vad är API:et för visuell sökning i Bing?