Samouczek: wyodrębnianie szczegółów obrazu przy użyciu interfejs API wyszukiwania obrazów Bing i języka C#

Ostrzeżenie

30 października 2020 r. interfejsy API Wyszukiwanie Bing zostały przeniesione z usług Azure AI do usług Wyszukiwanie Bing Services. Ta dokumentacja jest udostępniana tylko do celów referencyjnych. Aby uzyskać zaktualizowaną dokumentację, zobacz dokumentację interfejsu API wyszukiwania Bing. Aby uzyskać instrukcje dotyczące tworzenia nowych zasobów platformy Azure na potrzeby wyszukiwania Bing, zobacz Tworzenie zasobu Wyszukiwanie Bing za pośrednictwem Azure Marketplace.

Interfejs API wyszukiwania obrazów Bing udostępnia wiele punktów końcowych. Punkt końcowy /details akceptuje żądania POST z obrazem i może zwracać różnorodne szczegółowe informacje o tym obrazie. Ta aplikacja języka C# wysyła obraz przy użyciu tego interfejsu API i wyświetla szczegółowe informacje zwrócone przez usługę Bing, które są obiektami JSON, takimi jak poniższe:

[Wyniki JSON]

W tym samouczku wyjaśniono:

  • Używanie punktu końcowego /details wyszukiwania obrazów w żądaniu POST
  • Określanie nagłówków żądania
  • Określanie wyników przy użyciu parametrów adresu URL
  • Przekazywanie danych obrazu i wysyłanie żądania POST
  • Drukowanie w konsoli wyników w formacie JSON

Wymagania wstępne

Konstruowanie żądania wyszukiwania szczegółów obrazu

Poniżej przedstawiono punkt końcowy /details, który akceptuje żądania POST z danymi obrazu w treści żądania. Możesz użyć globalnego punktu końcowego poniżej lub niestandardowego punktu końcowego poddomeny wyświetlanego w Azure Portal dla zasobu.

https://api.cognitive.microsoft.com/bing/v7.0/images/details

Podczas tworzenia adresu URL żądania wyszukiwania parametr modules śledzi powyższy punkt końcowy i określa typy szczegółowych informacji, które będą zawarte w wynikach:

  • modules=All
  • modules=RecognizedEntities (osoby lub miejsca widoczne na obrazie)

Określ parametr modules=All w żądaniu POST, aby uzyskać tekst JSON, który zawiera następujące elementy:

  • bestRepresentativeQuery — zapytanie Bing, które zwraca obrazy podobne do przekazanego obrazu
  • detectedObjects — obiekty znajdujące się na obrazie
  • image — metadane obrazu
  • imageInsightsToken — token dla późniejszych żądań GET, które pobierają z obrazu elementy RecognizedEntities (osoby lub miejsca widoczne na obrazie).
  • imageTags — tagi dla obrazu
  • pagesIncluding — strony internetowe, które zawierają obraz
  • relatedSearches — wyszukiwania oparte na szczegółach obrazu.
  • visuallySimilarImages — podobne obrazy w Internecie.

Określ parametr modules=RecognizedEntities w żądaniu POST, aby pobrać tylko element imageInsightsToken, który może zostać użyty w następującym później żądaniu GET w celu zidentyfikowania osób lub miejsc na obrazie.

Tworzenie obiektu WebClient i ustawianie nagłówków dla żądania interfejsu API

Utwórz obiekt WebClient, a następnie ustaw nagłówki. Wszystkie żądania do interfejsu API wyszukiwania Bing wymagają klucza Ocp-Apim-Subscription-Key. Żądanie POST przekazania obrazu musi także określać ContentType: multipart/form-data.

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

Przekazywanie obrazu i wyświetlanie wyników

Metoda UpLoadFile() klasy WebClient formatuje dane dla żądania POST z uwzględnieniem formatowania RequestStream i wywoływania HttpWebRequest.

Wywołaj funkcję WebClient.UpLoadFile() z punktem końcowym /details i plikiem obrazu do przekazania. Użyj odpowiedzi w formacie JSON, aby zainicjować wystąpienie struktury SearchResult i zachować odpowiedź.

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

Odpowiedź JSON można następnie wydrukować w konsoli.

Używanie w żądaniu tokenu szczegółowych informacji obrazu

Aby użyć tokenu ImageInsightsToken zwróconego z wynikami żądania POST, możesz dodać go do żądania GET. Na przykład:

https://api.cognitive.microsoft.com/bing/v7.0/images/details?InsightsToken="bcid_A2C4BB81AA2C9EF8E049C5933C546449*ccid_osS7gaos*mid_BF7CC4FC4A882A3C3D56E644685BFF7B8BACEAF2

Jeśli na obrazie znajdują się osoby lub miejsca, które można zidentyfikować, to żądanie zwróci informacje na ich temat.

Następne kroki

Zobacz też