.. file-caract ========================================== Logiciel 'caract' et bibliothèque associée ========================================== Les fichiers caract.py et libcaract.py fournissent un logiciel et des fonctions permettant la reconaissances de caractères à l'aide d'un réseau de neurones. ------------------------ Utilisation du programme ------------------------ Ce programme propose la reconnaissance de caractères (chiffres uniquement) à l'aide de réseaux de neurones. Il y a deux programmes principaux: **caract.py** et **aug-base.py** qui peuvent fonctionner ensemble. Ces programmes reposent sur une organisation des données bien particulière. Les images à reconnaître doivent être placées dans le dossier *reco*. Les images placées dans le dossier *base* seront utilisés pour réaliser l'apprentissage du réseau et seront donc totalement connues par celui ci. Les images placées dans *inconnu* seront inconnues par le réseaux et il tentera de reconnaître quel caractère y figure. **ATTENTION** les images doivent être au format png en **niveaux de gris** et mesurer 8*8 pixels. Un fichier *vide.png* est disponible, il suffit de le copier et de le modifier pour s'assurer d'être dans le bon format. Les fichiers dans *base* doivent être nommés correctement: la première lettre du nom de fichier doit être le chiffre qu'il représente, afin que le programme sache quel chiffre il doit apprendre. Les fichiers dans *inconnu* sont nommés comme bon vous semble. Maintenant voyons l'utilisation des programmes: * **caract.py**: Le programme créé un nouveau réseau, réalise l'apprentissage à l'aide de la base, puis lit les résultats dans le dossier *inconnu*. Il propose à la fin la sauvegarde du réseau. Le programme est utilisable en ligne de commande et propose deux arguments d'appel (facultatifs): * le premier est le palier jusqu'auquel le programme va chercher à faire descendre l'erreur. * le second est le nom d'un réseau pré-enregistré à charger. Par exemple pour charger le réseau "res" et réaliser l'apprentissage jusqu'à une erreur de 0.1 on appelle le programme comme qui suit: :: python3 caract.py 0.1 res * **aug-base.py**: Ce programme est plus interactif. Il tourne en boucle et effectue dans l'ordre: 1) Chargement du réseau 'working' 2) Attente que l'utilisateur ait modifié *reco/inconnu.png* 3) Tentative de reconnaissance de *inconnu.png* 4) Vérification de la réponse par l'utilisateur, plusieurs réponses sont possibles! * o (**o** ui): le réseau a bien deviné, le fichier est renommé correctement et copié dans *inconnu* * n (**n** on): le réseau s'est trompé. Il vous demande alors la bonne réponse, renomme le fichier, le copie dans *base* et enfin réalise un ré-apprentissage du réseau. * p (**p** ass): ne fait rien. Utile lorsqu'on veut uniquement voir la réponse du réseau sans le modifier ou copier l'image dans un des dossiers. * q (**q** uit): ne fait rien et quitte le programme. 5) Enregistrement du réseau et retour au **2.** ---------- Référence ---------- caract ****** .. data:: caract.NB_CHIFFRES Nombre de chiffres à reconnaître (en partant de 0). .. data:: caract.ecart Erreur quadratique à atteindre par les réseaux. .. data:: caract.nb_couche0 Nombre de neurones sur la première couche du réseau. .. data:: caract.div Division du pas à chaque palier (voir référence de `reseau.perceptron.learn12 `_). .. function:: caract.load(name) Charge les réseaux sauvegardé sous *name* . .. function:: caract.learn_network(q, qres, reseau, i, base, base_inconnu=[], ecart=ecart, div=div) Réalise l'aprentissage d'un réseau unique *reseau* (numéro *i*) avec la base *base*. Recharge la base d'apprentissage et effectue un apprentissage jusqu'à une erreur *ecart*, avec un pas variable de division *div* . Ajoute un triplet (*i*, data_base, data_inconnu) à la Queue q et (*i*, res). Où data_base, data_inconnu sont les listes des erreurs successives des éléments de la base et inconnus et res le nouveau réseau après aprentissage .. function:: caract.learn(ecart=ecart, div=div, graph=False, show_graph=True) Recharge la base d'apprentissage et effectue un apprentissage jusqu'à une erreur *ecart*, avec un pas variable de division *div* . Si *graph* est à true, calcule le graphique de l'apprentissage, l'affiche si *show_graph* est à True. .. function:: caract.resultats() Imprime les résultats à l'écran. Montre le graphique si *graph* vaut true. .. function:: caract.save(name) Propose la sauvegarde du réseau sous le nom "name" (si vide, le nom sera demandé en entrée). libcaract ********* .. autofunction:: libcaract.linpng .. autofunction:: libcaract.rep_base .. autofunction:: libcaract.printres .. autofunction:: libcaract.printdir