Compartilhar via


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.

uma imagem de um texto manuscrito

O código-fonte deste Início Rápido pode ser encontrado no GitHub.

Pré-requisitos

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

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

  1. Crie uma função chamada sendRequest() que use as variáveis criadas anteriormente. Em seguida, siga estas etapas.

  2. Crie um objeto CloseableHttpClient que pode enviar solicitações à API. Envie a solicitação para um objeto de solicitação HttpPut combinando o ponto de extremidade e a URL de Reconhecimento de Tinta Digital.

  3. Use a função setHeader() da solicitação para definir o cabeçalho Content-Type como application/json e adicione a chave de assinatura ao cabeçalho Ocp-Apim-Subscription-Key.

  4. Use a função setEntity() da solicitação para os dados a serem enviados.

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

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

  1. No método principal do aplicativo, leia o arquivo JSON que contém os dados que serão adicionados às solicitações.

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