Búsqueda de imágenes similares de búsquedas anteriores mediante ImageInsightsTokenFind similar images from previous searches using ImageInsightsToken

El SDK de Visual Search le permite buscar imágenes en línea de una búsqueda anterior que devuelve un token ImageInsightsToken.The Visual Search SDK enables you to find images online from previous searches that return an ImageInsightsToken. En esta aplicación se obtiene un token ImageInsightsToken que se usa en una búsqueda posterior.This application gets an ImageInsightsToken and uses the token in a subsequent search. Después, la aplicación envía el token ImageInsightsToken a Bing y devuelve los resultados que incluyen direcciones URL de Bing Search y las direcciones URL de imágenes similares que se encuentran en línea.It then sends the ImageInsightsToken to Bing and returns results that include Bing Search URLs and URLs of similar images found online.

El código fuente completo de este tutorial está disponible en GitHub con anotaciones y control de errores adicionales.The full source code for this tutorial can be found with additional error handling and annotations on GitHub.

Requisitos previosPrerequisites

  • Cualquier edición de Visual Studio 2019.Any edition of Visual Studio 2019.
  • Si usa Linux o MacOS, puede ejecutar esta aplicación con Mono.If you are using Linux/MacOS, you can run this application using Mono.
  • Los paquetes NuGet para Visual Search e Image Search.The NuGet Visual Search and Image Search packages.
    • En el Explorador de soluciones de Visual Studio, haga clic con el botón derecho en el proyecto y seleccione Administrar paquetes NuGet en el menú.From the Solution Explorer in Visual Studio, right-click on your project and select Manage NuGet Packages from the menu. Instale los paquetes Microsoft.Azure.CognitiveServices.Search.CustomSearch y Microsoft.Azure.CognitiveServices.Search.ImageSearch.Install the Microsoft.Azure.CognitiveServices.Search.CustomSearch package, and the Microsoft.Azure.CognitiveServices.Search.ImageSearch package. La instalación de los paquetes NuGet también instala lo siguiente:Installing the NuGet packages also installs the following:
      • Microsoft.Rest.ClientRuntimeMicrosoft.Rest.ClientRuntime
      • Microsoft.Rest.ClientRuntime.AzureMicrosoft.Rest.ClientRuntime.Azure
      • Newtonsoft.JsonNewtonsoft.Json

Debe tener una cuenta de Cognitive Services API con acceso a Bing Search APIs.You must have a Cognitive Services API account with access to the Bing Search APIs. Antes de continuar, necesitará la clave de acceso proporcionada después de iniciar una suscripción en el nivel de precios S9 como se muestra en Precios de Cognitive Services: Bing Search API.Before continuing, you will need the access key provided after starting a subscription at S9 price tier as shown in Cognitive Services Pricing - Bing Search API.

Para iniciar una suscripción en Azure Portal:To start a subscription in Azure portal:

  1. Escriba "BingSearchV7" en el cuadro de texto de la parte superior de Azure Portal que dice Search resources, services, and docs.Enter 'BingSearchV7' in the text box at the top of the Azure portal that says Search resources, services, and docs.
  2. En Marketplace en la lista desplegable, seleccione Bing Search v7.Under Marketplace in the drop-down list, select Bing Search v7.
  3. Escriba Name para el nuevo recurso.Enter Name for the new resource.
  4. Seleccione la suscripción Pay-As-You-Go.Select Pay-As-You-Go subscription.
  5. Seleccione el plan de tarifa S9.Select S9 pricing tier.
  6. Haga clic en Enable para iniciar la suscripción.Click Enable to start the subscription.

Obtener el token ImageInsightsToken del SDK de Bing Image SearchGet the ImageInsightsToken from the Bing Image Search SDK

Esta aplicación usa un token ImageInsightsToken obtenido a través del SDK de Bing Image Search.This application uses an ImageInsightsToken obtained through the Bing Image Search SDK. En una nueva aplicación de consola de C#, crea un cliente para llamar a la API mediante ImageSearchClient().In a new C# console application, create a client to call the API using ImageSearchClient(). A continuación, use SearchAsync() con su consulta:Then use SearchAsync() with your query:

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\"");

Almacene el primer resultado de la búsqueda mediante imageResults.Value.First() y, a continuación, almacene el token ImageInsightsToken de la información de imagen.Store the first search result using imageResults.Value.First(), and then store the image insight's 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!");
}

Dicho token ImageInsightsToken se envía a Bing Visual Search en una solicitud.This ImageInsightsToken is sent to Bing Visual Search in a request.

Adición del token ImageInsightsToken a una solicitud de Visual SearchAdd the ImageInsightsToken to a Visual Search request

