Tutorial: Zuschneiden eines Bilds mithilfe des Bing Visual Search SDK für C#
Warnung
Am 30. Oktober 2020 wurden die Bing-Suche-APIs aus Azure KI Services in die Bing-Suchdienste verschoben. Diese Dokumentation wird nur zu Referenzzwecken bereitgestellt. Eine aktualisierte Dokumentation finden Sie in der Dokumentation zu den Bing-Suche-APIs. Anweisungen zum Erstellen neuer Azure-Ressourcen für die Bing-Suche finden Sie unter Erstellen einer Ressource für die Bing-Suche über Azure Marketplace.
Mithilfe des Bing Visual Search SDK können Sie ein Bild vor der Suche nach ähnlichen Onlinebildern zuschneiden. Diese Anwendung schneidet ein Bild mit mehreren Personen auf eine einzelne Person zu und gibt anschließend Suchergebnisse mit ähnlichen Onlinebildern zurück.
Der vollständige Quellcode für diese Anwendung ist zusammen mit zusätzlichen Fehlerbehandlungen und Anmerkungen auf GitHub verfügbar.
In diesem Tutorial wird Folgendes veranschaulicht:
- Senden einer Anforderung unter Verwendung des Bing Visual Search SDK
- Zuschneiden eines Bildbereichs für die Suche mit der visuellen Bing-Suche
- Empfangen und Verarbeiten der Antwort
- Suchen nach den URLs von Aktionselementen in der Antwort
Voraussetzungen
- Eine beliebige Edition von Visual Studio 2019.
- Unter Linux/macOS kann diese Anwendung mit Mono ausgeführt werden
- Ein installiertes NuGet-Paket für die benutzerdefinierte Suche.
- Klicken Sie im Projektmappen-Explorer in Visual Studio mit der rechten Maustaste auf Ihr Projekt, und wählen Sie im Menü NuGet-Pakete verwalten aus. Installieren Sie das
Microsoft.Azure.CognitiveServices.Search.CustomSearch
-Paket. Beim Installieren des NuGet Custom Search-Pakets werden auch die folgenden Assemblys installiert:- Microsoft.Rest.ClientRuntime
- Microsoft.Rest.ClientRuntime.Azure
- Newtonsoft.Json
- Klicken Sie im Projektmappen-Explorer in Visual Studio mit der rechten Maustaste auf Ihr Projekt, und wählen Sie im Menü NuGet-Pakete verwalten aus. Installieren Sie das
Erstellen einer Azure-Ressource
Beginnen Sie mit der Verwendung der API für die visuelle Bing-Suche, indem Sie eine der folgenden Azure-Ressourcen erstellen:
- Verfügbar über das Azure-Portal, bis Sie die Ressource löschen.
- Wählen Sie den
S9
-Tarif aus.
- Verfügbar über das Azure-Portal, bis Sie die Ressource löschen.
- Verwenden Sie in allen Azure KI Services-Instanzen denselben Schlüssel und Endpunkt für Ihre Anwendungen.
Angeben des Bereichs für den Bildzuschnitt
Diese Anwendung schneidet das Bild des Führungsteams von Microsoft auf einen bestimmten Bereich zu. Der Zuschneidebereich wird durch eine linke obere und eine rechte untere Koordinate definiert und als Prozentsatz des Gesamtbilds dargestellt:
Zum Zuschneiden des Bilds wird anhand des Zuschneidebereichs ein Objekt vom Typ ImageInfo
erstellt, und das Objekt ImageInfo
wird in ein Element vom Typ VisualSearchRequest
geladen. Das Objekt ImageInfo
enthält auch die URL des Bilds:
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);
Suchen nach Bildern, die dem Zuschneidebereich ähneln
Die Variable VisualSearchRequest
enthält Informationen zum Zuschneidebereich des Bilds sowie die dazugehörige URL: Mit der VisualSearchMethodAsync()
-Methode werden die Ergebnisse abgerufen:
Console.WriteLine("\r\nSending visual search request with knowledgeRequest that contains URL and crop area");
var visualSearchResults = client.Images.VisualSearchMethodAsync(knowledgeRequest: visualSearchRequest).Result;
Rufen Sie die URL-Daten von ImageModuleAction
ab
Die Ergebnisse der visuellen Bing-Suche sind Objekte vom Typ ImageTag
. Jedes Tag enthält eine Liste mit ImageAction
-Objekten. Jedes Objekt vom Typ ImageAction
enthält ein Feld vom Typ Data
. Hierbei handelt es sich um eine Liste mit Werten, die von der Art der Aktion abhängen.
Sie können die unterschiedlichen Arten mit dem folgenden Code ausgeben:
Console.WriteLine("\r\n" + "ActionType: " + i.ActionType + " -> WebSearchUrl: " + i.WebSearchUrl);
Die vollständige Anwendung gibt Folgendes zurück:
ActionType | URL |
---|---|
PagesIncluding WebSearchURL | |
MoreSizes WebSearchURL | |
VisualSearch WebSearchURL | |
ImageById WebSearchURL | |
RelatedSearches WebSearchURL | |
Entity > 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 |
Wie oben zu sehen, enthält der Aktionstyp Entity
eine Bing-Suchabfrage, die Informationen zu einer erkennbaren Person, einem Ort oder einem Gegenstand zurückgibt. Die Typen TopicResults
und ImageResults
enthalten Abfragen für verwandte Bilder. Die URLs in der Liste sind Verknüpfungen zu Bing-Suchergebnissen.
Abrufen von URLs für Bilder vom Typ PagesIncluding
ActionType
Zum Abrufen der eigentlichen Bild-URLs ist eine Umwandlung erforderlich, bei der ein ActionType
-Element als ImageModuleAction
gelesen wird, das ein Data
-Element mit einer Werteliste enthält. Jeder Wert ist die URL eines Bilds. Im Folgenden wird der Aktionstyp PagesIncluding
in ImageModuleAction
umgewandelt, und die Werte werden gelesen:
if (i.ActionType == "PagesIncluding")
{
foreach(ImageObject o in (i as ImageModuleAction).Data.Value)
{
Console.WriteLine("ContentURL: " + o.ContentUrl);
}
}