Quickstart: Digitale inkt herkennen met de Ink Recognizer-REST API en Java
Notitie
De preview van de Ink Recognizer-API is op 26 augustus 2020 beëindigd. Als u bestaande Ink Recognizer-resources hebt, kunt u die blijven gebruiken totdat de service volledig wordt beëindigd op 31 januari 2021.
Gebruik deze quickstart om te beginnen met de Ink Recognizer-API te gebruiken voor digitale pennenstreken. Met deze Java-toepassing wordt een API-aanvraag met gegevens over de pennenstreken met JSON-indeling verstuurd en het antwoord ontvangen.
Hoewel deze toepassing in Java is geschreven, is de API een RESTful-webservice die compatibel is met vrijwel elke programmeertaal.
Normaal gesproken zou u de API aanroepen vanuit een digitaal handschrift-app. In deze quickstart wordt gegevens over pennenstreken voor het volgende handgeschreven voorbeeld verzonden vanuit een JSON-bestand.
De broncode voor deze quickstart is te vinden op GitHub.
Vereisten
De Java™ Development Kit (JDK) 7 of hoger.
Deze bibliotheken importeren vanuit de Maven-opslagplaats
- JSON in Java-pakket
- Apache HttpClient-pakket
De voorbeeldgegevens over pennenstreken voor deze quickstart vindt u op GitHub.
Een Ink Recognizer-resource maken
Notitie
Voor eindpunten voor resources die zijn gemaakt na 1 juli 2019 wordt de aangepaste indeling voor subdomeinen gebruikt die hieronder wordt weergegeven. Zie Aangepaste subdomeinnamen voor Cognitive Services voor meer informatie en een volledige lijst met regionale eindpunten.
Azure Cognitive Services worden vertegenwoordigd door Azure-resources waarop u zich abonneert. Maak een resource voor Ink Recognizer met behulp van Azure Portal.
Nadat u een resource hebt gemaakt, haalt u uw eindpunt en sleutel op door uw resource te openen in Azure Portal en op Quickstart te klikken.
Maak twee omgevingsvariabelen:
INK_RECOGNITION_SUBSCRIPTION_KEY
: de abonnementssleutel voor het verifiëren van uw aanvragen.INK_RECOGNITION_ENDPOINT
: het eindpunt voor uw resource. Dit zal er als volgt uitzien:
https://<your-custom-subdomain>.api.cognitive.microsoft.com
Een nieuwe toepassing maken
Maak een nieuw Java-project in uw favoriete IDE of editor en importeer de volgende bibliotheken.
import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPut; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.HashMap; import java.util.Map;
Maak variabelen voor uw abonnementssleutel, eindpunt en JSON-bestand. Het eindpunt wordt later toegevoegd aan de URI van Ink Recognizer.
// Add your Azure Ink Recognition subscription key to your environment variables. private static final String subscriptionKey = System.getenv("INK_RECOGNITION_SUBSCRIPTION_KEY"); // Add your Azure Ink Recognition endpoint to your environment variables. public static final String rootUrl = System.getenv("INK_RECOGNITION_ENDPOINT"); public static final String inkRecognitionUrl = "/inkrecognizer/v1.0-preview/recognize"; // Replace the dataPath string with a path to the JSON formatted ink stroke data file. private static final String dataPath = "PATH_TO_INK_STROKE_DATA";
Een functie maken voor het verzenden van aanvragen
Maak een nieuwe functie met de naam
sendRequest()
die de hierboven gemaakte variabelen gebruikt. Voer vervolgens de volgende stappen uit.Maak een
CloseableHttpClient
-object waarmee aanvragen kunnen worden verzonden naar de API. Verzend de aanvraag naar eenHttpPut
-aanvraagobject door de combinatie van uw eindpunt en de Ink Recognizer-URL.Stel met behulp van
setHeader()
-functie van de aanvraag deContent-Type
-header in opapplication/json
, en voeg uw abonnementssleutel toe aan deOcp-Apim-Subscription-Key
-header.Gebruik de
setEntity()
-functie van de aanvraag voor de te verzenden gegevens.Gebruik de
execute()
-functie van de client om de aanvraag te verzenden en sla deze op in eenCloseableHttpResponse
-object.Maak een
HttpEntity
-object voor het opslaan van de inhoud van het antwoord. Haal de inhoud op metgetEntity()
. Als het antwoord niet leeg is, retourneert u het.static String sendRequest(String endpoint, String apiAddress, String subscriptionKey, String requestData) { try (CloseableHttpClient client = HttpClients.createDefault()) { HttpPut request = new HttpPut(endpoint + apiAddress); // Request headers. request.setHeader("Content-Type", "application/json"); request.setHeader("Ocp-Apim-Subscription-Key", subscriptionKey); request.setEntity(new StringEntity(requestData)); try (CloseableHttpResponse response = client.execute(request)) { HttpEntity respEntity = response.getEntity(); if (respEntity != null) { return EntityUtils.toString(respEntity, "utf-8"); } } catch (Exception respEx) { respEx.printStackTrace(); } } catch (IOException ex) { System.err.println("Exception on Anomaly Detector: " + ex.getMessage()); ex.printStackTrace(); } return null; }
Een aanvraag voor handschriftherkenning verzenden
Maak een methode met de naam recognizeInk()
om uw pennenstreekgegevens te herkennen. Roep de hierboven gemaakte sendRequest()
-methode aan met uw eindpunt, URL, abonnementssleutel en JSON-gegevens. Haal het resultaat op en druk het af naar de console.
static void recognizeInk(String requestData) {
System.out.println("Sending an Ink recognition request.");
String result = sendRequest(rootUrl, inkRecognitionUrl, subscriptionKey, requestData);
// Pretty-print the JSON result
try {
ObjectMapper objectMapper = new ObjectMapper();
Map<String, Object> response = objectMapper.readValue(result, HashMap.class);
System.out.println(objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(response));
} catch (JsonParseException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
Laad de gegevens van uw digitale handschrift en verzend de aanvraag
In de hoofdmethode van uw toepassing kunt u het JSON-bestand inlezen met de gegevens die aan de aanvragen worden toegevoegd.
Roep de functie voor handschriftherkenning aan die hierboven is gemaakt.
public static void main(String[] args) throws Exception { String requestData = new String(Files.readAllBytes(Paths.get(dataPath)), "utf-8"); recognizeInk(requestData); }
De toepassing uitvoeren en het antwoord bekijken
Voer de toepassing uit. Er wordt een geslaagd antwoord geretourneerd in JSON-indeling. U kunt ook het JSON-antwoord vinden op GitHub.
Volgende stappen
Bekijk de volgende voorbeeldtoepassingen op GitHub voor meer informatie over de werking van de Ink Recognition-API in een app voor digitaal handschrift: