5

Le problème est un peu différent de la reconnaissance traditionnelle de l'écriture manuscrite. J'ai un ensemble de données qui sont des milliers de ce qui suit. Pour un caractère tiré, j'ai plusieurs coordonnées (x, y) séquentielles où le stylo a été enfoncé. Donc, c'est un problème séquentiel (temporel). Je veux être capable de classer les caractères manuscrits sur la base de ces données, et j'aimerais mettre en œuvre des HMM à des fins d'apprentissage. Mais, est-ce la bonne approche? Comment peuvent-ils être utilisés pour faire cela?Comment les HMM peuvent-ils être utilisés pour la reconnaissance de l'écriture manuscrite?

+0

C'est une idée vraiment intéressante. Par curiosité, est-ce que la coordonnée temporelle de chaque point est également enregistrée (donc à la milliseconde 1, la coordonnée 30 x 45 a été pressée) ou sont-elles simplement dans l'ordre séquentiel? – Turnsole

+0

Actuellement, il est juste séquentiel. Pensait-il à faire un certain temps de déformation dynamique pour rendre compte des caractères dessinés plus lentement/plus rapidement? – zebra

+0

Je pense que c'est la bonne approche. Vous pourriez commencer, en pratique, à reconnaître l'alphabet [palm graffite] (http://en.wikipedia.org/wiki/Graffiti_%28Palm_OS%29). – Maurits

Répondre

2

Ce problème est en fait un mélange de deux problèmes:

  1. reconnaître un caractère de vos données
  2. reconnaissant un mot d'une séquence (bruyante) des caractères

Un HMM est utilisé pour trouver la séquence la plus probable d'un nombre fini d'états discrets à partir de mesures bruitées. C'est exactement le problème 2, puisque les mesures bruitées des états discrets a-z, 0-9 se suivent dans une séquence.

Pour le problème 1, un HMM est inutile car la séquence sous-jacente ne vous intéresse pas. Ce que vous voulez, c'est augmenter votre chiffre manuscrit avec des informations sur la façon dont vous l'avez écrit.

Personnellement, je commencerais par implémenter une reconnaissance d'écriture manuscrite de pointe qui est déjà très bonne (avec les réseaux de neurones convolutionnels ou l'apprentissage en profondeur). Après cela, vous pouvez ajouter des informations sur la façon dont il a été écrit, par exemple dans le sens horaire ou antihoraire.

3

Je pense que HMM peut être utilisé dans les deux problèmes mentionnés par @jens. Je travaille aussi sur l'écriture en ligne, et HMM est utilisé dans de nombreux articles. L'approche la plus simple est la suivante:

  1. Sélectionnez une caractéristique.
  2. Si la caractéristique sélectionnée est continue, la convertir en discrète.
  3. Choisissez les paramètres HMM: Topologie et Nombre d'états.
  4. Dessinez des modèles de caractères à l'aide de HMM. un modèle pour chaque classe.
  5. Test utilisant un ensemble de test.

pour chaque élément:

  1. le plus simple est caractéristique angle de vecteur qui relie consécutifs points. Vous pouvez utiliser des fonctions plus compliquées comme les angles des vecteurs obtenus par Douglas & algorithme Peucker.
  2. la méthode la plus simple pour la discrétisation est l'utilisation de codes Freeman, mais des algorithmes de regroupement comme k-means et GMM peuvent également être utilisés.
  3. Topologies HMM: Ergodique, gauche-droite, Bakis et linéaire. Le nombre d'états peut être obtenu par l'erreur d'essai &. Les paramètres HMM peuvent être variables pour chaque modèle. Le nombre d'observations est déterminé par discrétisation. Les échantillons d'observation peuvent avoir une longueur variable.
  4. Je recommande la boîte à outils Kevin Murphy HMM.
  5. Bonne chance.
Questions connexes