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.

uma imagem de texto manuscrito

O código-fonte para este arranque rápido pode ser encontrado no GitHub.

Pré-requisitos

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

  1. 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;
    
  2. 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

  1. Criar uma nova função chamada sendRequest() que leva as variáveis criadas acima. Em seguida, execute os seguintes passos.

  2. Crie um CloseableHttpClient objeto que possa enviar pedidos para a API. Envie o pedido para um HttpPut objeto de pedido combinando o seu ponto final e o URL do Reconhecedor de Tinta.

  3. Utilize a função do setHeader() pedido para definir o Content-Type cabeçalho para , e adicione a application/jsonsua chave de subscrição ao Ocp-Apim-Subscription-Key cabeçalho.

  4. Utilize a função do setEntity() pedido para os dados a enviar.

  5. Use a função do execute() cliente para enviar o pedido e guarde-o para um CloseableHttpResponse objeto.

  6. Crie um HttpEntity objeto para armazenar o conteúdo da resposta. Obtenha o conteúdo com getEntity(). 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

  1. No método principal da sua aplicação, leia no ficheiro JSON contendo os dados que serão adicionados aos pedidos.

  2. 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: