Руководство по Извлечение сведений об изображении с помощью 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, например следующие:
В этом учебнике объясняется, как выполнить такие задачи:
- Использование конечной точки для поиска изображений
/details
в запросеPOST
. - Указание заголовков для запроса.
- Использование параметров URL-адреса для указания результатов.
- Отправка данных изображений и отправка запроса
POST
. - Печать результатов JSON в консоль.
Предварительные требования
- Любой выпуск Visual Studio 2017 или более поздней версии.
Составление запроса на поиск сведений об изображении
Ниже приведена конечная точка /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
Если в изображении удается идентифицировать людей или места, то этот запрос возвращает сведения о них.