Tutorial: Extracción de detalles de imágenes con Bing Image Search API y C#Tutorial: Extract image details using the Bing Image Search API and C#

Hay varios puntos de conexión disponibles mediante Bing Image Search API.There are multiple endpoints available through the 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.The /details endpoint accepts a POST request with an image, and can return a variety of details about the image. 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:This C# application sends an image using this API, and displays the details returned by Bing, which are JSON objects, such as the following:

[Resultados JSON]

Este tutorial explica cómo realizar lo siguiente:This tutorial explains how to:

  • Utilizar el punto de conexión /details de Image Search en una solicitud POST.Use the Image Search /details endpoint in a POST request
  • Especificar encabezados para la solicitud.Specify headers for the request
  • Utilizar parámetros de dirección URL para especificar los resultados.Use URL parameters to specify results
  • Cargar los datos de imagen y enviar la solicitud POST.Upload the image data and send the POST request
  • Imprimir los resultados JSON en la consola.Print the JSON results to the console

El código fuente del ejemplo está disponible en GitHub.The source code for this sample is available on GitHub.

Requisitos previosPrerequisites

Debe tener una cuenta de Cognitive Services API con acceso a Bing Search APIs.You must have a Cognitive Services API account with access to the Bing Search APIs. Si no tiene una suscripción de Azure, puede crear una cuenta gratuita.If you don't have an Azure subscription, you can create an account for free. Antes de continuar, necesitará la clave de acceso que se le proporcionó al activar la versión de evaluación gratuita o puede usar una clave de suscripción de pago desde el panel de Azure.Before continuing, You will need the access key provided after activating your free trial, or a paid subscription key from your Azure dashboard.

Construcción de una solicitud de búsqueda de detalles de la imagenConstruct an image details search request

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.The following is the /details endpoint, which accepts POST requests with image data in the body of the request.

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:When constructing the search request URL, the modules parameter follows the above endpoint, and specifies the types of details the results will contain:

  • modules=All
  • modules=RecognizedEntities (personas o lugares visibles en la imagen)modules=RecognizedEntities (people or places visible in the image)

Especifique modules=All en la solicitud POST para obtener el texto JSON que incluye lo siguiente:Specify modules=All in the POST request to get JSON text that includes the following:

  • bestRepresentativeQuery - una consulta de Bing que devuelve imágenes similares a la imagen cargadabestRepresentativeQuery - a Bing query that returns images similar to the uploaded image
  • detectedObjects - los objetos encontrados en la imagendetectedObjects - objects found in the image
  • image - los metadatos de la imagenimage - metadata for the image
  • imageInsightsToken - un token para una solicitud GET posterior que obtiene RecognizedEntities (personas o lugares visibles en la imagen) de la imagenimageInsightsToken - a token for a later GET requests that get RecognizedEntities (people or places visible in the image) from the image.
  • imageTags - etiquetas para la imagenimageTags - tags for the image
  • pagesIncluding - páginas web que incluyen la imagenpagesIncluding - Web pages that include the image
  • relatedSearches - búsquedas basadas en los detalles de la imagenrelatedSearches - searches based on details in the image.
  • visuallySimilarImages -imágenes similares en la WebvisuallySimilarImages - similar images on the 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.Specify modules=RecognizedEntities in the POST request to only get imageInsightsToken, which can be used in a subsequent GET request to identify people or places in the image.

Cree un objeto WebClient y establezca los encabezados de la solicitud de APICreate a WebClient object, and set headers for the API request

Cree un objeto WebClient y establezca los encabezados.Create a WebClient object, and set the headers. Todas las solicitudes de Bing Search API necesitan Ocp-Apim-Subscription-Key.All requests to the Bing Search API require an Ocp-Apim-Subscription-Key. Una solicitud POST para cargar una imagen también debe especificar ContentType: multipart/form-data.A POST request to upload an image must also specify 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 resultadosUpload the image, and display the results

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.The WebClient class's UpLoadFile() method formats data for the POST request, including formatting RequestStream and calling HttpWebRequest.

Llame a WebClient.UpLoadFile() con el punto de conexión /details y el archivo de imagen para cargar.Call WebClient.UpLoadFile() with the /details endpoint and the image file to upload. Use la respuesta JSON para inicializar una instancia de la estructura SearchResult y almacenar la respuesta.Use the JSON response to initialize an instance of the SearchResult structure, and store the response.

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.This JSON response can then be printed to the console.

Uso de un token de información de la imagen en una solicitudUse an image insights token in a request

Para usar el elemento ImageInsightsToken devuelto con los resultados de POST, puede agregarlo a una solicitud GET.To use the ImageInsightsToken returned with results of a POST, you can add it to a GET request. Por ejemplo: For example:

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.If there are identifiable people or places in the image, this request will return information about them.

Pasos siguientesNext steps

Otras referenciasSee also