Självstudie: Beskära en bild med SDK för visuell sökning i Bing för C#
Varning
Den 30 oktober 2020 flyttade API:erna för Bing Search från Azure AI-tjänster till Bing Search 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 Search-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 beskär en enda 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 Bing-sökning
- 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 Custom Search-paketet installeras även följande sammansättningar:- Microsoft.Rest.ClientRuntime
- Microsoft.Rest.ClientRuntime.Azure
- Newtonsoft.Json
- I Solution Explorer i Visual Studio högerklickar du på projektet och väljer Hantera NuGet-paket på menyn. Installera paketet
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:
- Tillgänglig via Azure Portal tills du tar bort resursen.
S9
Välj prisnivå.
- 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 området för bildgrödor
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:
Den här bilden beskärs genom att skapa ett ImageInfo
objekt från beskärningsområdet och läsa in ImageInfo
objektet i en VisualSearchRequest
. Objektet ImageInfo
innehåller även url:en för bilden:
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, vilket ä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 | webbadress |
---|---|
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=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 |
Som du ser ovan Entity
innehåller ActionType en Bing-sökfråga som returnerar information om en igenkännbar person, plats eller sak. TopicResults
- och ImageResults
-typerna innehåller frågor om relaterade bilder. URL:erna i listan länkar till Bings sökresultat.
Hämta URL:er för PagesIncluding
ActionType
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 omvandlar å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);
}
}