Tutorial: Extrahieren von Bilddetails mit der Bing-Bildersuche-API und C#
Warnung
Am 30. Oktober 2020 wurden die Bing-Suche-APIs aus den 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.
Die Bing-Bildersuche-API stellt mehrere Endpunkte zur Verfügung. Der /details
-Endpunkt akzeptiert eine POST-Anforderung mit einem Bild und kann zahlreiche Bilddetails zurückgegeben. Diese C#-Anwendung sendet ein Bild über diese API und zeigt die von Bing zurückgegebenen Details an, die JSON-Objekte sind, wie beispielsweise:
In diesem Tutorial werden folgende Punkte erläutert:
- Verwenden des
/details
-Endpunkts der Bildersuche in einerPOST
-Anforderung - Angeben von Headern für die Anforderung
- Verwenden von URL-Parametern, um Ergebnisse anzugeben
- Hochladen der Bilddaten und senden der
POST
-Anforderung - Ausgeben von JSON-Ergebnisse an die Konsole
Voraussetzungen
- Eine beliebige Edition von Visual Studio 2017 oder höher.
Erstellen einer Suchanforderung für Bilddetails
Im Folgenden finden Sie den /details
-Endpunkt, der POST-Anforderungen mit Bilddaten im Anforderungstext akzeptiert. Sie können den unten angegebenen globalen Endpunkt oder den Endpunkt der benutzerdefinierten Unterdomäne verwenden, der im Azure-Portal für Ihre Ressource angezeigt wird.
https://api.cognitive.microsoft.com/bing/v7.0/images/details
Beim Erstellen der Suchanforderungs-URL, folgt der modules
-Parameter dem obigen Endpunkt und gibt die Art der Details an, die die Ergebnisse enthalten sollen:
modules=All
-
modules=RecognizedEntities
(im Bild sichtbare Personen oder Orte)
Geben Sie modules=All
in der POST-Anforderung an, um JSON-Text mit den folgenden Angaben abzurufen:
-
bestRepresentativeQuery
-eine Bing-Abfrage, die ähnliche Bilder wie das hochgeladene Bild zurückgibt -
detectedObjects
– ein im Bild gefundenes Objekt -
image
– Metadaten des Bildes -
imageInsightsToken
– ein Token für eine spätere GET-Anforderung, dasRecognizedEntities
(im Bild sichtbare Personen oder Orte) aus dem Bild abruft -
imageTags
– Tags des Bildes -
pagesIncluding
-Webseiten, die das Bild enthalten -
relatedSearches
– Suchvorgänge basierend auf Bilddetails -
visuallySimilarImages
– ähnliche Bilder im Web
Geben Sie modules=RecognizedEntities
in der POST-Anforderung an, um nur imageInsightsToken
abzurufen. Dieses Objekt kann in einer nachfolgenden GET-Anforderung verwendet werden, um Personen oder Orte im Bild zu identifizieren.
Erstellen eines WebClient-Objekts und Festlegen von Headern für die API-Anforderung
Erstellen Sie ein WebClient
-Objekt, und legen Sie die Header fest. Für alle Anforderungen an die Bing-Suche-API ist ein Ocp-Apim-Subscription-Key
erforderlich. Eine POST
-Anforderung zum Hochladen eines Bildes muss außerdem ContentType: multipart/form-data
angeben.
WebClient client = new WebClient();
client.Headers["Ocp-Apim-Subscription-Key"] = accessKey;
client.Headers["ContentType"] = "multipart/form-data";
Hochladen des Bildes und Anzeigen der Ergebnisse
Die Methode UpLoadFile()
der Klasse WebClient
formatiert Daten für die POST
-Anforderung, einschließlich der Formatierung von RequestStream
und des Aufrufs von HttpWebRequest
.
Rufen Sie WebClient.UpLoadFile()
mit dem /details
-Endpunkt und der hochzuladende Bilddatei ab. Verwenden Sie die JSON-Antwort zum Initialisieren einer Instanz der SearchResult
-Struktur, und speichern Sie die Antwort.
const string uriBase = "https://api.cognitive.microsoft.com/bing/v7.0/images/details";
// The image to upload. Replace with your file and path.
const string imageFile = "your-image.jpg";
byte[] resp = client.UploadFile(uriBase + "?modules=All", imageFile);
var json = System.Text.Encoding.Default.GetString(resp);
// Create result object for return
var searchResult = new SearchResult()
{
jsonResult = json,
relevantHeaders = new Dictionary<String, String>()
};
Diese JSON-Antwort kann dann in der Konsole ausgegeben werden.
Verwenden von ImageInsightsToken in einer Anforderung
Um das ImageInsightsToken
-Objekt zu verwenden, das mit den Ergebnissen von POST
zurückgegeben wird, können Sie es einer GET
-Anforderung hinzufügen. Beispiel:
https://api.cognitive.microsoft.com/bing/v7.0/images/details?InsightsToken="bcid_A2C4BB81AA2C9EF8E049C5933C546449*ccid_osS7gaos*mid_BF7CC4FC4A882A3C3D56E644685BFF7B8BACEAF2
Wenn es identifizierbare Personen oder Orte im Bild gibt, wird diese Anforderung Informationen über sie zurückgeben.