Compartir vía


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:

[Resultados JSON]

Este tutorial explica cómo realizar lo siguiente:

  • Utilizar el punto de conexión /details de Image Search en una solicitud POST.
  • 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

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 obtiene RecognizedEntities (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.

Pasos siguientes

Consulte también