Tutorial: Extracción de detalles de imágenes con Bing Image Search API y 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.
Hay varios puntos de conexión disponibles mediante Bing Image Search API. El punto de conexión /details
acepta una solicitud POST con una imagen y puede devolver una variedad de detalles sobre la imagen. Esta aplicación de C# envía una imagen mediante esta API y muestra los detalles devueltos por Bing, que son objetos JSON, como los siguientes:
Este tutorial explica cómo realizar lo siguiente:
- Utilizar el punto de conexión
/details
de Image Search en una solicitudPOST
. - Especificar encabezados para la solicitud.
- Utilizar parámetros de dirección URL para especificar los resultados.
- Cargar los datos de imagen y enviar la solicitud
POST
. - Imprimir los resultados JSON en la consola.
Requisitos previos
- Cualquier edición de Visual Studio 2017 o posterior.
Construcción de una solicitud de búsqueda de detalles de la imagen
A continuación, se muestra el punto de conexión /details
, que acepta solicitudes POST con los datos de imagen en el cuerpo de la solicitud. Puede usar el punto de conexión global siguiente o el punto de conexión del subdominio personalizado que se muestra en Azure Portal para el recurso.
https://api.cognitive.microsoft.com/bing/v7.0/images/details
Al construir la dirección URL de la solicitud de búsqueda, el parámetro modules
sigue el punto de conexión anterior y especifica los tipos de detalles que contendrán los resultados:
modules=All
-
modules=RecognizedEntities
(personas o lugares visibles en la imagen)
Especifique modules=All
en la solicitud POST para obtener el texto JSON que incluye lo siguiente:
-
bestRepresentativeQuery
- una consulta de Bing que devuelve imágenes similares a la imagen cargada -
detectedObjects
- los objetos encontrados en la imagen -
image
- los metadatos de la imagen -
imageInsightsToken
- un token para una solicitud GET posterior que obtieneRecognizedEntities
(personas o lugares visibles en la imagen) de la imagen -
imageTags
- etiquetas para la imagen -
pagesIncluding
- páginas web que incluyen la imagen -
relatedSearches
- búsquedas basadas en los detalles de la imagen -
visuallySimilarImages
-imágenes similares en la Web
Especifique modules=RecognizedEntities
en la solicitud POST para obtener solo imageInsightsToken
, que puede utilizarse en una solicitud GET subsiguiente para identificar usuarios o lugares en la imagen.
Cree un objeto WebClient y establezca los encabezados de la solicitud de API
Cree un objeto WebClient
y establezca los encabezados. Todas las solicitudes de Bing Search API necesitan Ocp-Apim-Subscription-Key
. Una solicitud POST
para cargar una imagen también debe especificar ContentType: multipart/form-data
.
WebClient client = new WebClient();
client.Headers["Ocp-Apim-Subscription-Key"] = accessKey;
client.Headers["ContentType"] = "multipart/form-data";
Cargar la imagen y mostrar los resultados
El método UpLoadFile()
de la clase WebClient
aplica formato a los datos de la solicitud POST
, incluido el formato RequestStream
y la llamada a HttpWebRequest
.
Llame a WebClient.UpLoadFile()
con el punto de conexión /details
y el archivo de imagen para cargar. Use la respuesta JSON para inicializar una instancia de la estructura SearchResult
y almacenar la respuesta.
const string uriBase = "https://api.cognitive.microsoft.com/bing/v7.0/images/details";
// The image to upload. Replace with your file and path.
const string imageFile = "your-image.jpg";
byte[] resp = client.UploadFile(uriBase + "?modules=All", imageFile);
var json = System.Text.Encoding.Default.GetString(resp);
// Create result object for return
var searchResult = new SearchResult()
{
jsonResult = json,
relevantHeaders = new Dictionary<String, String>()
};
Esta respuesta JSON después se puede imprimir en la consola.
Uso de un token de información de la imagen en una solicitud
Para usar el elemento ImageInsightsToken
devuelto con los resultados de POST
, puede agregarlo a una solicitud GET
. Por ejemplo:
https://api.cognitive.microsoft.com/bing/v7.0/images/details?InsightsToken="bcid_A2C4BB81AA2C9EF8E049C5933C546449*ccid_osS7gaos*mid_BF7CC4FC4A882A3C3D56E644685BFF7B8BACEAF2
Si hay personas o lugares identificables en la imagen, esta solicitud devolverá información sobre ellos.