Inicio rápido: Reconocimiento de la entrada de lápiz digital con la API REST Ink Recognizer y Java
Nota
La API Ink Recognizer ha finalizado su versión preliminar el 26 de agosto de 2020. Si tiene recursos existentes de Ink Recognizer, puede seguir utilizándolos hasta que el servicio se retire completamente, el 31 de enero de 2021.
Use este inicio rápido para empezar a usar la API Ink Recognizer en trazos de entrada de lápiz digital. Esta aplicación de Java envía una solicitud de API que contiene los datos del trazo de entrada de lápiz con formato JSON y obtiene la respuesta.
Si bien esta aplicación está escrita en Java, la API es un servicio web RESTful compatible con la mayoría de los lenguajes de programación.
Normalmente se llamaría a la API desde una aplicación de entrada de lápiz digital. En este inicio rápido se envían los datos del trazo de entrada de lápiz digital para la siguiente muestra escrita a mano desde un archivo JSON.
El código fuente de este inicio rápido está disponible en GitHub.
Prerrequisitos
Kit de desarrollo de Java™ (JDK) 7 o posterior.
Importación de estas bibliotecas desde el repositorio de Maven
- Paquete de JSON en Java
- Paquete de Apache HttpClient
Los datos de trazo de entrada de lápiz para este inicio rápido se pueden encontrar en GitHub.
Creación de un recurso de Ink Recognizer
Nota
Los puntos de conexión de los recursos creados después del 1 de julio de 2019 usan el formato de subdominio personalizado que se muestra a continuación. Para más información y para obtener una lista completa de los puntos de conexión regionales, consulte Nombres de subdominios personalizados para Cognitive Services.
Los servicios de Azure Cognitive Services se representan por medio de recursos de Azure a los que se suscribe. Cree un recurso para Ink Recognizer mediante Azure Portal.
Después de crear un recurso, obtenga el punto de conexión y la clave; para ello, abra el recurso en Azure Portal y haga clic en Inicio rápido.
Cree dos variables de entorno:
INK_RECOGNITION_SUBSCRIPTION_KEY
: la clave de suscripción para autenticar las solicitudes.INK_RECOGNITION_ENDPOINT
: el punto de conexión del recurso. Tendrá el siguiente aspecto:
https://<your-custom-subdomain>.api.cognitive.microsoft.com
Creación de una aplicación
Cree un proyecto de Java en su IDE o editor favorito e importe las bibliotecas siguientes.
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;
Cree variables para la clave de suscripción y el punto de conexión, y el archivo JSON. El punto de conexión se anexará más adelante al identificador URI de 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";
Creación de una función para enviar solicitudes
Cree una función llamada
sendRequest()
que adopte las variables creadas anteriormente. Después, lleve a cabo los siguiente pasos.Cree un objeto
CloseableHttpClient
que pueda enviar solicitudes a la API. Envíe la solicitud a un objeto de solicitudHttpPut
mediante la combinación del punto de conexión y la dirección URL de Ink Recognizer.Use la función
setHeader()
de la solicitud para establecer el encabezadoContent-Type
enapplication/json
y agregue su clave de suscripción al encabezadoOcp-Apim-Subscription-Key
.Use la función
setEntity()
de la solicitud para los datos que se van a enviar.Use la función
execute()
del cliente para enviar la solicitud y guárdela en un objetoCloseableHttpResponse
.Cree un objeto
HttpEntity
para almacenar el contenido de respuesta. Obtenga el contenido congetEntity()
. Si la respuesta no está vacía, se devuelve.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; }
Envío de una solicitud de reconocimiento de entada de lápiz
Cree un método llamado recognizeInk()
para reconocer los datos de trazo de la entrada de lápiz. Llame al método sendRequest()
creado anteriormente con el punto de conexión, dirección URL, la clave de suscripción y datos JSON. Obtenga el resultado e imprímalo en la consola.
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();
}
}
Carga de los datos de entrada de lápiz digital y envío de la solicitud
En el método main de la aplicación, lea el archivo JSON que contiene los datos que se agregarán a las solicitudes de lectura.
Llame a la función de reconocimiento de la entrada de lápiz que creó anteriormente.
public static void main(String[] args) throws Exception { String requestData = new String(Files.readAllBytes(Paths.get(dataPath)), "utf-8"); recognizeInk(requestData); }
Ejecución de la aplicación y visualización de la respuesta
Ejecute la aplicación. Se devuelve una respuesta correcta en formato JSON. También puede encontrar la respuesta JSON en GitHub.
Pasos siguientes
Para ver el funcionamiento de la API Ink Recognition en una aplicación de entrada de lápiz digital, eche un vistazo a las siguientes aplicaciones de ejemplo en GitHub: