Tutoriel : Extraire les détails de l’image avec l’API Recherche d’images Bing et C#
Avertissement
Le 30 octobre 2020, les API de recherche Bing sont passées des services Azure AI aux services de recherche Bing. Cette documentation est fournie à des fins de référence uniquement. Pour accéder à la documentation mise à jour, consultez la documentation de l’API Recherche Bing. Pour obtenir des instructions sur la création de nouvelles ressources Azure pour Recherche Bing, consultez Créer une ressource Recherche Bing à l’aide de Place de marché Azure.
Plusieurs points de terminaison sont disponibles via l’API Recherche d’images Bing. Le point de terminaison /details
accepte une requête POST avec une image, et peut retourner divers détails relatifs à l’image. Cette application C# envoie une image à l’aide de cette API et affiche les détails retournés par Bing, qui sont des objets JSON, par exemple les éléments suivants :
Ce didacticiel explique comment :
- Utiliser le point de terminaison Recherche d’images
/details
dans une requêtePOST
- Spécifier des en-têtes pour la requête
- Utiliser les paramètres d’URL pour spécifier les résultats
- Télécharger les données de l’image et envoyer la requête
POST
- Imprimer les résultats JSON vers la console
Prérequis
- N’importe quelle édition de Visual Studio 2017 ou ultérieure.
Construire une requête de recherche de détails d’image
Voici le point de terminaison /details
, qui accepte les requêtes POST avec des données d’image dans le corps de la requête. Vous pouvez utiliser le point de terminaison global ci-dessous, ou le point de terminaison de sous-domaine personnalisé affiché dans le portail Azure pour votre ressource.
https://api.cognitive.microsoft.com/bing/v7.0/images/details
Lors de la construction de l’URL de requête de recherche, le paramètre modules
suit le point de terminaison ci-dessus et spécifie les types de détails que contiennent les résultats :
modules=All
-
modules=RecognizedEntities
(personnes ou lieux visibles dans l’image)
Spécifiez modules=All
dans la requête POST pour obtenir du texte JSON qui inclut les éléments suivants :
-
bestRepresentativeQuery
- une requête Bing qui renvoie des images similaire à l’image chargée -
detectedObjects
: objets se trouvant dans l’image -
image
: métadonnées de l’image -
imageInsightsToken
: un jeton pour une requête GET ultérieure qui obtientRecognizedEntities
(personnes ou endroits visibles dans l’image) à partir de l’image. -
imageTags
: étiquettes pour l’image -
pagesIncluding
- pages Web où l’image est intégrée -
relatedSearches
- recherches basées sur les détails de l’image. -
visuallySimilarImages
- images similaires sur le web.
Spécifiez modules=RecognizedEntities
dans la requête POST pour obtenir uniquement imageInsightsToken
, qui peut être utilisé dans une requête GET ultérieure pour identifier les personnes ou les lieux figurant dans l’image.
Créer un objet WebClient et définir des en-têtes pour la requête d’API
Créez un objet WebClient
et définissez les en-têtes. Pour effectuer des requêtes vers l’API Recherche Bing, vous avez besoin d’une clé Ocp-Apim-Subscription-Key
. La requête POST
permettant de charger une image doit également spécifier ContentType: multipart/form-data
.
WebClient client = new WebClient();
client.Headers["Ocp-Apim-Subscription-Key"] = accessKey;
client.Headers["ContentType"] = "multipart/form-data";
Charger l’image et afficher les résultats
La méthode UpLoadFile()
de la classe WebClient
met en forme les données de la requête POST
, notamment la mise en forme de RequestStream
et l’appel de HttpWebRequest
.
Appelez WebClient.UpLoadFile()
avec le point de terminaison /details
et le fichier image à télécharger. Utilisez la réponse JSON pour initialiser une instance de la structure SearchResult
et stocker la réponse.
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>()
};
Cette réponse JSON peut ensuite être affichée sur la console.
Utiliser un jeton d’insights sur l’image dans une requête
Pour utiliser le ImageInsightsToken
retourné avec les résultats d’un POST
, vous pouvez l’ajouter à une requête GET
. Par exemple :
https://api.cognitive.microsoft.com/bing/v7.0/images/details?InsightsToken="bcid_A2C4BB81AA2C9EF8E049C5933C546449*ccid_osS7gaos*mid_BF7CC4FC4A882A3C3D56E644685BFF7B8BACEAF2
Si des personnes ou des lieux peuvent être identifiés dans l’image, cette requête renverra des informations à leur sujet.