Início Rápido: Reconhecer tinta digital com a API REST de Reconhecimento de Tinta Digital e o Java
Observação
A API do Reconhecimento de Tinta Digital encerrou a versão prévia em 26 de agosto de 2020. Se você tiver recursos existentes do Reconhecimento de Tinta Digital, poderá continuar a usá-los até que o serviço seja totalmente desativado em 31 de janeiro de 2021.
Use este início rápido para começar a usar a API de Reconhecimento de Tinta Digital em traços de tinta digital. Esse aplicativo Java envia uma solicitação de API que contém dados de traço de tinta formatados em JSON e obtém a resposta.
Embora esse aplicativo seja escrito em Java, a API é um serviço Web RESTful compatível com a maioria das linguagens de programação.
Normalmente, você chamará a API em um aplicativo de escrita à tinta digital. Este início rápido envia dados de traço de tinta para a amostra manuscrita a seguir de um arquivo JSON.
O código-fonte deste Início Rápido pode ser encontrado no GitHub.
Pré-requisitos
O JDK (Java™ Development Kit) 7 ou posterior.
Importar essas bibliotecas do repositório do Maven
- Pacote JSON em Java
- Pacote Apache HttpClient
Os dados de traço de tinta de exemplo deste início rápido podem ser encontrados no GitHub.
Criar um recurso do Reconhecimento de Tinta Digital
Observação
Pontos de extremidade para recursos criados após 1º de julho de 2019, use o formato de subdomínio personalizado mostrado abaixo. Para saber mais e para obter uma lista completa de pontos de extremidade regionais, confira Nomes de subdomínio personalizados para Serviços Cognitivos.
Os Serviços Cognitivos do Azure são representados por recursos do Azure que você assina. Crie um recurso para o Reconhecimento de Tinta Digital usando o portal do Azure.
Depois de criar um recurso, obtenha o ponto de extremidade e a chave abrindo o recurso no portal do Azure e clicando em Início rápido.
Criar duas variáveis de ambiente:
INK_RECOGNITION_SUBSCRIPTION_KEY
– A chave de assinatura para autenticar suas solicitações.INK_RECOGNITION_ENDPOINT
– O ponto de extremidade para seu recurso. Ele terá esta aparência:
https://<your-custom-subdomain>.api.cognitive.microsoft.com
Crie um novo aplicativo
Crie um novo projeto Java em seu IDE ou editor favorito e importe as bibliotecas a seguir.
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;
Crie variáveis para a chave de assinatura, o ponto de extremidade e o arquivo JSON. O ponto de extremidade será acrescentado posteriormente ao URI do Reconhecimento de Tinta Digital.
// 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";
Criar uma função para enviar solicitações
Crie uma função chamada
sendRequest()
que use as variáveis criadas anteriormente. Em seguida, siga estas etapas.Crie um objeto
CloseableHttpClient
que pode enviar solicitações à API. Envie a solicitação para um objeto de solicitaçãoHttpPut
combinando o ponto de extremidade e a URL de Reconhecimento de Tinta Digital.Use a função
setHeader()
da solicitação para definir o cabeçalhoContent-Type
comoapplication/json
e adicione a chave de assinatura ao cabeçalhoOcp-Apim-Subscription-Key
.Use a função
setEntity()
da solicitação para os dados a serem enviados.Use a função
execute()
do cliente para enviar a solicitação e salve-a em um objetoCloseableHttpResponse
.Crie um objeto
HttpEntity
para armazenar o conteúdo da resposta. Obtenha o conteúdo comgetEntity()
. Se a resposta não estiver vazia, retorne-a.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; }
Enviar uma solicitação de reconhecimento de tinta
Crie um método chamado recognizeInk()
para reconhecer os dados de traço de tinta. Chame o método sendRequest()
criado acima com seu ponto de extremidade, sua URL, sua chave de assinatura e seus dados JSON. Obtenha o resultado e imprima-o no 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();
}
}
Carregar os dados de tinta digital e enviar a solicitação
No método principal do aplicativo, leia o arquivo JSON que contém os dados que serão adicionados às solicitações.
Chame a função de reconhecimento de tinta criada acima.
public static void main(String[] args) throws Exception { String requestData = new String(Files.readAllBytes(Paths.get(dataPath)), "utf-8"); recognizeInk(requestData); }
Executar o aplicativo e exibir a resposta
Execute o aplicativo. Uma resposta bem-sucedida é retornada no formato JSON. Você também pode encontrar a resposta JSON no GitHub.
Próximas etapas
Para ver como a API do Reconhecimento de Tinta Digital funciona em um aplicativo de escrita à tinta digital, vejamos os seguintes aplicativos de exemplo no GitHub: