Compartir a través de


Tutorial: Encuentra imágenes similares de búsquedas anteriores mediante un token de análisis de imagen

Advertencia

El 30 de octubre de 2020, las API de Bing Search se trasladaron de los servicios de Azure AI a Bing Search Services. Esta documentación solo se proporciona como referencia. Para obtener documentación actualizada, consulte la documentación de la API de búsqueda de Bing . Para obtener instrucciones sobre cómo crear nuevos recursos de Azure para la búsqueda de Bing, consulte Creación de un recurso de Bing Search a través de Azure Marketplace.

La biblioteca cliente de Visual Search permite buscar imágenes en línea de búsquedas anteriores que devuelven un ImageInsightsToken. Esta aplicación obtiene un ImageInsightsToken y usa el token en una búsqueda posterior. A continuación, envía el ImageInsightsToken a Bing y devuelve resultados que incluyen direcciones URL de Búsqueda de Bing y de imágenes similares encontradas en línea.

El código fuente completo de este tutorial se puede encontrar con anotaciones y control de errores adicionales en GitHub.

Prerrequisitos

  • Cualquier edición de Visual Studio 2019.
  • Si usa Linux/MacOS, puede ejecutar esta aplicación mediante Mono.
  • Paquetes nuGet Visual Search e Image Search.
    • 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ú. Instale el paquete Microsoft.Azure.CognitiveServices.Search.CustomSearch y el paquete Microsoft.Azure.CognitiveServices.Search.ImageSearch. La instalación de los paquetes NuGet también instala lo siguiente:
      • Microsoft.Rest.ClientRuntime
      • Microsoft.Rest.ClientRuntime.Azure
      • Newtonsoft.Json

Creación de un recurso de Azure

Empiece a usar Bing Visual Search API mediante la creación de uno de los siguientes recursos de Azure:

recurso de Bing Search v7

  • Disponible a través de Azure Portal hasta que elimine el recurso.
  • Seleccione el plan de tarifa S9.

recurso multiservicio

  • Disponible a través de Azure Portal hasta que elimine el recurso.
  • Use la misma clave y el mismo punto de conexión para las aplicaciones, en varios servicios de Azure AI.

Obtención de ImageInsightsToken desde la biblioteca cliente de Bing Image Search

Esta aplicación utiliza un ImageInsightsToken obtenido a través de la biblioteca cliente de Bing Image Search. En una nueva aplicación de consola de C#, cree un cliente para llamar a la API mediante ImageSearchClient(). A continuación, use SearchAsync() con su consulta.

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 búsqueda mediante imageResults.Value.First()y, a continuación, almacene la información de imagen 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!");
}

Este ImageInsightsToken se envía a el Bing Visual Search como parte de una solicitud.

Adición de ImageInsightsToken a una solicitud de Visual Search

Especifique el ImageInsightsToken para una solicitud de Búsqueda visual mediante la creación de un objeto ImageInfo a partir del ImageInsightsToken contenido en las respuestas de Bing Visual Search.

ImageInfo ImageInfo = new ImageInfo(imageInsightsToken: insightsTok);

Utilizar Bing Visual Search para buscar imágenes de ImageInsightsToken

El objeto VisualSearchRequest contiene información sobre la imagen en ImageInfo que se va a buscar. El método VisualSearchMethodAsync() obtiene los resultados. No es necesario proporcionar un archivo binario de imagen, ya que la imagen se representa mediante el token.

VisualSearchRequest VisualSearchRequest = new VisualSearchRequest(ImageInfo);

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

Recorrer en iteración los resultados de Visual Search

Los resultados de la búsqueda visual son objetos ImageTag. Cada etiqueta contiene una lista de objetos ImageAction. Cada ImageAction contiene un campo Data, que es una lista de valores que dependen del tipo de acción. Puede recorrer los objetos ImageTag en visualSearchResults.Tags, por ejemplo, y obtener la etiqueta ImageAction que hay dentro. En el ejemplo siguiente se imprimen los detalles de las acciones de 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);
                }
            }
        }
    }
}

Páginas que incluyen ActionTypes

La obtención de las direcciones URL de imagen reales de los tipos de acción requiere una conversión que lea un ActionType como ImageModuleAction, que contiene un elemento Data con una lista de valores. Cada valor es la dirección URL de una imagen. A continuación se convierte el tipo de acción PagesIncluding en ImageModuleAction y se leen los valores:

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

Para obtener más información sobre estos tipos de datos, vea Images - Visual Search.

Direcciones URL devueltas

La aplicación completa devuelve las siguientes direcciones URL:

TipoDeAcción URL
MoreSizes -> URLdeBúsquedaWeb
VisualSearch:> WebSearchUrl
ImageById:> WebSearchUrl
Búsquedas relacionadas -> WebSearchUrl:
SugerenciasAlNivelDelDocumento -> URLDeBúsquedaEnLaWeb:
TopicResults:> WebSearchUrl https://www.bing.com/cr?IG=3E32CC6CA5934FBBA14ABC3B2E4651F9& CID=1BA795A21EAF6A63175699B71FC36B7C&rd=1&h=BcQifmzdKFyyBusjLxxgO42kzq1Geh7RucVVVvH-900&v=1&r=https%3a%2f%2fwww.bing.com%2fdiscover%2fcanadian%2brocky&p=DevEx,5823.1
ImageResults:> URLdeBúsquedaWeb 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

Como se muestra anteriormente, los tipos TopicResults y ImageResults contienen consultas para imágenes relacionadas. Las direcciones URL se vinculan a los resultados de búsqueda de Bing.

Pasos siguientes