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

caract.NB_CHIFFRES

Nombre de chiffres à reconnaître (en partant de 0).

caract.ecart

Erreur quadratique à atteindre par les réseaux.

caract.nb_couche0

Nombre de neurones sur la première couche du réseau.

caract.div

Division du pas à chaque palier (voir référence de reseau.perceptron.learn12).

caract.load(name)

Charge les réseaux sauvegardé sous name .

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

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.

caract.resultats()

Imprime les résultats à l’écran. Montre le graphique si graph vaut true.

caract.save(name)

Propose la sauvegarde du réseau sous le nom “name” (si vide, le nom sera demandé en entrée).

libcaract

libcaract.linpng(name)

Met tous les pixels de l’image dans une liste, la ramène entre 0 et 1 et inverse.

libcaract.rep_base(name, nb_out)

Donne la réponse attendue en fonction du nom du fichier. La réponse est un vecteur de dimension nb_out, contenant des -1 sauf dans la ligne i. Le i étant le premier caractère du nom de fichier.

libcaract.printres(rs, name, prefix='./reco/')

Imprime à l’écran le ligne de réponse des réseaux rs au fichier name. Retourne true ssi le chiffre était le chiffre attendu.

libcaract.printdir(rs, dirname)

Imprime les résultats pour tout le dossier dirname, donné par les réseaux rs.

Table Of Contents

Previous topic

neural-network - Documentation

Next topic

Module ‘reseau.perceptron’

This Page