Introducción al análisis de lápiz
Las API inkAnalysis proporcionan a los desarrolladores de Tablet PC herramientas eficaces para examinar mediante programación la entrada de lápiz. La API clasifica la entrada de lápiz en categorías significativas, como palabras, líneas, párrafos y dibujos.
Puede usar cada clasificación de varias maneras, incluida la mejora de los resultados de reconocimiento para la escritura a mano.
Conceptos básicos de análisis de lápiz
En esta sección se presenta la tecnología de análisis de tinta tablet PC Platform y se explica cuándo y cómo usarlo.
Las API inkAnalysis combinan eficazmente dos tecnologías distintas pero gratuitas: reconocimiento de escritura a mano y clasificación de diseño. La combinación de estas dos tecnologías da resultados definitivamente mayores que las partes tomadas por sí solas.
El reconocimiento de escritura a mano es el análisis computacional de la tinta digital manuscrita para devolver la interpretación basada en caracteres en un idioma determinado. Es decir, el reconocimiento de escritura a mano es cómo el equipo "lee" la escritura a mano de una persona.
El análisis de entrada de lápiz se puede dividir aún más en la clasificación de entrada de lápiz y el análisis de diseño. La clasificación de entrada de lápiz es la división computacional de la entrada de lápiz en unidades semánticamente significativas, como párrafos, líneas, palabras y dibujos. El análisis de diseño es el examen computacional de la entrada de lápiz para determinar la posición de la entrada de lápiz en la superficie de entrada manuscrita y cómo se relacionan los trazos entre sí espacial e incluso semánticamente. Por ejemplo, el análisis de diseño puede avisarle que una parte determinada de entrada de lápiz es una anotación o una llamada.
Reconocimiento
Un ejemplo de cómo la combinación de reconocimiento con el análisis de entrada de lápiz en InkAnalysis API ayuda al desarrollador a mejorar los resultados del reconocimiento. Los motores de reconocimiento de escritura a mano de Tablet PC se han diseñado principalmente para reconocer una sola línea horizontal de tinta. Sin embargo, las personas tienden a escribir varias líneas al tomar notas y no se garantiza que esas líneas sean horizontales en relación con la página. Con inkAnalysis API, el analizador de lápiz preprocesa la entrada de lápiz antes de enviarse al reconocedor. La entrada de lápiz analizada se transforma en horizontal antes de ser reconocida, lo que mejora los resultados del reconocimiento.
Otras ventajas para el reconocimiento se derivan al hacer que el analizador de lápiz corrija la información de orden de trazos incorrecta antes de enviar la entrada de lápiz al reconocedor. Además, los resultados del reconocimiento ahora están disponibles de forma selectiva. Es decir, el desarrollador puede recuperar rápidamente los resultados de reconocimiento de una sola palabra, línea o párrafo en una sola llamada.
Clasificación de entrada de lápiz
Hay, por supuesto, una variedad de escenarios en los que puede mantener intactos los datos de entrada de lápiz, en lugar de convertirlos inmediatamente en texto. El análisis de entrada de lápiz también proporciona ventajas aquí. En concreto, las API inkAnalysis proporcionan la capacidad de dividir trazos de lápiz según si están escribiendo o dibujando. Los trazos de lápiz que se clasifican como escritura son aquellos que componen una palabra o caracteres. Todos los demás trazos son dibujos. Esto le proporciona una nueva manera de acceder a los datos de entrada de lápiz, lo que permite nuevos escenarios de usuario. Por ejemplo, puede implementar la selección para que sea diferente en función del tipo de trazo en el que pulsa el usuario; si un usuario pulsa un trazo de escritura, la aplicación selecciona todo el conjunto de trazos que componen la palabra, si el usuario pulsa un dibujo, la aplicación selecciona solo ese trazo.
Análisis de diseño
El análisis de diseño útil va mucho más allá del desglose relativamente simple de la entrada de lápiz en la escritura y los componentes de dibujo.
El análisis de tinta también incluye un desglose más completo de los trazos de escritura y dibujo. Como ejemplo muy sencillo, tome un blob de entrada de lápiz como se muestra en la ilustración siguiente.
Una vez que la plataforma ha analizado estos trazos, devuelve una representación de árbol de estos trazos, como se muestra en la ilustración siguiente. Para este sencillo caso, el árbol solo contiene información de párrafo, línea y palabra, pero la riqueza de este árbol aumenta a medida que aumenta la complejidad del documento de entrada de lápiz.
Dado que esta información ahora está separada en unidades administrables, ahora puede crear características más eficaces. Por ejemplo, la aplicación puede ampliar la característica en la que el usuario pulsa para seleccionar una palabra en una característica en la que el usuario pulsa una vez para seleccionar la palabra, pulsa dos veces para seleccionar toda la línea y pulsa tres veces para seleccionar todo el párrafo. Al aprovechar la estructura de árbol devuelta por la operación de análisis, la aplicación puede relacionar el área pulsada de nuevo con un trazo en el árbol. Una vez que la aplicación encuentra un trazo, puede subir el árbol para determinar cómo y qué trazos vecinos seleccionar.
La selección de una línea completa es un ejemplo simplista de las ventajas del análisis de tinta, pero las posibilidades se convierten en excelentes cuando se tienen en cuenta los diferentes tipos de estructuras jerárquicas que el analizador de tinta puede detectar:
- Listas ordenadas y sin ordenar
- Formas
- Comentarios anotativos escritos en línea con el texto
Los tipos de características varían de la aplicación a la aplicación y se basan en los requisitos y los motores de análisis y reconocimiento de tinta disponibles.
Características de análisis de entrada de lápiz clave
Las funcionalidades clave de InkAnalysis API incluyen las siguientes características:
- Análisis incremental
- Persistencia
- Proxy de datos
- Conciliación
- Extensibilidad
Análisis incremental
Cuando los usuarios finales trabajan con tinta, normalmente lo tratan como escritura a mano. La entrada de lápiz está sujeta continuamente a operaciones de edición, como la adición de nueva entrada de lápiz, la eliminación de la entrada de lápiz existente y la modificación de las propiedades de entrada de lápiz, todo ello de la misma manera que la escritura a mano se edita continuamente. Estas operaciones de edición afectan a los resultados del análisis. Cuando se producen modificaciones, normalmente se pueden aislar en secciones del documento en momentos específicos. Por ejemplo, supongamos que un usuario escribe cinco líneas de entrada de lápiz. La forma estándar en que las aplicaciones analizan la entrada de lápiz es esperar hasta que el usuario haya terminado de escribir las cinco líneas de entrada de lápiz (un párrafo, por ejemplo) y, a continuación, analizar los resultados, ya sea de forma sincrónica o asincrónica.
Puede optimizar el tiempo total dedicado a analizar estas cinco líneas al aislar las áreas que se analizan a medida que se escriben y, a continuación, volver a analizar solo las partes de los resultados que han cambiado. Después de analizar la primera línea, nunca se volverá a reconocer a menos que el usuario final lo modifique. El reconocimiento de la segunda línea se trata como una operación de reconocimiento independiente.
Este enfoque incremental funciona bien en el nivel de línea para las operaciones de reconocimiento, pero debe funcionar en un nivel superior para la operación de análisis de entrada de lápiz. Dado que el analizador de tinta puede detectar clasificaciones de nivel superior diferentes para estas cinco líneas de entrada de lápiz (por ejemplo, podría ser un párrafo estándar o cinco elementos de una lista), el enfoque incremental para el analizador de tinta es que tiene que analizar estas estructuras superiores. Es decir, después de que el analizador de tinta clasifique la primera línea de entrada de lápiz como una línea, comprueba que sigue siendo una línea cuando clasifica la segunda línea. Sin embargo, el analizador de tinta aísla esta comprobación doble en el párrafo y omite el primer párrafo al analizar un segundo párrafo, tratando el segundo párrafo como una operación independiente del analizador de tinta. Este enfoque incremental para el análisis ahorra considerablemente el tiempo de procesamiento cuando ya existen grandes cantidades de entrada de lápiz en la aplicación.
Persistencia
El análisis incremental funciona bien dentro de una sesión o instancia determinada de un objeto InkAnalyzer . Sin embargo, las API de la plataforma tablet PC de primera generación no pueden realizar análisis incrementales después de que la entrada de lápiz se conserve en el disco. InkAnalysis API permite guardar la entrada de lápiz en el disco junto con una forma persistente de los resultados del análisis. Los resultados del análisis se pueden cargar cuando se carga la entrada de lápiz y se pueden insertar en una nueva instancia de inkAnalyzer. Una nueva instancia del objeto InkAnalyzer tiene el mismo estado de resultados que tenía anteriormente y ahora puede aceptar cualquier modificación como cambios incrementales en el estado existente, en lugar de analizar todo de nuevo.
Proxy de datos
Muchas aplicaciones ya tienen algún tipo de estructura de documentos existente en sus aplicaciones; por ejemplo, un gráfico o una base de datos. InkAnalyzer también presenta resultados en un formulario estructurado, en un árbol de objetos ContextNode. La estructura InkAnalyzer y la estructura existente de la aplicación deben interoperar en dos direcciones: los resultados se extraen de InkAnalyzer en la aplicación y el estado se inserta desde la aplicación en InkAnalyzer.
Si extraer los resultados de InkAnalyzer en la estructura de la aplicación fuera todo lo necesario, sería relativamente sencillo. Las aplicaciones recorren en iteración el árbol de resultados y copian (integran) todas las partes de los resultados que necesitan en su estructura de datos existente. Sin embargo, dado que muchas aplicaciones horizontales requieren análisis incrementales y persistencia en el disco, el problema se convierte en bidireccional. El estado (resultados anteriores) debe extraerse de la estructura de la aplicación e insertarse en InkAnalyzer.
Para cumplir este requisito, InkAnalyzer contiene una serie de eventos que genera en el momento adecuado durante una operación de análisis para permitir que las aplicaciones proxyen la solicitud de datos a sus estructuras existentes. Estos eventos solo se generan para los objetos ContextNode requeridos por la operación incremental.
Conciliación
La mayoría de las aplicaciones querrán analizar la entrada de lápiz en segundo plano para mantener las interrupciones de la interfaz de usuario en un mínimo. El análisis de la entrada de lápiz en segundo plano provoca problemas, sin embargo, si el usuario cambia la entrada de lápiz (o la entrada de lápiz vecina) que se está analizando. Por ejemplo, si el usuario elimina la entrada de lápiz durante la operación en segundo plano, la estructura resultante reflejaría el estado del documento cuando se inició la operación en segundo plano, en lugar de cuando se completó.
Para ayudar a las aplicaciones, InkAnalyzer reconcilia las diferencias en el estado del documento entre el principio y el final de la operación de análisis. Los cambios realizados por el usuario o la aplicación mientras el análisis se ejecuta en segundo plano siempre invalidan los resultados calculados en segundo plano. Después de la conciliación, solo se notifican las partes de la estructura de resultados que no entran en conflicto con los cambios de documento y los trazos en conflicto se etiquetan para el análisis futuro. La próxima vez que se ejecute la operación de análisis en segundo plano, los resultados se vuelven a calcular en función del nuevo estado.
En el siguiente diagrama se muestra el proceso. El tiempo se expresa linealmente de arriba abajo en el diagrama.
- En el momento 1 (t1), la aplicación recopila tinta del usuario final, incluido cualquier tipo de modificación de entrada de lápiz, como agregar, quitar o modificar.
- En t2, la aplicación invoca la operación de análisis en segundo plano. InkAnalyzer determina qué entrada de lápiz no tiene resultados y qué tinta debe comprobarse dos veces. Copia los datos de entrada de lápiz necesarios para permitir que el subproceso en segundo plano se ejecute de forma independiente.
- En t3, InkAnalyzer devuelve la ejecución del subproceso de interfaz de usuario a la aplicación. InkAnalyzer crea un segundo subproceso, el subproceso de análisis en segundo plano y los motores de análisis de tinta y reconocimiento analizan los datos de entrada de lápiz copiados.
- Mientras se produce la operación de análisis en el segundo subproceso en segundo plano, el usuario final continúa editando el documento, agregando y quitando datos de trazo, en t4 y t5. Estas modificaciones pueden entrar en conflicto con el trabajo que se está procesando en segundo plano.
- En t6, el subproceso en segundo plano ha finalizado la operación de análisis y los resultados están listos. Antes de que InkAnalyzer comunique los resultados a la aplicación, ejecuta un algoritmo de conciliación para determinar si los cambios realizados por el usuario mientras se calculaba la operación de análisis (t4 y t5) entran en conflicto con los resultados. Si se detectan colisiones, los trazos en colisión se marcan para su reanálisis, lo que ocurre la próxima vez que la aplicación invoca la operación de análisis en segundo plano.
- Por último, en t7, con todas las colisiones detectadas, InkAnalyzer presenta los resultados a la aplicación.
Extensibilidad
Las API de InkAnalysis permiten que las aplicaciones usen nuevos tipos de motores de análisis, de forma que impida que la aplicación tenga que volver a escribir todas las ventajas de inkAnalysis API, incluida la conciliación, el proxy de datos, la persistencia y el análisis incremental.
Temas relacionados