Especifique el token ImageInsightsToken para una solicitud de Visual Search mediante la creación de un objeto ImageInfo desde el token ImageInsightsToken contenido en las respuestas de Bing Visual Search.Specify the ImageInsightsToken for a Visual Search request by creating an ImageInfo object from the ImageInsightsToken contained in responses from Bing Visual Search.

ImageInfo ImageInfo = new ImageInfo(imageInsightsToken: insightsTok);

Uso de Bing Visual Search para buscar imágenes desde un token ImageInsightsTokenUse Bing Visual Search to find images from an ImageInsightsToken

El objeto VisualSearchRequest contiene información sobre la imagen en ImageInfo que se va a buscar.The VisualSearchRequest object contains information about the image in ImageInfo to be searched. El método VisualSearchMethodAsync() obtiene los resultados.The VisualSearchMethodAsync() method gets the results. No es necesario que proporcione un archivo binario de imagen, ya que la imagen se representa mediante el token.You don't have to provide an image binary, as the image is represented by the token.

VisualSearchRequest VisualSearchRequest = new VisualSearchRequest(ImageInfo);

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

Iteración de los resultados de Visual SearchIterate through the Visual Search results

Los resultados de Visual Search son objetos ImageTag.Visual Search results are ImageTag objects. Cada etiqueta contiene una lista de objetos ImageAction.Each tag contains a list of ImageAction objects. Cada elemento ImageAction contiene un campo Data que es una lista de valores que dependen del tipo de acción.Each ImageAction contains a Data field, which is a list of values that depend on the type of action. Puede iterar por los objetos ImageTag en visualSearchResults.Tags, por ejemplo, y obtener la etiqueta ImageAction que se encuentra dentro.You can iterate through the ImageTag objects in visualSearchResults.Tags, for instance, and get the ImageAction tag within it. En el ejemplo siguiente se imprimen los detalles de las acciones PagesIncluding:The sample below prints the details of PagesIncluding actions:

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 ActionTypesPagesIncluding ActionTypes

Para la obtención de las direcciones URL de imágenes reales a partir de los tipos de acción se requiere una conversión que lea un elemento ActionType como ImageModuleAction, que contiene un elemento Data con una lista de valores.Getting the actual image URLs from action types requires a cast that reads an ActionType as ImageModuleAction, which contains a Data element with a list of values. Cada valor es la dirección URL de una imagen.Each value is the URL of an image. En el siguiente código se convierte el tipo de acción PagesIncluding en ImageModuleAction y lee los valores:The following casts the PagesIncluding action type to ImageModuleAction and reads the values:

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

Para obtener más información acerca de estos tipos de datos, vea Images - Visual Search (Imágenes: búsqueda visual).For more information about these data types, see Images - Visual Search.

Direcciones URL devueltasReturned URLs

La aplicación completa devuelve las siguientes direcciones URL:The complete application returns the following URLs:

ActionTypeActionType URLURL
MoreSizes -> WebSearchUrlMoreSizes -> WebSearchUrl
VisualSearch -> WebSearchUrlVisualSearch -> WebSearchUrl
ImageById -> WebSearchUrlImageById -> WebSearchUrl
RelatedSearches -> WebSearchUrl:RelatedSearches -> WebSearchUrl:
DocumentLevelSuggestions -> WebSearchUrl:DocumentLevelSuggestions -> WebSearchUrl:
TopicResults -> WebSearchUrlTopicResults -> WebSearchUrl https://www.bing.com/cr?IG=3E32CC6CA5934FBBA14ABC3B2E4651F9&CID=1BA795A21EAF6A63175699B71FC36B7C&rd=1&h=BcQifmzdKFyyBusjLxxgO42kzq1Geh7RucVVqvH-900&v=1&r=https%3a%2f%2fwww.bing.com%2fdiscover%2fcanadian%2brocky&p=DevEx,5823.1https://www.bing.com/cr?IG=3E32CC6CA5934FBBA14ABC3B2E4651F9&CID=1BA795A21EAF6A63175699B71FC36B7C&rd=1&h=BcQifmzdKFyyBusjLxxgO42kzq1Geh7RucVVqvH-900&v=1&r=https%3a%2f%2fwww.bing.com%2fdiscover%2fcanadian%2brocky&p=DevEx,5823.1
ImageResults -> WebSearchUrlImageResults -> 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.1https://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

Como se mostró anteriormente, los tipos TopicResults y ImageResults contienen consultas de imágenes relacionadas.As shown above, the TopicResults and ImageResults types contain queries for related images. Las direcciones URL se vinculan a los resultados de Bing Search.The URLs link to Bing search results.

Pasos siguientesNext steps