Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O exemplo de reconhecimento avançado demonstra os recursos avançados da interface de programação de aplicativo (API) do Microsoft Tablet PC Automation usada para reconhecimento de manuscrito.
Inclui as seguintes características:
- Enumerando o reconhecedor instalado
- Criando um contexto reconhecedor com uma linguagem específica
- Usando o objeto reconhecedor
- Definição de parâmetro de reconhecimento e listas de palavras
- Utilização de guias para melhorar a qualidade do reconhecimento
- Reconhecimento dinâmico de fundo
- Reconhecimento de gestos
As interfaces utilizadas são: IInkRecognizer, IInkRecoContext, IInkRecognitionResult, IInkRecognitionGuide, IInkWordList, IInkGesture, IInkCollector, IInkDisp, IInkRenderer, IInkDrawingAttributes, IInkStrokese IInkStroke.
Tinta e cabeçalhos de projeto
Primeiro, inclua os cabeçalhos para as interfaces de automação do Tablet PC. Eles são instalados com o SDK da plataforma Tablet PC. O arquivo TpcError.h contém as definições de código de erro da API do Tablet PC.
#include <msinkaut.h>
#include <msinkaut_i.c>
#include <TpcError.h>
O arquivo EventSinks.h define as interfaces de IInkEventsImpl e IInkRecognitionEventsImpl e configura osRecognitionWithAlternates , Strokee Gesture eventos.
#include "EventSinks.h"
O arquivo ChildWnds.h contém as definições das classes CInkInputWnd e CRecoOutputWnd , que são derivadas do CWindowImpl da ATL e usadas para criar as janelas filhas do exemplo.
#include "ChildWnds.h"
O arquivo AdvReco.h declara a classe CAdvRecoApp, que é a classe de janela do aplicativo para este exemplo.
#include "AdvReco.h"
Inicializando a janela do aplicativo
O método Run da janela configura o objeto CAdvRecoApp, carrega o menu e o ícone para a janela, cria um objeto InkRecognizerContext para o reconhecedor padrão e inicia o ciclo de mensagens da janela.
O método OnCreate da janela lida com o evento WM_CREATE e cria as janelas filhas. Um objeto InkCollector conecta-se à fonte de eventos do coletor de tinta e habilita a entrada de tinta na janela de entrada. Em seguida, cria um objeto InkRecognizerGuide e usa a propriedade Renderer do coletor de tinta para converter os retângulos da caixa de guia de reconhecimento em espaço de tinta. Finalmente, o método OnCreate cria um objeto InkWordList.
Manipulando eventos do coletor de tinta
O método OnStroke da janela manipula o eventoStrokedo coletor de tinta. O novo objeto IInkStrokeDisp é adicionado ao InkStrokes da propriedade Ink do coletor de tinta.
O método OnGesture da janela manipula o evento Gesture do coletor de tinta. O método OnGesture identifica o gesto, usando primeiro o gesto de maior confiança, e verifica se a janela suporta esse gesto específico. Se o gesto for suportado, a caixa delimitadora do gesto será invalidada, pois o gesto será removido da coleção de gestos. Se o gesto não for suportado, o evento Gesture será cancelado, causando o coletor de tinta a gerar um evento Traçado. Finalmente, a janela de resultados é atualizada.
Manipulando eventos de contexto do reconhecedor
O método OnRecognitionWithAlternates da janela manipula o evento RecognitionWithAlternates do contexto do reconhecedor. O método OnRecognitionWithAlternates exibe os resultados do reconhecimento na janela de resultados.
Manipulando comandos de menu
O método OnRecognizer da janela manipula os comandos no menu Recognizer. Se o comando Default foi selecionado, o GetDefaultRecognizer método do InkRecognizers é usado para recuperar o reconhecedor padrão; caso contrário, o reconhecedor selecionado será recuperado. Em seguida, um contexto reconhecedor é criado e usado, e o menu e a barra de status são atualizados.
O método OnFactoidWordlist da janela manipula o comando Use Wordlist no menu Factoid. A propriedadeStrokesdo contexto do reconhecedor é definida como NULL para redefinir o contexto do reconhecedor. Se a opção Usar Wordlist estiver desativada, a propriedade WordList do contexto do reconhecedor será definida como NULL; caso contrário, a propriedade WordList do contexto do reconhecedor será definida como o InkWordList que foi criado no método OnCreate. Finalmente, os InkStrokes do coletor de tinta são reanexados ao contexto do reconhecedor, o método BackgroundRecognizeWithAlternates do contexto do reconhecedor é chamado, e o menu é atualizado.
O método OnFactoid da janela lida com os comandos factoid no menu Factoid. Primeiro, define a propriedade Strokes do contexto do reconhecedor como NULL, define a propriedade Factoid do contexto do reconhecedor para o factoide selecionado e reatribui a InkStrokes do coletor de tinta ao contexto do reconhecedor. Se o objeto Factoid for suportado pelo contexto do reconhecedor, será chamado o método BackgroundRecognizeWithAlternates do contexto do reconhecedor; caso contrário, será exibida uma mensagem de erro. Finalmente, o menu e a barra de status são atualizados.
O método OnGuide da janela manipula os comandos no menu Guia do. Se o contexto do reconhecedor oferecer suporte às opções do guia, o método OnGuide definirá a propriedade Strokes do contexto do reconhecedor como NULL , definirá a propriedadeGuia dodo contexto do reconhecedor para a configuração de guia selecionada, reatribuirá o InkStrokes do do coletor de tinta ao contexto do reconhecedor e chamará o método de BackgroundRecognizeWithAlternates do contexto do reconhecedor. Caso contrário, uma mensagem de erro será exibida. Finalmente, a janela de entrada, o menu e a barra de status são atualizados.
O método OnMode da janela manipula os comandos no menu Modo. Ele desativa o coletor de tinta, atualiza a propriedade CollectionMode do coletor de tinta, atualiza o menu e mostra ou oculta as listas de gestos. Finalmente, o coletor de tinta está ativado.
O método OnRecognize da janela manipula o comando Recognize no menu Ink. Chama o método EndInkInput do contexto do reconhecedor para impedir a adição de tinta ao contexto do reconhecedor. Por vezes, isto é necessário, uma vez que nem todos os reconhecedores suportam o reconhecimento parcial. Em seguida, ele chama o método Recognize do contexto do reconhecedor e passa os resultados para o método OnRecognitionWithAlternates da janela. Finalmente, os InkStrokes do coletor de tinta são reatribuídos ao contexto do reconhecedor.
O método OnClear da janela executa o comando Clear no menu Ink. Ele remove os traçados da propriedade Ink do coletor de tinta, libera a coleção antiga de traçados e cria uma nova para a propriedade Ink do coletor de tinta. Em seguida, anexa a nova coleção de traçados ao contexto do reconhecedor.
O método OnExit da janela manipula o comando Exit no menu Ink e gera o evento WM_CLOSE.
Métodos auxiliares
O método LoadMenu da janela é chamado a partir do método Run da janela e adiciona ao menu a lista de reconhecedores suportados e a lista de factoids suportados. Primeiro, ele recupera o InkRecognizers. Em seguida, itera através dos reconhecedores disponíveis e seleciona apenas aqueles que têm uma lista de idiomas na propriedade Idiomas, que adiciona ao menu Reconhecedor. Finalmente, preenche o menu Factoid com a lista de factoides definidos como uma constante global.
O método UseRecognizer da janela é invocado pelo método OnRecognizer da janela quando o utilizador seleciona um novo reconhecedor. Ele cria um contexto reconhecedor, separa o contexto antigo do coletor de eventos do reconhecedor, limpa e libera o contexto antigo e anexa o novo contexto ao coletor de eventos do reconhecedor.
Em seguida, o método UseRecognizer verifica a propriedade Capabilities do reconhecedor, que retorna um valor InkRecognizerCapabilities. Se o reconhecedor suportar entrada de linhas, o comando Lines no menu Guia estará ativado. Se o reconhecedor suportar entrada em caixa, o comando Boxes está ativado. Se o reconhecedor não suportar entrada livre, o comando Nenhum será desativado. Se a seleção atual do guia não for suportada, tanto a propriedade Guia do contexto do reconhecedor quanto o menu serão atualizados.
Em seguida, o método UseRecognizer tenta definir as propriedades WordList e Factoid do contexto do reconhecedor. Se qualquer uma das configurações não for suportada pelo reconhecedor, o valor padrão será usado e o menu será atualizado.
Finalmente, o método UseRecognizer anexa a propriedade Strokes do objeto InkDisp do coletor de tinta ao contexto do reconhecedor, altera a fonte da janela de saída para uma suportada pelo idioma do reconhecedor, redefine a janela de saída e atualiza os resultados do reconhecimento chamando o método BackgroundRecognizeWithAlternates do contexto do reconhecedor.
O método GetGestureName da janela é chamado a partir do método OnGesture da janela. Ele procura o gesto e retorna um índice para o nome do gesto, que é armazenado em uma tabela de cadeia de caracteres no arquivo AdvReco.rc.