2011-07-01 3 views
11

Je veux créer un programme qui prend une image en entrée et qui envoie du texte. Maintenant, je sais que je peux utiliser un réseau de neurones pour transformer une image de caractère unique en ce personnage. La partie difficile est: donné une image avec du texte, comment pourrais-je produire tous les rectangles autour de chaque personnage?Comment créer un programme OCR?

Alors, quelles sortes de méthodes sont utilisées pour cela et est-ce que quelqu'un connaît des documents de recherche qui expliquent comment le faire? Merci

Répondre

8

Une approche de base consiste à créer un histogramme de pixels noirs. Premièrement: projeter tous les pixels sur une ligne. Les vallées profondes de l'histogramme indiquent une séparation entre les lignes (essayez différents angles si le papier peut être incliné). Ensuite, par ligne (ou par page si vous savez que la police est monospace) projeter les pixels sur un histogramme horizontal. Cela vous donnera une forte indication des espaces inter caractères. Au minimum, cela vous donne une valeur pour la hauteur et la largeur moyennes des caractères qui vous aideront dans les prochaines étapes. Après cela, vous devez prendre en charge le crénage (où les caractères se chevauchent). Trouvez les pixels connectés, en faisant d'abord une dilatation ou une érosion sur l'image pour compenser les artefacts de numérisation. En fonction de la qualité de l'image numérisée, vous devrez peut-être utiliser des techniques plus avancées, mais cela vous aidera à démarrer.

+0

Ceci est très intéressant parce que, même si je pense que la méthode que vous décrivez fonctionnera très bien parfois, il ne peut pas apprendre? Le réseau neuronal peut être formé pour mieux lire les symboles individuels, mais une fois qu'il est parfait, en utilisant vos idées, je pense que cela pourrait être limité par cette partie de la procédure. Pensez-vous que c'est le cas ou est-ce que je me trompe? – quanta

+0

Ah, j'ai un peu mal lu votre question. L'approche traditionnelle consiste à faire 1) l'amélioration de l'image 2) la segmentation 3) la reconnaissance des caractères (en utilisant NN) 4) l'utilisation des informations de contexte (recherche de dictionnaire ou application de données statistiques). Vous avez essentiellement le choix de faire une segmentation en utilisant NN ou de combiner 2) et 3) en utilisant NN. Ce dernier sera difficile mais a des avantages potentiels. Si vous souhaitez appliquer NN à la segmentation, vous devrez proposer de bonnes fonctionnalités. L'utilisation des vallées d'histogramme pourrait en être une (je ne l'ai pas fait moi-même, donc je ne peux vraiment pas prédire le résultat). – Emile

+0

Félicitations! Vous avez presque réinventé Hough transformer. –