Reconnaissance de caractères

Quel langage & méthode

a marqué ce sujet comme résolu.

Bonjour !

Dans le but d'un projet, j'ai décidé de me lancer dans de la reconnaissance de caractères. Je commencerais par reconnaître des caractères simples, càd écris dans des polices droites, noir sur blanc, puis je verrais en fonction de l'avancement de mon projet.

Première question : j'hésite à faire mon programme en Python ou en C++. Je suis bien plus à l'aise avec Python et ce serait plus pédagogue pour moi, mais d'un autre côté je m'en sors aussi avec C++ et c'est plus rapide. Y a-t-il un langage qui prédomine dans ce domaine ?

Ensuite, concernant la reconnaissance de caractères, je pense que le mieux est d'utiliser un réseau de neurones couplé à un algorithme génétique. Le but de ce projet n'est pas que je réimplémente les méthodes actuelles mais que j'essaye de découvrir par moi-même ce qui est le plus efficace, du moins pour l'instant. J'aimerais toutefois avoir une base pour commencer, c'est pourquoi j'aimerais savoir comment je dois procéder pour commencer.

Je me suis déjà occupé du pré-traitement de l'image, c'est-à-dire un seuillage blanc/noir et supprimer les marges blanches autour de l'image. Je pense ensuite que je vais commencer par pixeliser l'image pour la normaliser et faire des moyennes lignes/sommes, mais ce n'est que le début. De plus, comment suis-je censé implémenter mon réseau et mon algo génétique dans ce programme ?

Finalement, concernant l'apprentissage de mon algorithme : est-ce la bonne méthode de lui constituer une base d'étude avec un certain nombre d'images et les caractères associés pour former un apprentissage initial, puis de le tester sur une autre base d'images et de voir son taux de réussite ? Ou devrais-je enregistrer chaque essai pour lui constituer une base d'apprentissage sur le long terme, même si je change de méthode de reconnaissance le long de mon projet ?

Merci d'avance !

Alors rapidement :

  • langage : en fait les deux peuvent être utilisées. En général les éléments bas niveau sont en natif (C++) mais on manipule le tout dans un langage de haut niveau (Python).

En ce qui te concerne, si tu maîtrise les deux, commence en Python. Tu arrivera bien plus vite à un résultat utilisable et tu peux plus facilement outiller ton algo (mesures et graph, ui, etc.). Et si ton algo devient trop lent, tu change. Mais au début te prend pas trop la tête.

  • partir sur un réseau de neurones est une bonne idée mais tu veux le mettre ou ton algo génétique ? C'est pour l'apprentissage ? Pour le commencement je ne sais pas, fait un petit réseau avec quelques couches et quelques entrée sorties. Mais je ne suis pas sûrs de comprendre tes questions.

  • pour l'apprentissage on fait généralement 2 (voir 3) bases. Il te faut un tas d'exemple labellisé, c'est à dire où a une image tu connais la vérité. En général on fait l'apprentissage sur l'une de ces bases et on test la capacité de généralisation sur l'autre. Il est possible, pour choisir les paramètres entre autre, de faire de la cross-validation. Ça évite de générer un algorithme en sur-apprentissage par exemple mais c'est beaucoup plus long.

Si tu veux, beaucoup de ressources existent sur le net à ce sujet. Tu peux commencer par chercher des choses en rapport avec MNIST tutorial. Ils expliquent comment marche un OCR, avec de la rreconnaissance de chiffres. Ça peut etre une bonne piste pour le début.

Pour le langage, Python/C++ marchent très bien.

Je conseille l'utilisation de Python (ou tout autre langage de "haut" niveau) simplement pour la rapidité de protypage, un trial-error-correction plus rapide, et de nombreux outils à disposition (batteries included!).

Faire de la reconnaissance de caractères nécessite d'être en apprentissage supervisé (ie. avoir des exemples de caractères annotées avec leur signification pour "nourrir" ton algorithme). La base de données standard d'entrainement pour ce qui est utilisé comme premier benchmark/toy example dans beaucoup, beaucoup, beaucoup de papiers de machine learning : http://yann.lecun.com/exdb/mnist/. Tu peux prendre ca pour tes expériences ou construire une base de données personnelle.

La librairie de machine learning Scikit-Learn est celle qui te servira le plus . Même si tu ne veux pas utiliser des algos tout prêts (SVM, neural networks, PCA, …), la librairie vient avec beaucoup d'outils qui te serviront :

Il est possible d'écrire son propre estimateur et de l'intégrer dans le workflow de Scikit-Learn (tutoriel #1 , tutoriel #2)

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte