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:
W tym samouczku wyjaśniono:
- Używanie punktu końcowego
/details
wyszukiwania obrazów w żądaniuPOST
- 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
- Dowolna wersja programu Visual Studio 2017 lub nowszego.
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 elementyRecognizedEntities
(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.