Guida introduttiva: Ottenere informazioni dettagliate sulle immagini usando l'API REST Ricerca visiva Bing e Java
Avviso
Il 30 ottobre 2020 le API Ricerca Bing sono state spostate dai servizi di intelligenza artificiale di Azure ai servizi di Ricerca Bing. Questa documentazione viene fornita solo per riferimento. Per la documentazione aggiornata, vedere la documentazione dell'API ricerca Bing. Per istruzioni sulla creazione di nuove risorse di Azure per la ricerca Bing, vedere Creare una risorsa Ricerca Bing tramite il Azure Marketplace.
Usare questa guida di avvio rapido per effettuare la prima chiamata all'API Ricerca visiva Bing. Quest'applicazione Java carica un'immagine nell'API e visualizza le informazioni restituite. Anche se l'applicazione è scritta in Java, l'API è un servizio Web RESTful compatibile con la maggior parte dei linguaggi di programmazione.
Prerequisiti
Creare una risorsa di Azure
Per iniziare a usare l'API Ricerca visiva Bing, creare una delle seguenti risorse di Azure:
- disponibile tramite il portale di Azure fino a quando la risorsa non viene eliminata.
- Selezionare il piano tariffario
S9
.
- disponibile tramite il portale di Azure fino a quando la risorsa non viene eliminata.
- Usare la stessa chiave e lo stesso endpoint per le applicazioni in più servizi di intelligenza artificiale di Azure.
Creare e inizializzare un progetto
Creare un nuovo progetto Java nell'ambiente di sviluppo integrato o nell'editor preferito e importare le librerie seguenti:
import java.util.*; import java.io.*; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonObject; import com.google.gson.JsonParser; // HttpClient libraries import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.ContentType; import org.apache.http.entity.mime.MultipartEntityBuilder; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder;
Creare variabili per l'endpoint dell'API, la chiave di sottoscrizione e il percorso dell'immagine. Per il valore di
endpoint
, è possibile usare l'endpoint globale nel codice seguente o l'endpoint del sottodominio personalizzato visualizzato nel portale di Azure per la risorsa.static String endpoint = "https://api.cognitive.microsoft.com/bing/v7.0/images/visualsearch"; static String subscriptionKey = "your-key-here"; static String imagePath = "path-to-your-image";
Quando si carica un'immagine locale, i dati del modulo devono includere l'intestazione
Content-Disposition
. Impostare il parametroname
su "image" e il parametrofilename
sul nome file dell'immagine. Il contenuto del modulo include i dati binari dell'immagine. La dimensione massima delle immagini che è possibile caricare è 1 MB.--boundary_1234-abcd Content-Disposition: form-data; name="image"; filename="myimagefile.jpg" ÿØÿà JFIF ÖÆ68g-¤CWŸþ29ÌÄøÖ‘º«™æ±èuZiÀ)"óÓß°Î= ØJ9á+*G¦... --boundary_1234-abcd--
Creare il parser JSON
Creare un metodo per rendere più leggibile la risposta JSON dell'API usando JsonParser
.
public static String prettify(String json_text) {
JsonParser parser = new JsonParser();
JsonObject json = parser.parse(json_text).getAsJsonObject();
Gson gson = new GsonBuilder().setPrettyPrinting().create();
return gson.toJson(json);
}
Costruire la richiesta di ricerca e la query
Nel metodo main dell'applicazione creare un client HTTP usando
HttpClientBuilder.create().build();
.CloseableHttpClient httpClient = HttpClientBuilder.create().build();
Creare un oggetto
HttpEntity
per caricare l'immagine nell'API.HttpEntity entity = MultipartEntityBuilder .create() .addBinaryBody("image", new File(imagePath)) .build();
Creare un oggetto
httpPost
con l'endpoint e impostare l'intestazione in modo da usare la chiave di sottoscrizione.HttpPost httpPost = new HttpPost(endpoint); httpPost.setHeader("Ocp-Apim-Subscription-Key", subscriptionKey); httpPost.setEntity(entity);
Ricevere ed elaborare la risposta JSON
Usare il metodo
HttpClient.execute()
per inviare una richiesta all'API e archiviare la risposta in un oggettoInputStream
.HttpResponse response = httpClient.execute(httpPost); InputStream stream = response.getEntity().getContent();
Archiviare la stringa JSON e visualizzare la risposta.
String json = new Scanner(stream).useDelimiter("\\A").next(); System.out.println("\nJSON Response:\n"); System.out.println(prettify(json));