Tutorial: Recortar una imagen con el SDK de Bing Visual Search para C#

Advertencia

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

El SDK de Bing Visual Search le permite recortar una imagen antes de buscar imágenes en línea similares. Esta aplicación recorta a una sola persona de una imagen que contiene varias personas y, a continuación, devuelve los resultados de búsqueda que contienen imágenes similares en línea.

El código fuente completo para esta aplicación está disponible en GitHub con anotaciones y control de errores adicionales.

En este tutorial se muestra cómo:

  • Enviar una solicitud mediante el SDK de Bing Visual Search
  • Recortar un área de imagen para buscar con Bing Visual Search
  • Recibir y gestionar la respuesta
  • Buscar las direcciones URL de elementos de acción en la respuesta

Prerrequisitos

  • Cualquier edición de Visual Studio 2019.
  • Si usa Linux/MacOS, esta aplicación puede ejecutarse con Mono.
  • El paquete NuGet Custom Search instalado.
    • 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. Al instalar el paquete NuGet Custom Search, también se instalarán los ensamblados siguientes:
      • Microsoft.Rest.ClientRuntime
      • Microsoft.Rest.ClientRuntime.Azure
      • Newtonsoft.Json

Creación de un recurso de Azure

Comience a usar la API Bing Visual Search mediante la creación de uno de los recursos de Azure que se indican a continuación:

Recurso de Bing Search v7

  • Disponible en Azure Portal hasta que lo elimine.
  • Seleccione el plan de tarifa S9.

Recurso de varios servicios

  • Disponible en Azure Portal hasta que lo elimine.
  • Utilice la misma clave y el mismo punto de conexión para sus aplicaciones en varios servicios de Azure AI.

Especificación del área de recorte de la imagen

Esta aplicación recorta un área de esta imagen del equipo de liderazgo de Microsoft. Esta área de recorte se define mediante las coordenadas superior izquierda e inferior derecha, representadas como un porcentaje de toda la imagen:

Equipo de responsables sénior de Microsoft

Esta imagen se recorta mediante la creación de un objeto ImageInfo del el área de recorte y la carga del objeto ImageInfo en una solicitud VisualSearchRequest. El objeto ImageInfo también incluye la dirección URL de la imagen:

CropArea CropArea = new CropArea(top: (float)0.01, bottom: (float)0.30, left: (float)0.01, right: (float)0.20);
string imageURL = "https://learn.microsoft.com/azure/cognitive-services/Bing-visual-search/media/ms_srleaders.jpg";
ImageInfo imageInfo = new ImageInfo(cropArea: CropArea, url: imageURL);

VisualSearchRequest visualSearchRequest = new VisualSearchRequest(imageInfo: imageInfo);

Búsqueda de imágenes similares al área de recorte

La variable VisualSearchRequest contiene información acerca del área de recorte de la imagen y su dirección URL. El método VisualSearchMethodAsync() obtiene los resultados:

Console.WriteLine("\r\nSending visual search request with knowledgeRequest that contains URL and crop area");
var visualSearchResults = client.Images.VisualSearchMethodAsync(knowledgeRequest: visualSearchRequest).Result;

Obtención de los datos de la dirección URL de ImageModuleAction

Los resultados de Bing Visual Search son objetos ImageTag. Cada etiqueta contiene una lista de objetos ImageAction. Cada elemento ImageAction contiene un campo Data, que es una lista de valores que dependen del tipo de acción.

Puede imprimir los distintos tipos con el código siguiente:

Console.WriteLine("\r\n" + "ActionType: " + i.ActionType + " -> WebSearchUrl: " + i.WebSearchUrl);

La aplicación completa devuelve:

ActionType URL
PagesIncluding WebSearchURL
MoreSizes WebSearchURL
VisualSearch WebSearchURL
ImageById WebSearchURL
RelatedSearches WebSearchURL
Entity -> WebSearchUrl https://www.bing.com/cr?IG=E40D0E1A13404994ACB073504BC937A4& CID=03DCF882D7386A442137F49BD6596BEF&rd=1&h=BvvDoRtmZ35Xc_UZE4lZx6_eg7FHgcCkigU1D98NHQo&v=1&r=https%3a%2f%2fwww.bing.com%2fsearch%3fq%3dSatya%2bNadella&p=DevEx,5380.1
TopicResults -> WebSearchUrl https://www.bing.com/cr?IG=E40D0E1A13404994ACB073504BC937A4& CID=03DCF882D7386A442137F49BD6596BEF&rd=1&h=3QGtxPb3W9LemuHRxAlW4CW7XN4sPkUYCUynxAqI9zQ&v=1&r=https%3a%2f%2fwww.bing.com%2fdiscover%2fnadella%2bsatya&p=DevEx,5382.1
ImageResults -> WebSearchUrl https://www.bing.com/cr?IG=E40D0E1A13404994ACB073504BC937A4& CID=03DCF882D7386A442137F49BD6596BEF&rd=1&h=l-WNHO89Kkw69AmIGe2MhlUp6MxR6YsJszgOuM5sVLs&v=1&r=https%3a%2f%2fwww.bing.com%2fimages%2fsearch%3fq%3dSatya%2bNadella&p=DevEx,5384.1

Tal y como se muestra en el texto anterior, el tipo de acción Entity contiene una consulta de Bing Search que devuelve información acerca de una persona, lugar o cosa reconocibles. Los tipos TopicResults y ImageResults contienen consultas de imágenes relacionadas. Las direcciones URL de la lista vinculan a los resultados de Bing Search.

Obtención de las direcciones URL para imágenes ActionTypePagesIncluding

Para la obtención de las direcciones URL de imágenes reales se requiere una conversión que lea un elemento ActionType como ImageModuleAction, que contenga un elemento Data con una lista de valores. Cada valor es la dirección URL de una imagen. El siguiente código convierte el tipo de acción PagesIncluding en ImageModuleAction y lee los valores:

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

Pasos siguientes

Consulte también

¿Qué es Bing Visual Search API?