Freigeben über


Lernprogramm: Extrahieren von Bilddetails mithilfe der Bing Image Search-API und C#

Warnung

Am 30. Oktober 2020 wurden die Bing Search-APIs von Azure AI-Diensten zu Bing Search Services verschoben. Diese Dokumentation wird nur zur Referenz 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.

Es sind mehrere Endpunkte über die Bing Image Search-API verfügbar. Der /details Endpunkt akzeptiert eine POST-Anforderung mit einem Bild und kann eine Vielzahl von Details zum Bild zurückgeben. Diese C#-Anwendung sendet ein Bild mit dieser API und zeigt die von Bing zurückgegebenen Details an, die JSON-Objekte sind, z. B. folgendes:

[JSON-Ergebnisse]

In diesem Tutorial werden folgende Punkte erläutert:

  • Verwenden des Bildsuche-Endpunkts /details in einer POST Anforderung
  • Angeben von Headern für die Anforderung
  • Verwenden von URL-Parametern zum Angeben von Ergebnissen
  • Hochladen der Bilddaten und Senden der POST Anforderung
  • Gebe die JSON-Ergebnisse in der Konsole aus

Voraussetzungen

Erstellen einer Suchanforderung für Bilddetails

Es folgt der /details Endpunkt, der POST-Anforderungen mit Bilddaten im Anforderungstext akzeptiert. Sie können den folgenden globalen Endpunkt oder den benutzerdefinierten Unterdomänen- Endpunkt 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 Arten von Details an, die die Ergebnisse enthalten:

  • modules=All
  • modules=RecognizedEntities (Personen oder Orte, die im Bild sichtbar sind)

Geben Sie modules=All in der POST-Anforderung an, um JSON-Text abzurufen, der Folgendes enthält:

  • bestRepresentativeQuery – eine Bing-Abfrage, die Bilder zurückgibt, die dem hochgeladenen Bild ähneln
  • detectedObjects - Objekte, die im Bild gefunden wurden
  • image - Metadaten für das Bild
  • imageInsightsToken – ein Token für eine spätere GET-Anforderung, mit der (Personen oder Orte, die im Bild sichtbar sind) aus dem Bild abgerufen werden RecognizedEntities.
  • imageTags - Tags für das Bild
  • pagesIncluding - Webseiten, die das Bild enthalten
  • relatedSearches - Sucht anhand von Details im Bild.
  • visuallySimilarImages - ähnliche Bilder im Web.

Geben Sie modules=RecognizedEntities in der POST-Anforderung an, nur abzurufen imageInsightsToken, die in einer nachfolgenden GET-Anforderung verwendet werden kann, 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 Kopfzeilen fest. Alle Anforderungen an die Bing Search-API erfordern eine Ocp-Apim-Subscription-Key. Eine POST Anforderung zum Hochladen eines Bilds muss auch angegeben ContentType: multipart/form-datawerden.

WebClient client = new WebClient();
client.Headers["Ocp-Apim-Subscription-Key"] = accessKey;
client.Headers["ContentType"] = "multipart/form-data";

Laden Sie das Bild hoch, und zeigen Sie die Ergebnisse an.

Die WebClient-Methode der UpLoadFile()-Klasse formatiert Daten für die POST-Anforderung, einschließlich der Formatierung von RequestStream und dem Aufrufen von HttpWebRequest.

Rufen Sie WebClient.UpLoadFile() mit dem /details Endpunkt und der hochzuladenden Bilddatei auf. Verwenden Sie die JSON-Antwort, um eine Instanz der SearchResult Struktur zu initialisieren und die Antwort zu speichern.

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 die Konsole gedruckt werden.

Verwenden Sie ein Bild-Einsicht-Token in einer Anforderung

Um die ImageInsightsToken zurückgegebenen Ergebnisse einer POSTAnforderung zu verwenden, können Sie sie 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, gibt diese Anforderung Informationen zu ihnen zurück.

Nächste Schritte

Siehe auch