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
- 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
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:
- Disponible en Azure Portal hasta que lo elimine.
- Seleccione el plan de tarifa
S9
.
- 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:
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 ActionType
PagesIncluding
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);
}
}