5

El problema es un poco diferente que el reconocimiento de escritura tradicional. Tengo un conjunto de datos que son miles de los siguientes. Para un personaje dibujado, tengo varias coordenadas secuenciales (x, y) donde presioné el lápiz hacia abajo. Entonces, este es un problema secuencial (temporal).¿Cómo se pueden usar HMM para el reconocimiento de escritura a mano?

Quiero ser capaz de clasificar los caracteres escritos a mano en base a estos datos, y me encantaría implementar HMM para fines de aprendizaje. Pero, ¿es este el enfoque correcto? ¿Cómo pueden ser utilizados para hacer esto?

+0

Esa es una idea realmente interesante. Por curiosidad, ¿se registra también la coordenada de tiempo de cada punto (por lo que a una coordenada de milisegundos 1 se presionó 30 x 45) o solo están en orden secuencial? – Turnsole

+0

Actualmente solo es secuencial. Estaba pensando en hacer un poco de deformación dinámica del tiempo para dar cuenta de los caracteres que se dibujan más lento/más rápido – zebra

+0

Creo que este es el enfoque correcto. Podrías comenzar, como práctica, por reconocer el alfabeto [palm graffite] (http://en.wikipedia.org/wiki/Graffiti_%28Palm_OS%29). – Maurits

Respuesta

2

Este problema es en realidad una mezcla de dos problemas:

  1. reconocer a un personaje de sus datos
  2. reconocer una palabra de una secuencia (ruidoso) de caracteres

Se utiliza un HMM para encontrar la secuencia más probable de un número finito de estados discretos a partir de mediciones ruidosas. Este es exactamente el problema 2, ya que las mediciones ruidosas de los estados discretos a-z, 0-9 se suceden en una secuencia.

Para el problema 1, un HMM es inútil porque no está interesado en la secuencia subyacente. Lo que desea es aumentar su dígito manuscrito con información sobre cómo lo escribió.

Personalmente, comenzaría por implementar un reconocimiento de escritura a mano de última generación que ya es muy bueno (con redes neuronales convolucionales o aprendizaje profundo). Después de eso, puede agregar información sobre cómo se escribió, por ejemplo, en sentido horario/antihorario.

3

Creo que HMM se puede utilizar en ambos problemas mencionados por @jens. También estoy trabajando en la escritura en línea, y HMM se usa en muchos artículos. El enfoque más simple es el siguiente:

  1. Seleccione una función.
  2. Si la característica seleccionada es continua, conviértala a discreto.
  3. Elija los parámetros de HMM: Topología y # de estados.
  4. Entrenar modelos de caracteres usando HMM. un modelo para cada clase.
  5. Prueba usando el juego de prueba.

para cada elemento:

  1. la característica más simple es el ángulo del vector que conecta puntos consecutivos. Puede utilizar características más complicadas como los ángulos de vectores obtenidos por Douglas & Algoritmo de Peucker.
  2. la forma más simple para la discretización es usar códigos de Freeman, pero los algoritmos de agrupamiento como k-means y GMM también se pueden usar.
  3. Topologías HMM: Ergodic, Izquierda-Derecha, Bakis y Linear. # de estados se pueden obtener por prueba & error. Los parámetros HMM pueden ser variables para en cada modelo. # de observaciones se determina por discretización. muestras de observación pueden tener longitud variable.
  4. Recomiendo Kevin Murphy HMM toolbox.
  5. Buena suerte.
Cuestiones relacionadas