Compartir a través de


Formulario de papel digitalizado de análisis de tinta

En este ejemplo se muestra cómo usar El análisis de lápiz para crear una aplicación de relleno de formularios, donde el formulario se basa en un formulario de papel escaneado.

Características demostradas

En esta aplicación de ejemplo se muestran las siguientes características de Ink Analysis API y los controles de lápiz de Windows Forms:

  • Cargando un formulario de papel escaneado. El ejemplo importa el formulario a partir de una imagen en formato .png.
  • Recopilación y representación de tinta sobre el formulario escaneado.
  • Usar un objeto InkAnalyzer para analizar la escritura a mano.
  • Generar objetos AnalysisHintNode para mejorar los resultados de escritura a mano.
  • Rellenar cuadros de texto a partir de sugerencias de análisis.
  • Crear una experiencia básica de corrección de texto.

Referencias del proyecto

El ejemplo está disponible como una aplicación de Windows Forms o Windows Presentation Foundation. Las referencias de la versión de Windows Forms:

  • Microsoft.Ink.dll
  • Microsoft.Ink.Analysis.dll

La versión Windows Presentation Foundation hace referencia a IAWinFX.dll además de los archivos DLL de Windows Presentation Foundation principales.

Nota

La versión Windows Presentation Foundation de este ejemplo (que se encuentra en el directorio XAML) requiere que las extensiones de Windows Presentation Foundation para Microsoft Visual Studio 2005 se instalen en el sistema.

 

Interfaz de usuario

La interfaz de usuario de esta aplicación consta de un control TabControl con dos objetos TabPage asociados: Formulario de entrada de lápiz y Formulario de texto convertido. La pestaña Formulario de entrada de lápiz contiene

  • Panel que contiene una imagen de un formulario de papel escaneado utilizado para tomar mensajes telefónicos.
  • Una casilla que tiene la aplicación muestra los límites de sugerencias de análisis cuando está seleccionado.
  • Un par de botones, Borrar y Analizar, que borran la entrada de lápiz del formulario e inicializan el análisis de tinta.

El formulario de texto convertido contiene la misma imagen y es la página en la que la aplicación muestra el texto reconocido. Al hacer clic en Analizar, la aplicación realiza análisis de tinta de forma sincrónica y los resultados del reconocimiento aparecen en la pestaña Formulario de texto convertido.

Funcionalidad

Esta aplicación usa inkOverlay para habilitar la escritura. El objeto InkOverlay es adecuado para tomar notas y escribir básico. El uso previsto principal de este objeto es mostrar la entrada de lápiz como entrada de lápiz. La clase principal para el análisis de tinta es la clase InkAnalyzer . Cuando se llama al método Analyze del objeto InkAnalyzer, el análisis de tinta se produce de forma sincrónica.

La aplicación inicializa dos matrices, una de cadenas y una de rectángulos. La matriz de cadenas , factoidStrings, se compone de objetos Factoid que se pasan a InkAnalyzer como objetos AnalysisHintNode . Los objetos AnalysisHintNode se inclinan por InkAnalyzer hacia una entrada determinada. En este ejemplo se usan las sugerencias de fecha, hora y teléfono, así como otras.

Cada AnalysisHintNode está asociado a un área específica del formulario. Las áreas se representan mediante la matriz de rectángulos, rects. Al crear un TextBox para cada rectángulo, el ejemplo genera el texto reconocido en la ubicación correcta.

        private void InitHints()
        {
            // Instantiate the collection of TextBoxes.
            this.textBoxes = new ArrayList();

            // For each Rectangle in Rectangles
            for (int i = 0; i < rects.Length; i++)
            {

                Rectangle rectangle = rects[i];

                // Create an AnalysisHintNode with the bounds of the Rectangle.  The bounds
                // of an AnalysisHintNode gives clues to the handwriting recognizer about
                // the way Strokes are grouped together.
                AnalysisHintNode hint = this.analyzer.CreateAnalysisHint(rectangle);

                // Set the corresponding Factoid on the AnalysisHintNode.  This gives the 
                // recognizer clues about the meaning of the strokes within the 
                // AnalysisHintNode's region.
                hint.Factoid = factoidStrings[i];

                // Create a corresponding TextBox where the results of the analysis
                // associated with this AnalysisHintNode will be displayed.  Store the reference
                // to the TextBox in the textBoxes Collection.
                this.textBoxes.Add(InitTextBox(hint));
            }
        }

Después de eso, es simplemente una cuestión de crear un controlador de eventos que desencadena el análisis de entrada de lápiz cuando el usuario hace clic en Analizar.

        private void UpdateTextBoxes()
        {
            // Get the AnalysisHintNodes that we previously added to the InkAnalyzer.
            ContextNodeCollection hints = this.analyzer.GetAnalysisHints();

            for (int i = 0; i < hints.Count; i++)
            {
                // Get the recognized string from the AnalysisHintNode
                string analyzedString = ((AnalysisHintNode)hints[i]).GetRecognizedString();

                // If we found a string, set the contents of the TextBox
                // to that string.
                if (analyzedString != null)
                {
                    ((TextBox)this.textBoxes[i]).Text = analyzedString;
                }
            }
        }