2009-11-10 6 views
3

Comme vous avez pu entendu parler, il y a un service de reconnaissance de la police en ligne appelez WhatTheFontreconnaissance automatique des polices avec Python

Je suis curieux de la technologie derrière cet outil. Je pense fondamentalement que nous pouvons séparer cela en deux parties:

  1. générer des images à partir de fichiers de police de divers formats, reportez-vous à http://www.fileinfo.com/filetypes/font pour une liste des extensions de fichiers de police.

  2. Comparer avec toutes les images soumises images générées

Je vous remercie de partager quelques conseils ou un code python pour mettre en œuvre deux étapes ci-dessus.

+0

Ajout du tag "traitement d'image". – tom10

Répondre

4

Comme les Etats OP, il y a deux parties (et probablement aussi une troisième partie):

  1. Utilisez PIL pour générer images from fonts. Utilisez une boîte à outils d'analyse d'image, telle que OpenCV (qui a des liaisons Python) pour comparer différentes formes. Il existe une variété de techniques standard pour comparer différents objets afin de voir s'ils sont similaires. Par exemple, scale invariant moments fonctionne assez bien et fait partie de la boîte à outils OpenCv. La plupart des outils standard de # 2 sont conçus pour rechercher des formes similaires mais pas nécessairement identiques, mais pour la comparaison de polices, cela peut ne pas être ce que vous voulez, car les différences entre les polices peuvent être basées sur des détails très fins. Pour l'analyse des détails fins, essayez de comparer les profils x et y d'un chemin de périmètre autour de chaque lettre, correctement normalisée, bien sûr. (Ceci, ou plus mathématiquement variante complexe de celui-ci, a été utilisé avec succès dans une bonne analyse de la police.)

2

Je ne peux pas offrir du code Python, mais voici deux approches possibles.

  1. "Caractères propres". En reconnaissance faciale, étant donné un grand ensemble d'images faciales normalisées, vous pouvez utiliser l'analyse en composantes principales (ACP) pour obtenir un ensemble de «vecteurs propres» qui, lorsque les faces d'entraînement sont projetées sur ce sous-espace, présentent la plus grande variance. Les "coordonnées" des faces de test d'entrée par rapport à l'espace des vecteurs propres peuvent être utilisées comme vecteur de caractéristiques pour la classification. La même chose peut être faite avec des caractères textuels, c'est-à-dire de nombreuses versions du caractère "A".

  2. Déformation temporelle dynamique (DTW). Cette technique est parfois utilisée pour la reconnaissance de caractères manuscrits. L'idée est que la trajectoire prise par la pointe d'un crayon (c'est-à-dire d/dx, d/dy) est similaire pour des caractères similaires. DTW rend invariantes certaines des variations entre les instances de l'écriture d'une seule personne. De même, le contour d'un personnage peut représenter une trajectoire. Cette trajectoire devient alors le vecteur de caractéristiques pour chaque jeu de polices. Je suppose que la partie DTW n'est pas aussi nécessaire avec la reconnaissance des polices, car une machine crée les caractères, pas un humain. Mais il peut toujours être utile d'éliminer les ambiguïtés spatiales.

Questions connexes