Python OCR : Conversion d'une Image Numérisée En Texte Pour le Traitement
Je suis en train de créer une réponse de papier de marquage (question à choix multiples) application en python. La feuille de réponse seront numérisées dans un fichier image (gif,png,jpg,quel que soit le format est nécessaire).
Mon Application a accès à la base de données où toutes les réponses sont stockées.
Donc,il suffit d'un peu de type de données de l'image numérisée afin qu'il puisse comparer la réponse et de calculer les marques.
La feuille de réponses a fixé les dimensions avec le format de tableau comme ceci ( les Réponses seront marquées par un " X " par le candidat d'indiquer leurs réponses):
Après une recherche par le biais de l'internet, j'ai trouvé qu'il y a quelques OCR Api disponibles.
Premier est Pytesser
. Il est très facile à utiliser et les résultats sont tout à fait correct. Mais il ne fonctionne que pour les images avec juste une pure textes. Donc, je pense qu'il n'est pas adapté.
Le second que j'ai trouvé est Ocropus
. Il semble puissant mais dans la documentation
Windows
OCRopus s'appuie beaucoup sur POSIX noms de chemin d'accès et les systèmes de fichiers.
Vous pouvez être en mesure d'installer OCRopus sur Windows à l'aide . Un moyen plus facile
est d'installer VirtualBox et exécuter OCRopus dans Ubuntu sous VirtualBox.
Donc je pense que c'est surtout pour linux. Je ne pouvais pas trouver un détail guide d'installation pour windows plate-forme. ( Je suis un débutant, donc je peux me tromper)
Le troisième que j'ai trouvé est python-tesseract
, un wrapper pour Tesseract OCR
. Dans leur page, le guide d'installation est fourni. En gros, j'ai besoin d',
- python-tesseract-win32.deb
- python-opencv
- numpy
mais je n'ai aucune idée sur la façon d'installer .deb
fichiers sur la fenêtre. J'ai le opencv
et nampy
déjà installé.
Donc voici mes questions:
(1) De quelle manière puis-je convertir l'image à la table en données lisibles(est-ce même possible?)?
(2) Est-il utile de ROC Api que je n'ai pas mentionnés ici, qui pourrait être utile?
(3) Enfin, (mon idée stupide) Est-il possible de diviser l'image en petits mandrins(basé sur la taille des cellules de la table - depuis la table dimensions sont connus) à l'aide de PIL
et ensuite utiliser pytesser
convertir les petites images dans le texte, par la suite, de traiter les données en conséquence?
FYI: j'ai seulement besoin pour Plate-forme Windows, peut-être pour windows xp 32 bits. Je suis à l'aide de python 2.7.5.
- .deb Linux Deiban/Ubuntu pachage fichiers, vous fondamentalement ne pas les installer sur Windows.
Vous devez vous connecter pour publier un commentaire.
Réponses correspondent à vos numéros
1) ROC est en général très difficile, mais (de bonnes nouvelles pour vous) pour le test score de traitement, je pense que c'est presque un problème résolu. Dans cette veine, il y sont essayé et vrai des solutions à ces problèmes. Les systèmes scolaires ont fait cela pour automatiser le classement 'scantron" tests " pendant des années, donc si vous avez accès à de telles ressources que la route pourrait être votre meilleur pari. Au moins, vous devriez vérifier comment ils le font
2) je suis sûr qu'il en existe d'autres, mais ce sont les principaux gratuit celles que je connais de
3)je pense que si vous essayez de le faire sur un budget et le temps est moins un problème, votre "ridicule" l'idée est pas bête du tout. Il pourrait être la meilleure façon de le faire, et il est probable que le scantron test niveleuses utiliser une méthode similaire. Vous connaissez la dimension exacte de la forme de test. Vous pouvez connaître le direct pixel mapping de où chercher. Vous pouvez utiliser pytesser très facilement. Gardez à l'esprit que pytesser parfois besoin de vous pour redimensionner l'image (parfois plus, parfois vers le bas) pour obtenir la meilleure précision.
3)b), Vous pourriez envisager de rouler votre propre solution. Vous pouvez utiliser le concept d'opérations morphologiques (numpy et d'autres bibliothèques d'images peuvent ce faire, près de la sortie de la boîte). Vous pourriez même pas besoin de ces opérateurs et de simplement faire un binaire à seuil des lignes de la table (en supposant que vous avez déjà coupé l'image dans les lignes de la table) et il suffit de regarder pour les blobs et marquer la partition comme venant de la colonne avec le plus de valeurs blob.