Руководство по Поиск похожих изображений из предыдущих операций поиска с помощью токена сведений об изображении

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

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

Клиентская библиотека Визуального поиска позволяет находить изображения в Интернете из предыдущих операций поиска, возвращающих ImageInsightsToken. Это приложение получает ImageInsightsToken и использует токен в последующих операциях поиска. Затем оно отправляет ImageInsightsToken в Bing и возвращает результаты, содержащие URL-адреса Поиска Bing и URL-адреса схожих изображений, найденных в Интернете.

Полный исходный код для работы с этим руководством с дополнительными возможностями по обработке ошибок и заметками можно получить на GitHub.

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

  • Любой выпуск Visual Studio 2019.
  • Если вы используете Linux или MacOS, это приложение можно запустить с помощью Mono.
  • Пакеты NuGet для визуального поиска и поиска изображений.
    • В обозревателе решений Visual Studio щелкните правой кнопкой мыши проект и в меню выберите пункт Управление пакетами NuGet. Установите пакеты Microsoft.Azure.CognitiveServices.Search.CustomSearch и Microsoft.Azure.CognitiveServices.Search.ImageSearch. При установке пакетов NuGet также устанавливаются следующие пакеты.
      • Microsoft.Rest.ClientRuntime
      • Microsoft.Rest.ClientRuntime.Azure
      • Newtonsoft.Json.

Создание ресурса Azure

Чтобы начать работу с API Визуального поиска Bing, создайте один из следующих ресурсов Azure.

Ресурс Поиска Bing версии 7

  • доступен на портале Azure до удаления.
  • Выберите ценовую категорию S9.

Ресурс для нескольких служб

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

Получение токена ImageInsightsToken из клиентской библиотеки для API "Поиск изображений Bing"

Это приложение использует ImageInsightsToken, полученный с помощью клиентской библиотеки для API "Поиск изображений Bing". В новом консольном приложении C# создайте клиент для вызова API с помощью ImageSearchClient(). Затем используйте SearchAsync() в запросе.

var client = new ImageSearchClient(new Microsoft.Azure.CognitiveServices.Search.ImageSearch.ApiKeyServiceClientCredentials(subKey));
var imageResults = client.Images.SearchAsync(query: "canadian rockies").Result;
Console.WriteLine("Search images for query \"canadian rockies\"");

Сохраните результат первого поиска с помощью imageResults.Value.First(), а затем сохраните токен ImageInsightsToken аналитических сведений изображения.

String insightTok = "None";
if (imageResults.Value.Count > 0)
{
    var firstImageResult = imageResults.Value.First();
    insightTok = firstImageResult.ImageInsightsToken;
}
else
{
    insightTok = "None found";
    Console.WriteLine("Couldn't find image results!");
}

Этот ImageInsightsToken будет отправлен в Визуальный поиск Bing в запросе.

Указание токена ImageInsightsToken в запросе визуального поиска

Укажите ImageInsightsToken для запроса визуального поиска, создав объект ImageInfo из ImageInsightsToken, содержащихся в ответах от визуального поиска Bing.

ImageInfo ImageInfo = new ImageInfo(imageInsightsToken: insightsTok);

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

Объект VisualSearchRequest содержит сведения об изображении, поиск которого выполняется в ImageInfo. Метод VisualSearchMethodAsync() получает результаты. Указывать двоичный файл изображения не нужно, так как изображение представлено токеном.

VisualSearchRequest VisualSearchRequest = new VisualSearchRequest(ImageInfo);

var visualSearchResults = client.Images.VisualSearchMethodAsync(knowledgeRequest: VisualSearchRequest).Result;

Итерация по результатам визуального поиска

Результатами визуального поиска являются объекты ImageTag. Каждый тег содержит список объектов ImageAction. Каждый объект ImageAction содержит поле Data, которое представляет собой список значений, зависящих от типа действия. Например, можно выполнить итерацию по объектам ImageTag в списке visualSearchResults.Tags и получить содержащийся в нем тег ImageAction. В следующем примере показан вывод сведений о действиях PagesIncluding.

if (visualSearchResults.Tags.Count > 0)
{
    // List of tags
    foreach (ImageTag t in visualSearchResults.Tags)
    {
        foreach (ImageAction i in t.Actions)
        {
            Console.WriteLine("\r\n" + "ActionType: " + i.ActionType + " WebSearchURL: " + i.WebSearchUrl);

            if (i.ActionType == "PagesIncluding")
            {
                foreach (ImageObject o in (i as ImageModuleAction).Data.Value)
                {
                    Console.WriteLine("ContentURL: " + o.ContentUrl);
                }
            }
        }
    }
}

Типы действий PagesIncluding

Для получения URL-адресов фактических изображений из типов действий требуется приведение к типу, который считывает ActionType как ImageModuleAction, содержащий элемент Data со списком значений. Каждое значение является URL-адресом изображения. Далее показано приведение типа действия PagesIncluding к ImageModuleAction и считывание значений.

    if (i.ActionType == "PagesIncluding")
    {
        foreach(ImageObject o in (i as ImageModuleAction).Data.Value)
        {
            Console.WriteLine("ContentURL: " + o.ContentUrl);
        }
    }

Дополнительные сведения об этих типах данных см. в статье Images - Visual Search (Изображения — визуальный поиск).

Возвращаемые URL-адреса

Готовое приложение возвращает указанные далее URL-адреса.

Тип действия URL-адрес
MoreSizes —> WebSearchUrl
VisualSearch —> WebSearchUrl
ImageById —> WebSearchUrl
RelatedSearches —> WebSearchUrl:
DocumentLevelSuggestions —> WebSearchUrl:
TopicResults —> WebSearchUrl https://www.bing.com/cr?IG=3E32CC6CA5934FBBA14ABC3B2E4651F9& CID=1BA795A21EAF6A63175699B71FC36B7C&rd=1&h=BcQifmzdKFyyBusjLxxxgO42kzq1Geh7RucVVqvH-900&v=1&r=https%3a%2f%2fwww.bing.com%2fdiscover%2fcanadian%2brocky&p=DevEx,5823.1
ImageResults —> WebSearchUrl https://www.bing.com/cr?IG=3E32CC6CA5934FBBA14ABC3B2E4651F9& CID=1BA795A21EAF6A63175699B71FC36B7C&rd=1&h=PV9GzMFOI0AHZp2gKeWJ8DcveSDRE3fP2jHDKMpJSU8&v=1&r=https%3a%2f%2fwww.bing.com%2fimages%2fsearch%3fq%3doutdoor&p=DevEx,5831.1

Как показано выше, типы TopicResults и ImageResults содержат запросы для связанных изображений. URL-адреса ведут на результаты поиска Bing.

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

Create a Visual Search single-page web app (Создание одностраничного веб-приложения Визуального поиска)