Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| La machine à reconnaître les fruits | |
| | Auteur | Message |
---|
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: La machine à reconnaître les fruits Mar 26 Juin 2012 - 1:10 | |
| Salut tout le monde. Je ne maitrise pas encore les différents usages des objets PANORAMIC, comme LIST, COMBO, ALPHA, CONTAINER, etc. J’essaye donc de les utiliser dans des programmes (parfois totalement inutiles) pour mieux les maitriser. Le code suivant FRUTMACHINE.BAS est un inutilitaire qui reconnait les fruits ! Si vous voulez bien le tester et me dire s’il n’y a pas une autre approche (plus élégante, ou plus simple ou mieux adaptée) à ce genre de codage, je vous en serais reconnaissant. - Code:
-
rem **************************************************************************** rem rem FrutMachine.bas rem rem Un programme de reconnaissance des fruits par Papydall rem rem ****************************************************************************
dim no%,no1%, no_forme%,no_couleur%,no_melange%,no_peau%,no_taille%,k$ dim NbFruit : NbFruit = 100 : ' maximum 100 fruits différents à reconnaître dim forme$(NbFruit),couleur_dominante$(Nbfruit),melange_de_couleurs$(Nbfruit) dim aspect_de_la_peau$(NbFruit),nom_du_fruit$(NbFruit),taille_du_fruit$(NbFruit) dim reponse$(5) : ' Tableau contenant les reponses aux 5 types des questions dim pointeur%,r%,x% ,nom$ ,devine% ,trouve% dim nl$ : nl$ = chr$(10)+chr$(13)
label presentation,init,GUI,forme,couleur,melange,peau,taille ,recherche label affichage,memoriser_1_fruit_inconnu,fin
rem ****************************************************************************
gosub presentation end
presentation:
width 0,850 : height 0,600 caption 0, "FRUTMACHINE : LA MACHINE QUI RECONNAIT LES FRUITS PAR PAPYDALL" color 0,0,150,150: font_color 0,0,0,0 : font_bold 0 : font_size 0,12 print_locate 100,100 print "Bonjour," :print:print print " Je suis FrutMachine : la machine à reconnaitre les fruits.":print print " Actuellement, je ne connais aucun fruit, mais je vais apprendre." :print print " Pour cela je vous pose 5 types des questions et j'attends vos réponses":print print " que vous choisissez parmi les propositions données dans les différents COMBOs" print : print : print print " <CLICK> pour commencer" repeat : until scancode <> 0 pointeur% = 1 : ' pointeur des cas connus des fruits déjà répertoriés print_locate 200,20 print "LA MACHINE QUI RECONNAIT LES FRUITS" gosub init return ' ****************************************************************************** ' Comptabilisation des cas connus init: for r% = 1 to NbFruit if forme$(r%) <> "" then pointeur% = r% +1 next r% gosub GUI return ' ******************************************************************************
GUI: ' Les paramètres du fruit no% = no% + 1 : container no% : no1% = no% : caption no%,"PARAMETRES DU FRUIT" top no%,70 : left no%,10 : width no%,700 : height no%,450 ' Determination de la forme du fruit no% = no% + 1 : alpha no% : parent no%,no1% top no%,100 : left no%,10 : caption no%,"LA FORME GENERALE DU FRUIT EST-ELLE ?" no% = no% + 1 : combo no% : parent no%,no1% : no_forme% = no% :on_click no%,forme top no%,100 : left no%,450 : width no%,250 item_add no%,"A : RONDE" : item_add no%,"B : OVALE" item_add no%,"C : EN POIRE" : item_add no%,"D : CONIQUE" item_add no%,"E : EN GRAPPE" : item_add no%,"F : FAITE DE GRAINS" item_add no%,"G : LONGUE"
' Détermination de la couleur de base no% = no% + 1 : alpha no% : parent no%,no1% top no%,140 : left no%,10 : caption no%,"LA COULEUR DOMINANTE DU FRUIT EST-ELLE ?" no% = no% + 1 : combo no% : parent no%,no1% : no_couleur% = no% :on_click no%,couleur top no%,140 : left no%,450 : width no%,250 item_add no%,"A : LE ROUGE" : item_add no%,"B : LE VERT" item_add no%,"C : LE JAUNE" : item_add no%,"D : LE MARRON" item_add no%,"E : LE VIOLET" : item_add no%,"F : LE NOIR" item_add no%,"G : LE BLANC" : item_add no%,"H : LE ROSE" item_add no%,"I : L'ORANGE" ' Précisions sur la couleur de base no% = no% + 1 : alpha no% : parent no%,no1% top no%,180 : left no%,10 : caption no%,"CETTE COULEUR EST-ELLE ?" no% = no% + 1 : combo no% : parent no%,no1% : no_melange% = no% :on_click no%,melange top no%,180 : left no%,450 : width no%,250 item_add no%,"A : UNIFORME" : item_add no%,"B : TACHETEE" item_add no%,"C : STRIEE" : item_add no%,"D : FONDUE" ' Précisions sur la peau du fruit no% = no% + 1 : alpha no% : parent no%,no1% top no%,220 : left no%,10 : caption no%,"LA PEAU DU FRUIT EST-ELLE ?" no% = no% + 1 : combo no% : parent no%,no1% : no_peau% = no% :on_click no%,peau top no%,220 : left no%,450 : width no%,250 item_add no%,"A : LISSE" : item_add no%,"B : GRANULEUSE" item_add no%,"C : PELUCHEUSE" : item_add no%,"D : MUNIE DE POILS" item_add no%,"E : RUGUEUSE" : item_add no%,"F : AVEC DES GRAINES" item_add no%,"G : AVEC DES ECAILLES": item_add no%,"H : AVEC DES COTES" ' Précision sur la taille du fruit no% = no% + 1 : alpha no% : parent no%,no1% top no%,260 : left no%,10 : caption no%,"ENFIN CE FRUIT EST-IL ?" no% = no% + 1 : combo no% : parent no%,no1% : no_taille% = no% :on_click no%,taille top no%,260 : left no%,450 : width no%,250 item_add no%,"A : TRES PETIT" : item_add no%,"B : PETIT" item_add no%,"C : MOYEN" : item_add no%,"D : GROS" item_add no%,"E : TRES GROS" ' devine no% = no% + 1 : button no% : parent no%,no1% top no%,350 : left no%,150: caption no%,"DEVINES CE FRUIT" devine% = no% :on_click no%,recherche inactive devine% width no%,200
return ' ****************************************************************************** forme: k$ = upper$(left$(text$(no_forme%),1)) reponse$(1) = k$
return ' ****************************************************************************** couleur: k$ = upper$(left$(text$(no_couleur%),1)) reponse$(2) = k$
return ' ****************************************************************************** melange: k$ = upper$(left$(text$(no_melange%),1)) reponse$(3) = k$
return ' ****************************************************************************** peau: k$ = upper$(left$(text$(no_peau%),1)) reponse$(4) = k$
return ' ****************************************************************************** taille: k$ = upper$(left$(text$(no_taille%),1)) reponse$(5) = k$ active devine% return ' ****************************************************************************** ' Recherche de l'un des fruits connus recherche: trouve% = 0 for r% = 1 to pointeur% if forme$(r%)=reponse$(1) and couleur_dominante$(r%)=reponse$(2) and melange_de_couleurs$(r%)=reponse$(3) and aspect_de_la_peau$(r%)=reponse$(4) and taille_du_fruit$(r%)=reponse$(5) trouve% = 1 : x% = r% : r% = pointeur% : gosub affichage : exit_for end_if next r% if trouve% = 0 then gosub memoriser_1_fruit_inconnu return ' ****************************************************************************** ' Affichage du nom d'un fruit connu affichage:
message "VOTRE FRUIT EST : " + nl$ + nom_du_fruit$(x%) if message_confirmation_yes_no("VOULEZ-VOUS UN AUTRE ESSAI ?") = 1 goto init : else : goto fin end_if return ' ****************************************************************************** ' Mémoriser ce fruit inconnu memoriser_1_fruit_inconnu:
nom$ = message_input$( "!!! JE NE CONNAIS PAS CE FRUIT !!!"," INDIQUEZ-MOI SON NOM"+nl$+" NOM = ","INCONNU") message "CE NOM : "+nom$+" EST MEMORISE"+nl$+"JE LE RECONNAITRAIS ULTERIEUREMENT" forme$(pointeur%) = reponse$(1) couleur_dominante$(pointeur%) = reponse$(2) melange_de_couleurs$(pointeur%) = reponse$(3) aspect_de_la_peau$(pointeur%) = reponse$(4) taille_du_fruit$(pointeur%) = reponse$(5) nom_du_fruit$(pointeur%) = nom$ if message_confirmation_yes_no("VOULEZ-VOUS UN AUTRE ESSAI ?") = 1 goto init : else : goto fin end_if return ' ******************************************************************************
fin: message "!!! AU REVOIR !!!" terminate ' ***************************************************
Ce programme n’est capable que d’apprendre à reconnaitre les fruits. Il ne s’agit là que d’un exemple pouvant être adapté à tout autre type d’apprentissage de reconnaissance. Au départ, le programme ne connait rien. Il pose une batterie de questions et les réponses fournies par l’utilisateur seront mémorisées. Au fur et à mesure de l’utilisation du programme, la "bibliothèque" des fruits connus s’enrichira : le programme apprendra en quelque sorte, à reconnaitre les fruits à partir de certaines caractéristiques déterminées. Mais a-t-on vraiment besoin d’un ordinateur pour reconnaitre qu’un fruit dont la forme est ronde, de couleur rouge, que cette couleur est uniforme, dont la peau est lisse et de petite taille, est une tomate ? | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: La machine à reconnaître les fruits Mar 26 Juin 2012 - 1:23 | |
| ca peut aussi être une cerise Comment fait-il pour les distinguer .. petit est assez subgectif ... | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: La machine à reconnaître les fruits Mar 26 Juin 2012 - 1:27 | |
| Dans les propositions, il y a aussi très petit.
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: La machine à reconnaître les fruits Mar 26 Juin 2012 - 1:30 | |
| mais dans ce cas, comment vas-tu qualifier la groseille ? | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: La machine à reconnaître les fruits Mar 26 Juin 2012 - 1:33 | |
| | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: La machine à reconnaître les fruits Mar 26 Juin 2012 - 1:40 | |
| Dans la forme générale , il y a "E : EN GRAPPE" qui peut différencier des fruits dont certaines caractéristiques se ressemblent. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: La machine à reconnaître les fruits Mar 26 Juin 2012 - 1:48 | |
| Amusant, ce programme !
Tu pourrais ajouter la possibilité de ne pas saisir tous les critères avant de cliquer sur "Chercher". Le programme afficherait alors la liste des fruits connus possibles et permettrait éventuellement de saisir un nouveau nom si le fruit recherché n'est pas dans la liste. Tu peux faire cela en chargeant tous les fruits qui correspondent dans un combo, en laissant la propriété TEXT à blanc. Si on saisit un nom dans la cas de texte du combo, alors tu le mémorises avec les attributs renseignés. Et si, pour un fruit trouvé, on modifie les attributs (ou si l'on saisit les attributs manquants), ces valeurs seront mémorisées. Ainsi, l'apprentissage sera amélioré. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| | | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: La machine à reconnaître les fruits Mar 26 Juin 2012 - 2:35 | |
| Je vois ça. Ton programme est vraiment intéressant. Je vois que tu as appliqué plus ou mois ma technique de structuration d'un programme. Mais j'ai une remarque à te faire à ce sujet. Tel que tu l'as fait, on voit clairement la modularité du programme. Mais c'est difficile à suivre, car tu appelles un premier sous-programme, qui la fin en appelle le suivant, et ainsi de suite. Pour la lisibilité, et sans vouloir t'imposer mes solutions, je te propose ceci: - Code:
-
' monprogramme.bas
label labels : gosub labels : ' ici, on définit TOUS les labels du programme gosub constantes : ' ici, on définit les variables servant en réalité de constantes (noms de fichiers, ...) gosub variables : ' ici, on définit les variables normales gosub donnees : ' ici, on définit toutes les commandes DATA gosub form0 : ' ici, on configure la form 0 (caption, taille, ...) gosub menu : ' ici, on définit le menu avec ses sous-menus gosub GUI : ' ici, on définit tous les objets Panoramic, visuels ou non gosub initialisations : ' ici, on charge des valeurs initiales, on fait tout ce qui doit être fait 1 seule fois end : ' fin du programme principal
labels: label constantes, variables, donnees, form0, menu, GUI, initialisations ... return
constantes: dim rep$ : rep$ = "C:\monrepertoire\monprogramme\" : ' à titre d'exemple... ... return
variables: dim no%, no1%, ... ... return
donnees: data ... ... return
form0: caption form0,"Mon exemple de structure de programme" width 0,... height 0,... ... return
menu: no% = no% + 1 : main_menu no% : no1% = no% no% = no% + 1 : sub_menu no% : parent no%,no1% caption no%,"Fichiers" : on_click no%,... ... return
GUI: ' d'abord, tous les composants non visuels (timer, dlist, open_dialog, ...) ... ' ensuite, les composants visuels no% = no% + 1 : alpha no% : caption no%,"Juste un exemple" top no%,10 : left no%,10 no% = no% + 1 : edit no% top no%,10 : left no%,150 ... return
initialisations: ' traiter d'éventuels fichiers d'initialisations dir_change rep$ : ' et à titre d'exemple, l'application du répertoire par défaut... ... return
| |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: La machine à reconnaître les fruits Mar 26 Juin 2012 - 2:56 | |
| Salut Klaus.
C’est gentil de ta part. Je m’inspire souvent de ta technique de structuration d'un programme ; et je t’en suis reconnaissant.
Il m’a été toujours aisé de suivre le fil directeur de tes programmes. Je vais donc suivre ton conseil et je veillerais, dans mes prochains programmes, à appliquer ta méthode.
Merci Klaus. A+
| |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: La machine à reconnaître les fruits Mar 26 Juin 2012 - 7:30 | |
| Je le trouve sympa ce programme ! Il pourrait servir de base à un apprentissage pour enfant. Imagine, c'est le gamin qui apprend à l'ordinateur.... Mais il faudrait, bien sur, contrôler que le gamin n'essai pas de faire croire à la machine qu'un fruit rond, à la peau rouge et lisse est une banane Dans ce cas, il manque à ce programme la sauvegarde des réponses avec leurs attributs dans un fichier. A+ | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: La machine à reconnaître les fruits Mar 26 Juin 2012 - 8:18 | |
| Bonjour Papydall, Quelques petites remarques : 1- Ce qui est gênant dans ton programme, c'est que si tu valides un autre essai, tu relances ta procedure d'init donc tu recrées d'autres objets par dessus tes objets existants (puisque tu fait un gosub GUI)... 2- Si on regardes bien tes procédures forme, couleur, melange, peau, taille, elles sont strictement identiques (en dehors de l'indice de tableau et de l'activation du bouton devine) Tu pourrais créer une seule procédure qui traiterai la saisie de tes champs. par exemple, sachant que tes champs ont respectivement les numéros 3,5,7,9 et 11, tu peux calculer l'indice du tableau de cette manière: - Code:
-
Saisie: reponse$(INT(NUMBER_CLICK/2)) = upper$(left$(text$(NUMBER_CLICK),1)) x%=0 for r%=1 TO 5 IF reponse$(r%)="" THEN x%=1 next r% IF x%=0 ACTIVE devine% ELSE INACTIVE devine% END_IF return
Dans cet exemple, on s'assure aussi que tous les champs ont été correctement remplis.
Dernière édition par Nardo26 le Mar 26 Juin 2012 - 8:48, édité 1 fois | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: La machine à reconnaître les fruits Mar 26 Juin 2012 - 8:48 | |
| @Nardo26: concernant ton point (1), tu verras que je l'ai relevé dans mon post précédent. Facile à corriger.
Pour ton point (2), tu as parfaitement raison au sujet de la technique de programmation. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: La machine à reconnaître les fruits Mar 26 Juin 2012 - 9:56 | |
| Bonjour tout le monde. Je suis ravi de vos interventions. Je prendrais en considérations vos remarques et conseils. Je suis un apprenti qui se cherche devant des maitres confirmés. Je serais un bon élève. Merci à tous. | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: La machine à reconnaître les fruits Mar 26 Juin 2012 - 10:21 | |
| Je sais pas ce qu'en pense Klaus, mais on très loin d'être des maîtres confirmés... (d'ailleurs je crois que cela n'existe pas, faut rester humble en programmation) Sinon ta variable pointeur% ne donne aucune indication sur son rôle. Sans compter que ce nom peut prêter à confusion. Je trouve que nbConnus% serait plus parlant (enfin, ce n'est que mon avis ). Perso, je renommerai : - ta variable NbFruit en NbMaxFruit - ta variable pointeur% en nbConnus% ou nbFruit% (pour être cohérent avec NbMaxFruit) A ce sujet, au lieu de faire une boucle pour compter le nb de fruit connus, pourquoi tu ne fais pas une simple incrémentation lors de la mémorisation ? NOTE: J'ai tendance à mettre en majuscule les CONSTANTES pour bien les différentier par rapport aux "variables". Dans ton cas, cela donnerai NB_MAXFRUIT... | |
| | | Contenu sponsorisé
| Sujet: Re: La machine à reconnaître les fruits | |
| |
| | | | La machine à reconnaître les fruits | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |