Quickstart: Reconhecer tinta digital com a API e Java do Reconhecimento de Tinta
Nota
A API do Reconhecimento de Tinta terminou a sua pré-estreia no dia 26 de agosto de 2020. Se tiver os recursos existentes do Ink Recogniser, pode continuar a usá-los até que o serviço seja totalmente reformado a 31 de janeiro de 2021.
Utilize este arranque rápido para começar a utilizar a API do Reconhecimento de Tinta em traços de tinta digitais. Esta aplicação Java envia um pedido de API contendo dados de traçado de tinta com formato JSON, e obtém a resposta.
Embora esta aplicação esteja escrita em Java, a API é um serviço web RESTful compatível com a maioria das linguagens de programação.
Normalmente, você chamaria a API de uma aplicação digital de tinta. Este quickstart envia dados de traçado de tinta para a seguinte amostra manuscrita a partir de um ficheiro JSON.
O código-fonte para este arranque rápido pode ser encontrado no GitHub.
Pré-requisitos
O Kit de Desenvolvimento de Java™ (JDK) 7 ou mais tarde.
Importe estas bibliotecas do Repositório de Maven
Os dados de traçado de tinta de exemplo para este arranque rápido podem ser encontrados no GitHub.
Criar um recurso de Reconhecimento de Tinta
Nota
Os pontos finais para recursos criados após 1 de julho de 2019 utilizam o formato de subdomínio personalizado apresentado abaixo. Para mais informações e uma lista completa de pontos finais regionais, consulte os nomes de subdomínio personalizados para Serviços Cognitivos.
Os Serviços Cognitivos Azure são representados por recursos Azure que subscreve. Crie um recurso para o Reconhecimento de Tinta utilizando o portal do Azure.
Depois de criar um recurso, obtenha o seu ponto final e a chave abrindo o seu recurso no portal do Azure e clicando em início rápido.
Criar duas variáveis ambientais:
INK_RECOGNITION_SUBSCRIPTION_KEY
- A chave de subscrição para autenticar os seus pedidos.INK_RECOGNITION_ENDPOINT
- O ponto final do seu recurso. Terá o seguinte aspeto:
https://<your-custom-subdomain>.api.cognitive.microsoft.com
Criar uma nova aplicação
Crie um novo projeto Java no seu IDE ou editor favorito e importe as seguintes bibliotecas.
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 sua chave de subscrição, ponto final e ficheiro JSON. O ponto final será posteriormente anexado ao URI do reconhecimento de tinta.
// 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 pedidos
Criar uma nova função chamada
sendRequest()
que leva as variáveis criadas acima. Em seguida, execute os seguintes passos.Crie um
CloseableHttpClient
objeto que possa enviar pedidos para a API. Envie o pedido para umHttpPut
objeto de pedido combinando o seu ponto final e o URL do Reconhecedor de Tinta.Utilize a função do
setHeader()
pedido para definir oContent-Type
cabeçalho para , e adicione aapplication/json
sua chave de subscrição aoOcp-Apim-Subscription-Key
cabeçalho.Utilize a função do
setEntity()
pedido para os dados a enviar.Use a função do
execute()
cliente para enviar o pedido e guarde-o para umCloseableHttpResponse
objeto.Crie um
HttpEntity
objeto para armazenar o conteúdo da resposta. Obtenha o conteúdo comgetEntity()
. Se a resposta não estiver vazia, devolva-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 um pedido de reconhecimento de tinta
Crie um método chamado recognizeInk()
para reconhecer os seus dados de traçado de tinta. Ligue para o sendRequest()
método acima criado com os seus dados de ponto final, url, subscrição e json. Obtenha o resultado e imprima-o na 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();
}
}
Carregue os seus dados de tinta digital e envie o pedido
No método principal da sua aplicação, leia no ficheiro JSON contendo os dados que serão adicionados aos pedidos.
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 a aplicação e ver a resposta
Execute a aplicação. Uma resposta bem sucedida é devolvida no formato JSON. Também pode encontrar a resposta JSON no GitHub.
Passos seguintes
Para ver como funciona a API de Reconhecimento de Tinta numa aplicação digital de tinta, veja as seguintes aplicações de amostra no GitHub: