Руководство по Извлечение сведений об изображении с помощью API Bing для поиска изображений и C#

Предупреждение

30 октября 2020 г. API Поиск Bing перенесены из служб ИИ Azure в Поиск Bing Services. Эта документация приводится только для справки. Обновленную информацию см. в документации по API Поиска Bing. Инструкции по созданию ресурсов Azure для Поиска Bing приведены в статье Создание ресурса для Поиска Bing с помощью Azure Marketplace.

Существует несколько конечных точек, доступ к которым можно получить с помощью API Bing для поиска изображений. Конечная точка /details принимает запрос POST с изображением и может возвращать различные сведения об изображении. Это приложение C# отправляет изображение с помощью этого API и отображает сведения, возвращенные Bing, которые являются объектами JSON, например следующие:

[Результаты JSON]

В этом учебнике объясняется, как выполнить такие задачи:

  • Использование конечной точки для поиска изображений /details в запросе POST.
  • Указание заголовков для запроса.
  • Использование параметров URL-адреса для указания результатов.
  • Отправка данных изображений и отправка запроса POST.
  • Печать результатов JSON в консоль.

Предварительные требования

Составление запроса на поиск сведений об изображении

Ниже приведена конечная точка /details, принимающая запросы POST с данными изображения в тексте запроса. Вы можете использовать указанную ниже глобальную конечную точку или конечную точку пользовательского поддомена, отображаемого на портале Azure для вашего ресурса.

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

При создании URL-адреса запроса на поиск параметр modules указывает типы сведений, которые будут содержаться в результатах, с учетом конечной точки выше:

  • modules=All
  • modules=RecognizedEntities (люди или места, видимые в изображении).

Если в запросе POST указать modules=All, то полученный текст JSON будет содержать такой список:

  • bestRepresentativeQuery — запрос Bing, который возвращает изображения, похожие на отправленное изображение.
  • detectedObjects — объекты, найденные на изображении.
  • image — метаданные изображения.
  • imageInsightsToken — токен для последующих запросов GET, которые получают RecognizedEntities (люди или места на изображении) с изображения.
  • imageTags — теги для изображения.
  • pagesIncluding — веб-страницы, содержащие данное изображение.
  • relatedSearches — поисковые запросы по сведениям на изображении.
  • visuallySimilarImages — похожие изображения в Интернете.

Укажите modules=RecognizedEntities в запросе POST, чтобы получить только тот токен imageInsightsToken, который может использоваться в последующем запросе GET для определения людей или места на изображении.

Создание объекта WebClient и установка заголовков для запроса API

Создайте объект WebClient и задайте заголовки. Во всех запросах к API-интерфейсам поиска Bing необходимо указывать параметр Ocp-Apim-Subscription-Key. В запросе POST на отправку изображения необходимо также указать ContentType: multipart/form-data.

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

Отправка изображения и отображение результатов

Метод UpLoadFile() класса WebClient форматирует данные для запроса POST, включая форматирование RequestStream и вызов HttpWebRequest.

Вызовите WebClient.UpLoadFile(), указав конечную точку /details и файл изображения для отправки. Используйте ответ JSON для инициализации экземпляра структуры SearchResult и сохраните ответ.

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

Затем этот ответ JSON можно вывести в консоли.

Использование токена аналитических сведений изображения в запросе

Для использования токена ImageInsightsToken, возвращенного с результатами запроса POST, его можно добавить в запрос GET. Пример:

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

Если в изображении удается идентифицировать людей или места, то этот запрос возвращает сведения о них.

Дальнейшие действия

См. также раздел