Developpez.com - Delphi
X

Choisissez d'abord la catégorieensuite la rubrique :

LES DEFIS DELPHI

LES DEFIS DELPHI DEFI ECRIVEZ A LA SOURIS LA SOLUTION DU DEFIEUR LA SOLUTION DU VAINQUEUR LA SOLUTION DES CHALLENGEURS


Les Défis DELPHI - Ecrivez à la souris !

Les défis DELPHI

Le topic du défi.

Date de publication : 2 octobre 2006

Par Equipe DELPHI (Les Défis DELPHI)
 

Voici tout le sujet de discussion du forum DELPHI concernant le Défi d'écriture à la souris proposé par l'équipe DELPHI !

Giovanny Temgoua 18/05/2006 21h18

Le Défi DELPHI : Ecrivez à la souris !
 
Bonjour,

L'équipe d'Animation vous propose un nouveau défi !

But du défi :
Créer un logiciel qui écrit... ce que vous écrivez à la souris !

Il s'agit de réaliser un programme capable de reconnaître des caractères ou des symboles tracés à la souris. On appelle ceci la reconnaissance gestuelle.

Les objectifs du défi :
Votre logiciel, qui vous permettra sans doute de gagner ;) , devra savoir :
  1. Reconnaître les mouvements de la souris
  2. Interpréter ces mouvements
    • reconnaître les lettres de l'alphabet (Majuscules, minuscules)
    • reconnaître des symboles simples
  3. Reporter l'interprétation des mouvements dans un Memo.
  4. Interpréter des mouvements particuliers pilotant votre application.
  5. Laissez libre court à votre imagination et proposez vos propres fonctionnalités.
N'oubliez pas que selon les règles de notre défi :

Citation:

Par ailleurs, dans le cas d'un défi relevé, l'équipe d'animation se réserve le droit, d'attribuer ou non une récompense au gagnant.


Bon à savoir :

- waskol, selon les règles du défi, a réussi à mettre au point un tel logiciel dont le code sera révélé à l'issu du défi.
Dans celui-ci, il n'y a pas une seule API Windows utilisée, pas un gramme d'intelligence artificielle nécessitant des années d'études en mathématiques, il n'y a que très peu de lignes de code.
- Toute édition personnelle de Delphi suffit (pas besoin d'avoir les bibliothèques spécifiques aux versions Pro/Entreprise/Architecte) !
- Tout ce qui a été utilisé se retrouve un peu partout sur le site de DVP (tutoriels, Sites des contributeurs hébergés sur www.developpez.com, FAQ, sources, forums Delphi).

Bon dev à toutes et à tous et que la/le meilleur(e) gagne !

La fin du défi à été fixée au 15 septembre 2006 23h59


PS :
1) ne postez pas le code de votre solution sur le forum, mais faites le nous parvenir sur le mail dédié au Défi : defi.delphi _AT_ redaction-developpez.com
2) merci de consulter et de respecter les règles qui régissent le défi.

NoisetteProd 01/08/2006 14h00

Que le meilleur gagne !!

Pensez à dormir, manger (pas trop !), a boire (de l'eau !) sous la canicule ;)

Nhésitez pas si vous avez des interrogations sur le défi à les poster à la suite.

Amusez-vous bien !

tiki06 01/08/2006 14h05

Super défi, bravo pour l'idée. Va falloir se retrousser les manches.

Par contre petite info, la discussion apparait toujours dans la liste avec le titre "Le défi Delphi : un programme qui joue au démineur !".

waskol 01/08/2006 14h06

Merci à toi NoisetteProd ;)

Avant tout je tenais à remercier tous les forumeurs qui ont montrés un vif interêt pour cette rubrique Défi.
Je vous assure qe ce challenge est accessible à tous. :P

Je vous souhaite donc bonne chance à tou(te)s. Que la fête commence !!! :P

NoisetteProd 01/08/2006 14h07

Citation:

tiki06 a écrit :
Par contre petite info, la discussion apparait toujours dans la liste avec le titre "Le défi Delphi : un programme qui joue au démineur !".


J'avais pas fini le relookage du topic ;)

Heureux que ca te plaise !

anapurna 01/08/2006 14h12

salut

j'ai pas tout compris aux defi 8O
c'est du dessin que tu veut et/ou avec reconnaissance e caractere ou alors on dessinne un clavier virtuel
et il ecrit dans un memo ?
sujet trop vaste les possiblilite sont infinie il faut que tu cadre un peu plus

@+ Phil

TicTacToe 01/08/2006 14h17

Mais ou va tu chercher tout ca Waskol !!! :D

Tu demandes un module pour Palm ? ;)


Sinon bonne chance à tous,

En parlant de Palm, moi ca va dépendre des urgences au boulot avant les vacances les pieds dans l'eau, donc pas sur que j'y participe :?

a++

NoisetteProd 01/08/2006 14h20

Citation:

anapurna a écrit :
j'ai pas tout compris aux defi 8O
c'est du dessin que tu veut et/ou avec reconnaissance e caractere ou alors on dessinne un clavier virtuel
et il ecrit dans un memo ?


Tu as bien compris, il sagit de definir une zone dans laquelle tu effectuera des mouvements de souris.
Ces mouvement devront être reconnu et transformés en lettres ou symboles dans un memo.

Comme le dis TicTacToe, c'est un peux le même principe que sur un palm.

Est-ce plus clair ??

anapurna 01/08/2006 14h25

salut

vi beaucoup plus clair
je vais piraté mon palm :D

mais bon j'ai trois jour pour le faire je suis pas sur d'y arriver
apres je suis sur mon iles perdu

@+ Phil

NoisetteProd 01/08/2006 14h32

Citation:

anapurna a écrit :
mais bon j'ai trois jour pour le faire je suis pas sur d'y arriver
apres je suis sur mon iles perdu


Fais cogiter ta noisette sous les cocotiers et peut être que le défi ne sera pas fini à ton retour !

Et comme je l'ai indiqué dans l'enoncé du delphi, dans la solution de Waskol, "il n'y a pas une seule API Windows utilisée, pas un gramme d'intelligence artificielle nécessitant des années d'études en mathématiques, il n'y a que très peu de lignes de code."

Il y a peu être juste des astuces à trouver ;)

(je vais lancer un industrie de noisettes grillées moi aie )

waskol 01/08/2006 14h40

Citation:

anapurna a écrit :
salut

vi beaucoup plus clair
je vais piraté mon palm :D

mais bon j'ai trois jour pour le faire je suis pas sur d'y arriver
apres je suis sur mon iles perdu

@+ Phil



J'ai mis deux (2) jours pour faire le mien ! :mrgreen:

anapurna 01/08/2006 15h03

salut

pas une api ... hum pas possible sinon tu dessine rien ;)
meme si elle sont deguiser les objet font appel a des api

@+ Phil

PS pas de limitation de version windows ?

TicTacToe 01/08/2006 15h09

humm...

2 jours, avec ou sans cogitation (de noisette) ?

ou 2 jours de programmes, avec tout l'algo déjà en tête ?

;)

anapurna 01/08/2006 15h20

salut

je sais pas mais moi je serait bien passer par une
fonction graphique du genre
Code:

EnumEnhMetafile
alors si vous me dites que c'est pas ca je suis un peu interloquer

les caractere doivent etre d'un format particulier ?
tu determine les mouvements qu'il faut faire pour
avoir les caractere
genre

position a (haut )
Diago G-D;H-B
ofsetV 10
ofsetH 10
Position b (bas)
Diago D-G;B-H
ofsetV 10
ofsetH 10
Position c (haut)

c'est la description d'un v
c'est bien du dessin et pas un placage de point ?

@+ Phil

waskol 01/08/2006 15h51

Citation:

anapurna a écrit :
salut

pas une api ... hum pas possible sinon tu dessine rien ;)
meme si elle sont deguiser les objet font appel a des api

@+ Phil

PS pas de limitation de version windows ?


Il pinaille Philou, il pinaille, je suis passé par ce que m'offrais la VCL, pas plus...;)

anapurna 01/08/2006 15h52

salut

pendant que je te tiens ;)
tu serait pas passé par le clipboard j'espere ?

@+ Phil

PS : je ne pinaille pas je remet les chose dans le context
surtout ne pas faire croire a un debutant que la vcl n'est pas dependante de l'api ;)

waskol 01/08/2006 15h55

Citation:

TicTacToe a écrit :
humm...

2 jours, avec ou sans cogitation (de noisette) ?

ou 2 jours de programmes, avec tout l'algo déjà en tête ?

;)


2 Jours, parti de rien , sans algo, nada, juste l'idée et crac, direct le code ! (c'est-y pas beau ? 8-) )

L'idée m'est venu d'après un message du forum où quelqu'un cherchait à implémenter cette fonctionalité sur un écran tactile.
Du coup, comme la partie tactile d'un tel écran se comporte comme une souris, on lui permettra de se faire une idée de ce que l'on peu faire avec Delphi ;)

waskol 01/08/2006 15h58

Citation:

anapurna a écrit :
salut

je sais pas mais moi je serait bien passer par une
fonction graphique du genre
Code:

EnumEnhMetafile
alors si vous me dites que c'est pas ca je suis un peu interloquer

Ben non, c'est pas ça... ;)
Mais peut-être que tu vas nous faire quelque chose avec !
Citation:

anapurna a écrit :
les caractere doivent etre d'un format particulier ?

Non plus...
Citation:

anapurna a écrit :
tu determine les mouvements qu'il faut faire pour
avoir les caractere

Tu te réchauffe :mrgreen:
Citation:

anapurna a écrit :
genre

position a (haut )
Diago G-D;H-B
ofsetV 10
ofsetH 10
Position b (bas)
Diago D-G;B-H
ofsetV 10
ofsetH 10
Position c (haut)

c'est la description d'un v
c'est bien du dessin et pas un placage de point ?

@+ Phil

Tu refroidi ! aie

waskol 01/08/2006 16h01

Citation:

anapurna a écrit :
salut
pendant que je te tiens ;)
tu serait pas passé par le clipboard j'espere ?
@+ Phil

Du tout !
Citation:

anapurna a écrit :
PS : je ne pinaille pas je remet les chose dans le context
surtout ne pas faire croire a un debutant que la vcl n'est pas dependante de l'api ;)

Non c'était juste pour dire que, coté fonctions graphique, ce n'était pas du tout la peine d'aller chercher bien loin (et te faire bisquer un peu ;) ) :P

anapurna 01/08/2006 16h10

salut

donc si j'ai bien tout compris tu transforme ton dessin
en droite (horizontal et ou verticale et ou oblique ) et tu
recherche les intersection ce qui te donne une forme
stylisé d'un caractère baton

petite question comment sait tu que la personne a fini son caractere ?

@+ Phil

tiki06 01/08/2006 16h22

Citation:

petite question comment sait tu que la personne a fini son caractere ?

Pour reprendre ce que dit anapurna, est ce que ça serait pas en implementant un laps de temps au bout duquel on estime que si la personne n'a rien fait le dessin du caractère est terminé ?

Autre question apparement il y a simplement la reconnaissance des lettres de l'alphabet, donc pas les chiffres de 0 à 9 ?

En ce qui concerne les minuscules et majuscules, est ce que c'est juste une fonction qui permet de basculer de majuscules en minuscules, ou bien une reconnaissance différentes des caractères minuscules et majuscules ?

waskol 01/08/2006 16h59

Citation:

anapurna a écrit :
salut

donc si j'ai bien tout compris tu transforme ton dessin
en droite (horizontal et ou verticale et ou oblique ) et tu
recherche les intersection ce qui te donne une forme
stylisé d'un caractère baton

petite question comment sait tu que la personne a fini son caractere ?

@+ Phil


C'est à peu près ça :P
Sauf pour les intersections...

Sinon, pour savoir quand la personne a fini son caractere, à toi de trouver !

waskol 01/08/2006 17h01

Citation:

tiki06 a écrit :
Pour reprendre ce que dit anapurna, est ce que ça serait pas en implementant un laps de temps au bout duquel on estime que si la personne n'a rien fait le dessin du caractère est terminé ?

Même pas...:mrgreen:
Citation:

tiki06 a écrit :
Autre question apparement il y a simplement la reconnaissance des lettres de l'alphabet, donc pas les chiffres de 0 à 9 ?

Si, on peut 8-)
Citation:

tiki06 a écrit :
En ce qui concerne les minuscules et majuscules, est ce que c'est juste une fonction qui permet de basculer de majuscules en minuscules, ou bien une reconnaissance différentes des caractères minuscules et majuscules ?

2nde option en ce qui concerne mon programme !

anapurna 01/08/2006 17h03

salut

pour la fin je voulait juste savoir si tu avait developpez un truc ou si tu avait juste mis un bouton analyse :)
bon a priorie tu as mis au point un trucs

on vas donc jouer avec un laps de temps quand le bouton et relaché ;)

@+ Phil

lapec_and_cie 01/08/2006 17h10

Salut,

Quand tu dis qu'il y a très peu de code à écrire, il doit y avoir une fonction qui te permet de faire correspondre le caractère obtenu (avec la souris) avec le caractère à afficher dans le mémo, une sorte de Graph2Char. Tu n'as pas utilisé de "dictionnaire" pour faire correspondre chaque dessin à un caractère...

A plus,

Chris

waskol 01/08/2006 17h29

Citation:

lapec_and_cie a écrit :
Salut,

Quand tu dis qu'il y a très peu de code à écrire, il doit y avoir une fonction qui te permet de faire correspondre le caractère obtenu (avec la souris) avec le caractère à afficher dans le mémo, une sorte de Graph2Char.

Oui, il y en a un...
Citation:

lapec_and_cie a écrit :
Tu n'as pas utilisé de "dictionnaire" pour faire correspondre chaque dessin à un caractère...

Si quand même ;p

waskol 01/08/2006 17h31

Citation:

anapurna a écrit :
salut

pour la fin je voulait juste savoir si tu avait developpez un truc ou si tu avait juste mis un bouton analyse :)
bon a priorie tu as mis au point un trucs

on vas donc jouer avec un laps de temps quand le bouton et relaché ;)

@+ Phil


J'ai mis au point un truc... ;) :
Tant que le bouton de la souris (celui qu'on veut, il y en a deux :P ) est enfonçé, on trace la lettre, quand on relache, ça analyse... c'est tout...
Bon d'accord pourt tracer un F, on fait tout simplement un "Gauche-Bas"
Mais chacun sa méthode, avec un bouton "analyse", ça peut marcher...

Là je crois que j'en ai assez dit : à vous de faire !

Giovanny Temgoua 01/08/2006 17h47

Juste un petit mot pour souhaiter bonne chance à tous les défieurs :)

ero-sennin 01/08/2006 18h46

Très intéressant comme défi.
Vu mon niveau en prog, je ne sais pas si j'y arriverai, mais ca ne peut que être bénéfique :P

Un peu (beaucoup) de recherches me feront le plus grand bien :mrgreen:

korntex5 02/08/2006 09h09

très interressant en effet et j'ai ptet un de mes idées saugrenues ;)
malheureusement c toujours ce fameux paramètre temps qu'il me manque, fiancée oblige aie :mouarf:

waskol 02/08/2006 10h20

Citation:

ero-sennin a écrit :
Très intéressant comme défi.
Vu mon niveau en prog, je ne sais pas si j'y arriverai, mais ca ne peut que être bénéfique :P

Un peu (beaucoup) de recherches me feront le plus grand bien :mrgreen:


Mais is, mais si, je suis SUR que tu y arrivera.
Et je te garanti que le code du programme que j'ai mis au point pour le défi est d'une simplicité déconcertante ! La partie reconnaissance tiens en une trentaine de lignes.

Coté maths : Il n'y a qu'une fonction trigonométrique (ArcTan)
Coté API Windows : rien
Coté fonctions graphiques : 1 PenPos et 1 LineTo

Citation:

korntex5 a écrit :
très interressant en effet et j'ai ptet un de mes idées saugrenues ;)
malheureusement c toujours ce fameux paramètre temps qu'il me manque, fiancée oblige aie :mouarf:

Et moi je suis marié et j'ai trois enfants, c'est dire ! aie

c'est tout !

anapurna 02/08/2006 10h45

salut

quoi meme pas un moveto ?

dis moi comment tu fait pour commencer ton dessin au milieu de ta zone ?

@+ Phil

NoisetteProd 02/08/2006 11h02

Citation:

anapurna a écrit :
salut

quoi meme pas un moveto ?

dis moi comment tu fait pour commencer ton dessin au milieu de ta zone ?

@+ Phil


Attention, ceci n'est pas une attaque !

Ne pensez-vous pas qu'il vaut mieux imaginer votre solution plutot que de jouer au devinette sur ce qui a été fait ? Le but n'est pas de refaire ce que waskol a fait, mais de faire mieux !

C'est je pense l'esprit du défi. Et de vos différentes solutions, viendra la richesse du défi.

Donc, anapurna, si tu pense qu'il faut utiliser un moveto, utiliser le, tu auras peut être une idée et un code bien plus interresant que ce qu'à fait waskol ;)

Profitez, pour une fois que vous n'êtes pas dans un cadre strict, laissez s'envoler votre imagination et votre créativité 8-)

chtiot 02/08/2006 11h33

je suis parfaitement capable de ne pas relever ce défi...

en fait je suis surtout incapable de faire un tel programme:cry: , mais je suis vraiment curieux de voir la solution8O .

bravo les experts;)

TicTacToe 02/08/2006 12h24

C'est vrai que c'est un défi très interessant ! :D

Et il y a pas mal de manières d'aborder le sujet !
et certaines très simples, mais quiz de la fiabilité ?

je rejoins Noisette, pour ne pas que l'on fasse tous la même chose, il vaut mieux ne rien savoir de la méthode initiale, pour garder l'esprit novateur ! ;)
(Après tout, il faut ré-inventer la roue là...)

Enfin... je suis pas dans le lot encore, j'entamerais peut-être ce week-end, mais je suis comme Anapurna, bientôt les vacances (sans PC :) ).

à mon avis il faudra laisser courir le délai du défi au delà du mois d'aout pour les vacanciers ;)

anapurna 02/08/2006 12h46

salut


je suis effectivement d'accord avec les specialiste ;)
mais je pense au personne debutant et voulant s'attaquer au probleme

pour ma part la gestion du dessin et deja fini il ne me reste que l'analyse du graphique et c'est la c'est le plus interessant
en fait toute la parti graphique pour moi n'apporte pas grand chose ;)

@+ Phil

PS : waskol , je gere plusieurs courbe pour un meme caractere ;)
c'etait pas tres compliqué a mettre en place
PS2 : de toutes les fzcon je me sert pas du moveto :)

waskol 02/08/2006 12h48

Ecoutez la voix de la sagesse qui murmure à travers les paroles de NoisetteProd ;)

Bref, si on vous dit que n'importe qui peut le faire : c'est vrai !
Faites selon votre inspiration, laissez courir votre imagination, et vous vous surprendrez vous même !

Vous savez, en programmation, parfois un problême semble tout simple tout bête et la solution pour y aboutir est atrocement complexe, parfois c'est tout l'inverse !!!

Pour répondre a une question plus haut, modifier les coordonnées de la position du crayon dans un canvas peut se faire de plusieurs façons :
Code:

Canvas.PenPos:=Point(x,y);
c'est la même chose que :
Code:

Canvas.MoveTo(x,y);
;)

Ne cherchez pas a savoir comment j'ai fait, faites avec ce que vous savez !

waskol 02/08/2006 12h49

Citation:

TicTacToe a écrit :
à mon avis il faudra laisser courir le délai du défi au delà du mois d'aout pour les vacanciers ;)


Pas de problèmes

waskol 02/08/2006 12h55

Citation:

chtiot a écrit :
en fait je suis surtout incapable de faire un tel programme:cry:


Pourquoi, as-tu au moins essayé ou réfléchi dessus ?
Je suis absolument sur du contraire...

Encore une fois, le problème semble HYPER-complexe, mais il ne faut pas toujours se fier aux apparences...
Le plus dur c'est de se poser les bonnes questions... et de trouver les bonnes réponses.

Hauwke 02/08/2006 14h21

Citation:

chtiot a écrit :
je suis parfaitement capable de ne pas relever ce défi...
en fait je suis surtout incapable de faire un tel programme:cry:


Un canvas n'est ni plus ni moins qu'une matrice... Et chaque pixels peut être repéré au moyen du couple (X,Y) ainsi que son état [Allumé, éteint]...
Reste à comparer avec la matrice de référence...
:) :) :)

waskol 02/08/2006 15h06

Citation:

Hauwke a écrit :
Un canvas n'est ni plus ni moins qu'une matrice... Et chaque pixels peut être repéré au moyen du couple (X,Y) ainsi que son état [Allumé, éteint]...
Reste à comparer avec la matrice de référence...
:) :) :)


Bien sur, bien sur...
Sincèrement, il y a vraiment plus simple... aie
mais c'est une façon de faire comme une autre ! ;)

Hauwke --> le programme est dispo dans les forums privés ;)

mayloshi 03/08/2006 10h48

salut les gars...

Dites moi, la trajectoire tracée par la souris je peux la rendre visible sur la "tablette" de dessin, hein?8-)

NoisetteProd 03/08/2006 10h51

Citation:

mayloshi a écrit :
salut les gars...

Dites moi, la trajectoire tracée par la souris je peux la rendre visible sur la "tablette" de dessin, hein?8-)


Bien sur ! ;)

waskol 03/08/2006 11h07

Citation:

mayloshi a écrit :
salut les gars...

Dites moi, la trajectoire tracée par la souris je peux la rendre visible sur la "tablette" de dessin, hein?8-)



Hahahaaa, je sens que tu es bien parti :ccool:

anapurna 03/08/2006 17h26

salut

bon j'avance je recupere les mouvements
par contre je n'ai pas d'idée pour determiné si je fait une courbe ou si c'est une suite de diagonal

si une ame charitable peut me proposer des voie de recherche afin d'elargir mon horizon :D

@+ Phil

TicTacToe 03/08/2006 17h46

Damned, j'ai pas commencé aie
mais j'ai des idées :P

A ce foutu temps, pas extensible pour 2 sous.

Anapurna, vecteur par ci, vecteur par là ;) ?

anapurna 03/08/2006 17h55

salut

vi mais comment tu dit que c'est un vecteur circulaire ?
l'exemple le plus comcret serait entre le D et le O si je passe par des vecteur on voit bien que tu en as deux vertical et deux horizontal ou j'ai trop simplifié


@+ Phil

mayloshi 03/08/2006 18h00

Citation:

anapurna a écrit :
salut

bon j'avance je recupere les mouvements
par contre je n'ai pas d'idée pour determiné si je fait une courbe ou si c'est une suite de diagonal

si une ame charitable peut me proposer des voie de recherche afin d'elargir mon horizon :D

@+ Phil


Je vois quelque chose. Essaie un peu avec les courbes de regression de statistiques. Je cherche encore comment faire la correspondance avec les courbures des caracteres, mais je crois que c'est long pour l'instant. Bref il y a mieux.

tiki06 03/08/2006 18h06

Citation:

mayloshi a écrit :
Je vois quelque chose. Essaie un peu avec les courbes de regression de statistiques. Je cherche encore comment faire la correspondance avec les courbures des caracteres, mais je crois que c'est long pour l'instant. Bref il y a mieux.



houla, la ça me semble se compliquer. je ne connais pas la solution de Waskol mais je pense qu'il doit y avoir plus simple. Surtout que :

Citation:

Bon à savoir :

- waskol, selon les règles du défi, a réussi à mettre au point un tel logiciel dont le code sera révélé à l'issu du défi.
Dans celui-ci, il n'y a pas une seule API Windows utilisée, pas un gramme d'intelligence artificielle nécessitant des années d'études en mathématiques, il n'y a que très peu de lignes de code.

anapurna 03/08/2006 18h11

salut


j'ete partie au debut sur les courbe de bezier avec un lissage
pour supprimmer les trempblement du a la souris
puis j'ai relu le sujet et la je me suis appercu que j'ete hors sujet

@+ Phil

TicTacToe 03/08/2006 18h21

je pense qu'il doit y avoir une superbe méthode dans le code de Waskol,

et les indications de simplicités (et le plus dur est de faire simple, c'est bien connu) du code de waskol sont là pour nous rassurer, et pour nous notifier 'c'est faisable', pas pour réussir à le faire avec le moins de lignes de codes ???

ou alors j'ai pas compris le l'objectif
-> faire un prog de reconnaissance avec le moins de lignes possible ? et tendre vers le code de waskol
ou
-> faire un prog de reconnaissance, le reussir et y ajouter sa patte ?

Sommes-nous dans la catégorie 'démo de moins de 2Ko' ? :mouarf:

(enfin, je dis 'nous' pour les autres pour le moment, je cause je cause et j'ai pas encore cliquer sur 'nouveau projet' :) )

tiki06 03/08/2006 18h33

Citation:

TicTacToe a écrit :
je pense qu'il doit y avoir une superbe méthode dans le code de Waskol,

et les indications de simplicités (et le plus dur est de faire simple, c'est bien connu) du code de waskol sont là pour nous rassurer, et pour nous notifier 'c'est faisable', pas pour réussir à le faire avec le moins de lignes de codes ???

ou alors j'ai pas compris le l'objectif
-> faire un prog de reconnaissance avec le moins de lignes possible ? et tendre vers le code de waskol
ou
-> faire un prog de reconnaissance, le reussir et y ajouter sa patte ?

Sommes-nous dans la catégorie 'démo de moins de 2Ko' ? :mouarf:

(enfin, je dis 'nous' pour les autres pour le moment, je cause je cause et j'ai pas encore cliquer sur 'nouveau projet' :) )


Je suis d'accord sur le fait que le but n'est pas de faire le moins de lignes de codes possible. Mais n'oublions pas non plus les règles du défi Delphi :

http://www.developpez.net/forums/sho...d.php?t=144005

et je cite :

Citation:

Bonjour,
L'équipe Delphi a décidé de vous proposer une nouvelle activité : Le Défi Delphi.
Comme son nom l'indique, il s'agit d'un challenge où il sera question de donner la solution :
La plus élégante
La mieux pensée
La plus optimale


Donc le but est bien d'essayer de faire quelque chose de simple aussi.

anapurna 03/08/2006 18h44

salut

moi je me mefie du code de waskol
j'ai vu ce que ca donnée pour les menu
il est passée par une faiblesse du langage c'etait pas trop ortodox comme methode mais ca fonctionnée il faut l'avouer ;)

@+ Phil

Giovanny Temgoua 03/08/2006 19h02

Citation:

anapurna a écrit :
moi je me mefie du code de waskol

Il faut en même temps se méfier de waskol lui même aie

Plus sérieusement, j'ai hâte de lire vos solutions :D

Bon code à tous :)

TicTacToe 03/08/2006 19h03

vi vi tiki :),

j'ai jamais dis le contraire de tout ca, et je n'ai oublié pas les règles :D

Ce que je voulais dire,
C'est qu'une solution longue (un peu plus longue tout du moins), n'est pas forcément incompatible avec les objectifs (élégance etc...).

Et c'est au contraire, souvent quand on veut tout raccourcir coute que coute, que le code devient incompréhensible.
Sauf, effectivement, quand il y a un algo de base qui permet d'être très court, mais on ne tombe pas forcément dessus :mrgreen:

Quitte à choisir, je préfère un code un peu plus long mais clair, plutot qu'un code petit mais pas clair du tout. Si on peux allier les 2, c'est parfait !

mais ceci dit, c'est vrai que la petitesse d'un code fait aussi partie de son élégance ! :)

, heu.. il frappe Waskol ? aieaie

tiki06 03/08/2006 19h24

Oui en fait le tout est de trouver le bon équilibre en simplicité, élegance, longueur de code....etc.

Bon mais c'est pas tout ça, mais va falloir que je continue d'avancer moi car j'ai encore du taf pour arriver au bout du défi. après on verra pour le bon équilibre.... ;)

PS : Ca ressemble à quoi un Waskol en colère ??? :lol:

Jeannot Alpin 03/08/2006 20h57

Pffiou ca a l'air dur ca !
Je vais voir si je peux me dépatouiller mais je part en vacances donc c'est que ca serait pas mal de rallonger le délai 8-)

waskol 04/08/2006 09h16

Citation:

anapurna a écrit :
salut

vi mais comment tu dit que c'est un vecteur circulaire ?
l'exemple le plus comcret serait entre le D et le O si je passe par des vecteur on voit bien que tu en as deux vertical et deux horizontal ou j'ai trop simplifié


@+ Phil



ça c'est le stade où j'en était le premier jour, je te conseille huits directions (mais attention, quand on trace à la souris, on tremble, on est pas très précis...)

Indice : TicTacToe t'as bien "forméé" jeune padawan :mrgreen:

waskol 04/08/2006 09h19

Citation:

mayloshi a écrit :
Je vois quelque chose. Essaie un peu avec les courbes de regression de statistiques. Je cherche encore comment faire la correspondance avec les courbures des caracteres, mais je crois que c'est long pour l'instant. Bref il y a mieux.


Citation:

anapurna a écrit :
salut
j'ete partie au debut sur les courbe de bezier avec un lissage
pour supprimmer les trempblement du a la souris
puis j'ai relu le sujet et la je me suis appercu que j'ete hors sujet
@+ Phil


:mouarf3::mouarf3::mouarf3::mouarf3::mouarf3::mouarf3::mouarf3:

waskol 04/08/2006 09h26

Citation:

TicTacToe a écrit :
, heu.. il frappe Waskol ? aieaie

Citation:

tiki06 a écrit :
PS : Ca ressemble à quoi un Waskol en colère ??? :lol:

A ça :
:furieux:

:mouarf:

TicTacToe 04/08/2006 09h45

bon j'ai commencé hier soir

bin... j'ai comme l'impression qu'il va y avoir une ressemblance avec le code de copyright waskol. :mouarf:

parceque c'est bizzare... j'ai également un arctan dans mon code ! ;)

alors là anapurna, il y a pleing de petits cailloux blancs partout ;)

waskol 04/08/2006 09h51

Citation:

TicTacToe a écrit :
bon j'ai commencé hier soir

bin... j'ai comme l'impression qu'il va y avoir une ressemblance avec le code de copyright waskol. :mouarf:

parceque c'est bizzare... j'ai également un arctan dans mon code ! ;)

alors là anapurna, il y a pleing de petits cailloux blancs partout ;)


Non, je vous assure tous que TicTacToe et moi-même sommes deux personnes différentes et que nous ne communiquons pas par télépathie :mrgreen: aie

Promis, Juré, craché par terre (flute, ma chaussure !aie ), etc...

anapurna 04/08/2006 12h28

salut

je vous est pas dit que je sais recuperer le sens du mouvement que je realise

ce qui me gene c'est la determination des caractere
surtout les caractere tres proche sinon y'a pas photos
pour la recuperation du sens tu est obliger de passer par arctan

j'utilise aussi Hypot juste pour savoir si mon segment n'est pas trop court ;)

@+ Phil

mayloshi 04/08/2006 15h40

Je me demande si y'a pas une petite banque de caractères a reconnaitre qui se cache quelque part...

mayloshi 04/08/2006 16h55

Citation:

anapurna a écrit :
salut

je vous est pas dit que je sais recuperer le sens du mouvement que je realise

ce qui me gene c'est la determination des caractere
surtout les caractere tres proche sinon y'a pas photos
pour la recuperation du sens tu est obliger de passer par arctan

j'utilise aussi Hypot juste pour savoir si mon segment n'est pas trop court ;)

@+ Phil


Je suis convaincu que j'aurai le code le plus different de tous, pcq moi jusque la je ne vois pas encore ce que viendra faire une arctan ici...:cry:

waskol 04/08/2006 17h04

Citation:

mayloshi a écrit :
Je suis convaincu que j'aurai le code le plus different de tous, pcq moi jusque la je ne vois pas encore ce que viendra faire une arctan ici...:cry:



Surtout que l'on peut s'en passer, effectivement ;)

TicTacToe 04/08/2006 17h05

@mayloshi

Fais comme tu le sens de toute manière, il n'y a pas une solution unique pour ce type de problème !
Et le principale, c'est d'avoir un problème à résoudre en tête et s'amuser ;)



de mon coté, j'ai un peu avancé, je sais reconnaitre toutes les lettres, mais je pense que j'ai des progrès a faire en reconnaissance encore :?

j'ai plus que qq jours devant le PC encore :mrgreen:

waskol 04/08/2006 17h11

Citation:

TicTacToe a écrit :
de mon coté, j'ai un peu avancé, je sais reconnaitre toutes les lettres, mais je pense que j'ai des progrès a faire en reconnaissance encore :?


Avec le mien, il vaut mieux s'appliquer quan on "écrit" :mrgreen: aie

TicTacToe 04/08/2006 17h18

Waskol

Heu... avec le accent de "écrit" :question:

et préviens-tu le programme que le dessin est en minuscule ou non ?

bon déjà, pour faire la série modèle, c'est pas évident :mrgreen:

tiki06 04/08/2006 17h25

Citation:

waskol a écrit :
Avec le mien, il vaut mieux s'appliquer quan on dessine "écrit" :mrgreen: aie


Ca me fait penser. Le soft doit être capable de reconnaitre des mots entiers écrits ? ou juste les lettres du mot qu'on dessine les unes après les autres ?

waskol 04/08/2006 17h30

Citation:

tiki06 a écrit :
juste les lettres du mot qu'on dessine les unes après les autres ?


Ca sera déjà pas mal...aie

Et pour les accents, on s'en moque...:mrgreen:

Non, sans rire, à partir du moment ou votre programme reconnait quelque chose (c'est-à-dire reconnître au moins un carré, un cercle et un triangle, une droite dessiner de haut en bas, de bas en haut, de travers, etc...), ce sera déjà pas mal.

Après pour les lettres, je crois qu'on peut oublier les accents, mais ce doit être faisable

tiki06 04/08/2006 17h39

Citation:

waskol a écrit :
Ca sera déjà pas mal...aie

Et pour les accents, on s'en moque...:mrgreen:

Non, sans rire, à partir du moment ou votre programme reconnait quelque chose (c'est-à-dire reconnître au moins un carré, un cercle et un triangle, une droite dessiner de haut en bas, de bas en haut, de travers, etc...), ce sera déjà pas mal.

Après pour les lettres, je crois qu'on peut oublier les accents, mais ce doit être faisable


Cool, là sur le moment j'ai eu un doute et quelques sueurs si il fallait reconnaitre des mots entiers. La ça va mieux. :P

NoisetteProd 04/08/2006 17h41

Citation:

tiki06 a écrit :
Cool, là sur le moment j'ai eu un doute et quelques sueurs si il fallait reconnaitre des mots entiers. La ça va mieux. :P


Prenons les choses dans l'autre sens, ça veux dire quoi reconnaitre un mot entier ? Reconnaitre quand il y a un espace ?
Reconnaitre l'espace me parait primordiale !!! ;)

mayloshi 05/08/2006 12h17

C'est calme ce matin....

Vous mokez pas de moi, mais toute la nuit j'ecrivai les POLYNOMES DE LAGRANGE des caracteres a reconnaitre, puis je me suis rappelé kil fallait pas se depenser mathematiquement parlant...aie

Puis j'ai tout dechiré...:cry:

Dommage...

Puis j'ai trouvé autre chose, mais dommage, je vous dirai rien. Attendez que j'implemente cette fois ci.

P.S: Waskol. ArcTan c'est pour les vecteurs?

Bleys 05/08/2006 12h47

Wahou, moi qui ne pensait jamais voir Polynome de Lagrange ailleurs qu'en cours !!!!!!


Tu as gardé ce que tu avais fait ?

mayloshi 05/08/2006 13h22

Citation:

Bleys a écrit :
Wahou, moi qui ne pensait jamais voir Polynome de Lagrange ailleurs qu'en cours !!!!!!


Tu as gardé ce que tu avais fait ?


Tu sais, 64 polynomes de LAGRANGE c'est pas non plus evident... surtout pour des courbes avec 3 ordonnées comme le caractere "E"... Mais peut etre qu'on verra un jour...

waskol 05/08/2006 17h38

Citation:

mayloshi a écrit :
P.S: Waskol. ArcTan c'est pour les vecteurs?


Oui, enfin, pour calculer l'angle des vecteurs et déterminer une direction aie

acness 05/08/2006 18h25

Bonjour,

C'est la première fois que je discute ici.
Hier je suis tombé par hazard sur ce défi, et j'adore les défis :P
Donc je participe, et je rends ma copie.
Pouvez-vous me dire à quel adresse je dois envoyer ?

NoisetteProd 05/08/2006 18h43

Citation:

acness a écrit :
Bonjour,

C'est la première fois que je discute ici.
Hier je suis tombé par hazard sur ce défi, et j'adore les défis :P
Donc je participe, et je rends ma copie.
Pouvez-vous me dire à quel adresse je dois envoyer ?



Bonjour et bienvenu !

Heureux que tu viennes grossir le rang des défieurs !

Comme indiqué dans ce topic de présentation du défi : http://www.developpez.net/forums/sho...d.php?t=144005 , le mail est defi.delphi @ redaction-developpez.com (sans les espaces bien sur ;) )

Bon courage et bienvenu dans la communautée www.developpez.com !

acness 05/08/2006 19h16

Je suis comblé par ce chaleureux acceuil. :P

Je viens d'envoyer ma solution au défi.

J'étais parti en premier lieu, sur de la reconnaissance de forme classique, puis je me suis rendu compte, que le fait de dessiner les formes en direct nous apportait les infos suffisantes ;)
Et c'est nettement plus simple ainsi :lol:

waskol 06/08/2006 00h04

Citation:

acness a écrit :
Je suis comblé par ce chaleureux acceuil. :P

Je viens d'envoyer ma solution au défi.

J'étais parti en premier lieu, sur de la reconnaissance de forme classique, puis je me suis rendu compte, que le fait de dessiner les formes en direct nous apportait les infos suffisantes ;)
Et c'est nettement plus simple ainsi :lol:



En voilà un qui a compris :king:
Félicitations !

(Par contre, l'EA n'a rien reçu, peux-tu vérifier si ton mail est bien parti STP ? ;) )

acness 06/08/2006 09h53

Hello

Je viens de réenvoyer le mail, j'avais laissé l'accent sur défi dans l'adresse ...aie
J'en ai profité pour ajouter l'affichage sur le dessin des caractéristiques que je retiens d'un caractère, lors du relâchement de la souris.

acness 06/08/2006 10h20

Je ne parviens pas à envoyer de mail à l'adresse :
defi.delphi @ redaction-developpez.com

Je reçois un mail "failure notice" peu de temps aprés ...

Hauwke 06/08/2006 11h14

J'ai reçu 2 emails l'un à 09H51 et le suivant à 10H16
Contenus identiques
Reçu le troisième à 11H21

acness 06/08/2006 11h23

Bonjour,

Je suis désolé, j'ai cru que les mails n'arrivaient pas ...
Je viens en plus de réenvoyer une nouvelle version et dans un zip.
C'est celle là qu'il faut prendre en compte, j'ai rajouté un truc.

Milles excuses pour ce spam ...

________

Ok pour la réception du 3ième, je n'en enverrai plus pour ce défi, c'est promis ;)

waskol 06/08/2006 14h57

Citation:

acness a écrit :
Bonjour,

Je suis désolé, j'ai cru que les mails n'arrivaient pas ...
Je viens en plus de réenvoyer une nouvelle version et dans un zip.
C'est celle là qu'il faut prendre en compte, j'ai rajouté un truc.

Milles excuses pour ce spam ...

________

Ok pour la réception du 3ième, je n'en enverrai plus pour ce défi, c'est promis ;)


Tu es tout excusé :ccool:
J'ai tout bien reçu aussi, promis, je me retiens de regarder (quoique nos méthodes de détection ont l'air de différer quelque peu)
En tout cas : bravo !

acness 06/08/2006 17h55

merci ;)

Je n'ai rien contre le fait que tu jettes un oeil au code source. De toutes façon, ça m'intéresse aussi de voir ta technique.

J'attends avec impatience le prochain défi ... :P

korntex5 06/08/2006 23h33

bon j'ai mon programme qui est bien avancé puisque la parti graphique est finie.
la partie détection est finie avec seulement des + ouioui
Ca marche pas mal et meme plutôt bien mais pas à 100%, je veux dire que j'ai 2 ou 3 carractères que mon prog confond aie
Je ne lui ai pas encore appris les minuscules
mais je souffre du complexe de perfectionisme aigue j'ai du mal a voir quand mon prog est bon a envoyer aie

waskol 07/08/2006 00h30

Un conseil : prends ton temps, le défi n'est pas terminé ;)

Ce que je trouve génial, c'est que l'on a sur ce défi tout plein de nouveaux compétiteurs qui n'avaient pas osé (pu ?) se lancer dans l'aventure. Chapeaux à toutes et à tous :ccool:

Hauwke 07/08/2006 11h35

Citation:

waskol a écrit :
Un conseil : prends ton temps, le défi n'est pas terminé ;)

Ce que je trouve génial, c'est que l'on a sur ce défi tout plein de nouveaux compétiteurs qui n'avaient pas osé (pu ?) se lancer dans l'aventure. Chapeaux à toutes et à tous :ccool:

+100 :) A tel point que je me suis refusé de consulter ton code (forums priv) afin de mieux apprécier tous ces nouveaux compétiteurs...

korntex5 07/08/2006 17h41

oulala c chaud pour les minuscules...aie
je m'explique, déja pour les faires à la souris c pas facile mais en plus ils y a beaucoup plus de façon des les dessiner que pour les majuscules.
Car une majuscule, la plus part du temps nous l'écrivons en écriture batton...

exemple: moi mes "m" ils ont 3 bossent alors que certains ne les fonts que avec 2 comme pour mes "n" a moi...8O


je suis devant un dilèmme ...:(
dois-je livrer avec mon exe, le dico des carractères que je lui ai appris?

NoisetteProd 07/08/2006 17h47

Citation:

korntex5 a écrit :
je suis devant un dilèmme ...:(
dois-je livrer avec mon exe, le dico des carractères que je lui ai appris?


Tout dépend du poids du Dico aie

Il ne me semble pas aberrant d'avoir au dessus de la zone de saisie un dessin pour chaque caratère utilisable...

TicTacToe 07/08/2006 18h19

C'est sur qu'on a pas tous la même écriture :?
et dans ce cas, le mieux est de laisser l'utilisateur se créer sa bibliothèque ! ;)

1ere version publique, ptet la dernière vu que je part en congé dans 3 jours :mouarf:

Au niveau reconnaissance, je sais absolument pas ou je me situe ...

Bon code à tous en attendant !

Pièce jointe 3655

PS: Le dico (nommé bibliothèque pour moi), livré avec... humm... me suis pas super appliqué, mais libre à vous de l'améliorer :)
Il y a également une bib. 'Minuscules'. Car Franchement, j'ai commencé à l'intégrer avec les majuscules, et la reconnaissance commence vraiment à faiblir (ex: le 'c' et le 'C' ... par exemple)

Arrnno 08/08/2006 12h12

Signature d'une image
 
bonjour,

N'y connaissant rien en graphisme informatique, je pose cette question:
Une image n'a-t-elle pas sa signature, son code barre ?
Ceci permettant une fois le dessin/lettre fait de retrouver cette signature et de la comparer à la signature de chaque modèle de la lettre !!!

Est-ce envisageable ?

A bientôt, Arnaud

mayloshi 08/08/2006 12h27

Citation:

TicTacToe a écrit :
C'est sur qu'on a pas tous la même écriture :?
et dans ce cas, le mieux est de laisser l'utilisateur se créer sa bibliothèque ! ;)

1ere version publique, ptet la dernière vu que je part en congé dans 3 jours :mouarf:

Au niveau reconnaissance, je sais absolument pas ou je me situe ...

Bon code à tous en attendant !

Pièce jointe 3655

PS: Le dico (nommé bibliothèque pour moi), livré avec... humm... me suis pas super appliqué, mais libre à vous de l'améliorer :)
Il y a également une bib. 'Minuscules'. Car Franchement, j'ai commencé à l'intégrer avec les majuscules, et la reconnaissance commence vraiment à faiblir (ex: le 'c' et le 'C' ... par exemple)


On arrive quand meme a dessiner, c'est deja ça!;)

Vous savez, je me demandai comment j'allai faire sans "dico"(Moi je parlai de "banque"). Maintenant je crois que j'ai plus besoin de me compliquer la vie, et ça devient tres simple pour moi...:mouarf:

MaTHieU_ 08/08/2006 13h25

Citation:

TicTacToe a écrit :
Il y a également une bib. 'Minuscules'. Car Franchement, j'ai commencé à l'intégrer avec les majuscules, et la reconnaissance commence vraiment à faiblir (ex: le 'c' et le 'C' ... par exemple)


Hum...

Et tracer des lignes comme ça :


Entre les lignes rouges c'est des caractères majuscules et entre la rouge du bas et la orange, c'est des minuscules ?

Mathieu

tourlourou 08/08/2006 14h39

et n'oubliez pas ceux qui tracent l'accent ou le point du i avant la lettre qui les portera !!!

et bravo à tous...

Booster2ooo 08/08/2006 15h48

quand on fait un croix dans ton prog tictactoe, il plante ^^
(partez en haut a droite descendez en bas a gauche remontez en haut a gauche pr finir en bas a droite)

J'ai meme le demineur qui c lancé a un moment oO

NoisetteProd 08/08/2006 15h53

Citation:

Booster2ooo a écrit :
quand on fait un croix dans ton prog tictactoe, il plante ^^

Il ne plante pas, si tu regarde à gauche dans symboles actuels, et si tu clique sur fermer, tu verra que le mouvement que tu défini est destiné à fermer l'application...

Quant au démineur, il sagit de faire une spirale ;)

Booster2ooo 08/08/2006 16h15

Haaa ok ok, dsl pr la méprise alors ;) (la croix par contre, c chaud, pck je voulais faire un X, et si on a pas fait gaffe au sens dans lequel il fallait le faire, pouf plus de prog ^^ )

mayloshi 08/08/2006 16h51

Citation:

Booster2ooo a écrit :
Haaa ok ok, dsl pr la méprise alors ;) (la croix par contre, c chaud, pck je voulais faire un X, et si on a pas fait gaffe au sens dans lequel il fallait le faire, pouf plus de prog ^^ )


Vous m'enervez tous avec vos vecteurs. Grrrrrrraie

waskol 08/08/2006 17h15

Citation:

MaTHieU_ a écrit :
Hum...

Et tracer des lignes comme ça :


Entre les lignes rouges c'est des caractères majuscules et entre la rouge du bas et la orange, c'est des minuscules ?

Mathieu


Rhoooo la bonne idée ;)

waskol 08/08/2006 17h17

Citation:

TicTacToe a écrit :
C'est sur qu'on a pas tous la même écriture :?
et dans ce cas, le mieux est de laisser l'utilisateur se créer sa bibliothèque ! ;)

1ere version publique, ptet la dernière vu que je part en congé dans 3 jours :mouarf:

Au niveau reconnaissance, je sais absolument pas ou je me situe ...

Bon code à tous en attendant !

Pièce jointe 3655

PS: Le dico (nommé bibliothèque pour moi), livré avec... humm... me suis pas super appliqué, mais libre à vous de l'améliorer :)
Il y a également une bib. 'Minuscules'. Car Franchement, j'ai commencé à l'intégrer avec les majuscules, et la reconnaissance commence vraiment à faiblir (ex: le 'c' et le 'C' ... par exemple)


Qu'il est beau ton prog ! :P

TicTacToe 08/08/2006 19h10

Citation:

Waskol a écrit :
Qu'il est beau ton prog !


Merci du compliment ! :)
, mais il y aurait tellement de choses pous le perfectionner, comme l'idée de Mathieu :)

Citation:

MaTHieU_ a écrit :
Hum...

Et tracer des lignes comme ça :


Entre les lignes rouges c'est des caractères majuscules et entre la rouge du bas et la orange, c'est des minuscules ?

Mathieu


Très bonne idée effectivement! mais dans mon idée, je ne voulais imposer ni une place et ni une taille prédéfinies pour le tracé des symboles.
Sinon, c'est une très bonne solution dans une autre optique, qui peux toujours être intégrée...! :)
-> (vérifier la hauteur du car. par rapport aux repères et prendre la bonne bibliothèque en fonction... ca pourrait se faire oui !)

NoisetteProd 11/08/2006 12h14

Vous êtes tous entrain de coder ?? ;)

korntex5 11/08/2006 12h16

bon en retravaillant un peu ma reconnaissance les minuscules passent très bien, plus besoin des ptites lignes comme à l'école, en effet même sur une page blanche le cerveau est capble de reconnaitre 98% des carractères sans erreur, dont j'ai essayé de comprendre comment ça marche...
Comme quoi on ne fait jamais que réinventer ce qui existe déja dans la nature...:mrgreen:

titactoe: ton applis est bien faite et l'annimation des courbes me plait bien, domage que tu impose de tracer le carractère en un seul click...mais c déja super, je me doute que la version suivante réservera d'autres bonnes surprises..;)

Bleys 11/08/2006 16h15

Citation:

NoisetteProd a écrit :
Vous êtes tous entrain de coder ?? ;)


Effectivement ça fait moins animé que le dernier défis :D
Est-ce parce que tout le monde est tellement prit qu'il ne pense plus au forum ou c'est parce que tout le monde est en vacance :D

En tout cas, bon courage à tous ;)

waskol 11/08/2006 18h31

C'est parce qu'on est tous en train de coder comme des fous ! aie

Bon allez, motivation des troupes : ALLEZ, ALLEZ, Ne vous laissez pas impressionner.

On a déjà reçu un code source (pas mal d'ailleurs :mrgreen: ), on attend vos oeuvres, vos commentaires.

Allez, bientôt je vous met en ligne ma version. :mouarf:

korntex5 17/08/2006 03h00

1 pièce(s) jointe(s)
Bon voici ma première version, bon il est 3h00 j'en ai un peu marre et je vais dormis qd même, donc j'ai pas pu faire de doc mais ça va venir.
Mais bon en résumé:

1) une zone de dessin pour dessiner
2) un edit pour entrer le carractère que mon prog doit apprendre
3) un boutton ajouer au dico
4) un boutton corriger si il croit dur comme fer à 100% un carractère et que ce n'est pas celui-la aie
5) un fichier excel qui contient le dictionnaire
6) un onglet actions qui permet de définir l'action associée à un carractère reconnu suivit du carractère RETURN indiqué en exemple dans exemple.jpg

Comme tout le monde n'écrit pas pareil si le prog vous donne un maivaise lettre après reconnaissance avec un taux <100% mieux vaut lui écrire le bon carractère dans l'edit puis appuyer sur ajouter..;)

Giovanny Temgoua 17/08/2006 09h23

Je rappele que vous devez systématiquement tous envoyez votre code sur le mail du défi .... jusqu'à ce que le défi soit déclaré fermé sinon cà fausse tout :?

Entre temps, vous pourrez juste poster les binaires.

Pour le moment nous n'avons reçu qu'un mail sur l'@ du défi et il y'a près de trois propositions sur le forum

korntex5 17/08/2006 09h36

Sans problème je mail tout ce soir mais pourrais-je envoyer la version finale par la suite?

Giovanny Temgoua 17/08/2006 14h01

Citation:

korntex5 a écrit :
Sans problème je mail tout ce soir mais pourrais-je envoyer la version finale par la suite?

Aucun problème :wink:

Jeannot Alpin 18/08/2006 11h49

Je viens juste de rentrer de vacances et j'aimerais bien me lancé dans le défis mais la fin est prévu pour quand ?

Giovanny Temgoua 18/08/2006 11h53

Citation:

Jeannot Alpin a écrit :
Je viens juste de rentrer de vacances et j'aimerais bien me lancé dans le défis mais la fin est prévu pour quand ?

La date de fin n'a pas encore été fixée. Mais ce n'est pas pour bientôt parce qu'il y'a très peu de solutions donc vous pouvez y aller si vous voulez :wink:

Claudius40 18/08/2006 11h56

Bonjour,

Bon puisque il nous reste du temps devant nous, je crois que je vais me jeter dans l'arène ! ;) Mais vu la taille du défi je ne vous promet pas de rendre ma copie.

@+

korntex5 18/08/2006 12h24

dans mon post 109 j'ai remis à jour mon prog ;)

Jeannot Alpin 18/08/2006 14h14

Citation:

Giovanny Temgoua a écrit :
La date de fin n'a pas encore été fixée. Mais ce n'est pas pour bientôt parce qu'il y'a très peu de solutions donc vous pouvez y aller si vous voulez :wink:

Ah cool alors je vais vraiment m'y interresser ! Mais j'ai du mal a démarrer alors je promet pas que je finirais !

Giovanny Temgoua 18/08/2006 19h28

Citation:

Jeannot Alpin a écrit :
Ah cool alors je vais vraiment m'y interresser ! Mais j'ai du mal a démarrer alors je promet pas que je finirais !

L'important est de participer :wink:

TicTacToe 18/08/2006 19h39

Et bonjour a tous

Juste de passage dans un cyber cafe,

je passe le bonjour :),
j ai mis a jour ma version pour pouvoir tracer avec plusieurs mains levees, comme l avait pressenti Korntex :)
La reconnaissance est correcte je pense

mais pas trop le temps de bosser dessus, je posterai donc fin aout et puis voila

(desole pas d accent c est un clavier spagnol :mrgreen: ), je mettrai a jour a mon retour.

c cool, des progs commencent a arriver :)

bonne fin de vacances a tous !!!

mayloshi 19/08/2006 12h02

Moi je commence lundi mes vacances... aie

Mais je vous poste mes premiers results meme a partir d'un cybercafé la semaine prochaine. J'evite d'utiliser les vecteurs en passant par un "placage" du caractere (j'essaye de superposer celui de la souris et celui de mon dico) et je me base sur les "frontieres rectangulaires" du caractere dessiné pour reduire le domaine de recherche (En geometrie vous dites toujours, intersections aux axes d'origine). Je m'explique:
....

Non, je vous envoie d'abord mon prog puis je vous explique apres. Sinon bon retour a TicTacToe, moi je te remplace en vacances. ;)

waskol 20/08/2006 00h30

Secret défense
 
Bon, je me suis entretenu ce soir avec notre Pascal Jankowski national qui vient de proposer une source sur son site perso :
http://jankowski.developpez.com

On a décidé, pour aider ceux qui ont du mal à se lancer, à vous aider un peu... :P

Cette source, qui se trouve ici... :
http://jankowski.developpez.com/src/FileMerge.zip

... concerne un outil mathématique particulier, que j'ai utilisé dans le code de mon logiciel de reconnaissance gestuelle sans même savoir que ça existait :mouarf:
Et dire que je voulait éviter les maths... :roll:

Celà concerne un outil mathématique qui s'appelle la Distance de Levensthein.

Voici le lien Wikopedia qui explique la chose :
http://fr.wikipedia.org/wiki/Distance_de_Levenshtein

Figurez-vous que l'algorithme, qui est assez facile à mettre en oeuvre et qui y est présenté s'applique ici à la Reconnaissance de mots d'orthographe voisine dans un texte.

Et bien, une légère variante du même algorithme peut s'appliquer aussi à ces domaines :
- Reconnaissance vocale (reconnaissance de mots isolés).
- Reconnaissance Gestuelle des mouvements de souris. (C'est dingue non ? :mouarf: )

Comment l'appliquer à votre programme ?
En fait, considérez votre feuille de papier avec 8 directions :
Citation:

En haut à droite --> 1
A droite --> 2
En bas à droite --> 3
En bas --> 4
En bas à gauche --> 5
A gauche -->6
En Haut à gauche --> 7
En haut --> 8

Entre deux mouvements de souris, la souris va d'un point de coordonnées x1/y1 à un autre point x2/y2.

De là, vous pouvez déterminer l'angle que fait le segment avec la verticale (ou l'horizontale) : Angle=Arctangente((y2-y1)/(x2-x1)) et d'autres considérations que je vous laisse découvrir :mrgreen: (Arctan toute seule ne suffit pas)

l'Angle que vous obtenez est soit en radian de (0 à 2*PI), soit en degré (de 0 à 360), soit en terme de directions (de 0 à 7). Vous admettrez que la conversion est facile, vous êtes grands, je vous laisse y réfléchir...

Prenez un V, selon notre convention, si le tracé est idéal, on aura en terme de tracé les directions 3 puis 1 (On va vers le bas à droite puis vers le haut à droite).
Voici sa représentation sous forme de chaîne de caractère :
Code:

s0:='33333333111111111';
ou alors, si on évite de répéter inutilement le même caractère 2 fois de suite :
Code:

s0:='31';

voici plusieurs autres façon de coder, en terme de "directions" d'autres lettres :
Citation:

A=24
B=13456734567
C=8765432
D=134567
E=753
F=75
G=876543217
H=535
I=5
J=56781
K=64
L=53
M=1425
N=145
O=765432187
P=321875
a=7654321543
b=218765432186543

Les directions successives de la souris, peuvent aussi être enregistrées dans une chaînes de caractères. Voici un V tracé à la souris
Code:

s:='2323222333231221111121118188111';

Si on reprend l'algorithme de wikipedia, ce que l'on va faire, c'est de comparer
s avec les différentes valeurs (représentations de lettre) que peut prendre s0.
Plus la valeur retournée de notre fonction DistanceDeLevenshtein à nous sera petite, plus il y aura de chance que le tracé ressemble à la lettre choisie (code non contractuel et purement factice, faut pas dec... non plus aie) :

Code:

//Dictionnaire
Lettres[0]:='A'; TraceDeLettre[0]:='24';
Lettres[1]:='B'; TraceDeLettre[1]:='13456734567';
...


Function LettreReconnue(Trace:string):string;
var LettreCandidate:string;
    UneDistance,MeilleureDistance:integer;
    i:integer;
    s0:string;
begin
  BonneLettre:='';
  MeilleurIndice:=10000000;
  for i:=0 to NbresDeLettresDansLeDico-1 do
  begin
    s0:=TraceDeLettres[i];
    UneDistance:=DistanceDeLevenshtein(s0,trace);
    if UneDistance<MeilleureDistance
    then begin
              MeilleureDistance:=UneDistance;
              BonneLettre:=Lettre[i];
            end;
  end;
  result:=BonneLettre;
end;



Mais notre fonctionsera un "poil" différente de celle de wikipedia, sinon, ce serait trop simple aie
En fait, ici, on compare deux courbes, pas deux mots...

Voici l'algorithme que je vous propose à la place :

Code:

function Distance(Courbe1,Courbe2:string;i,j:integer):integer;
var a,b,c:integer;
begin
  a:=StrToInt(Courbe1[i]);
  b:=StrToInt(Courbe2[j]);
  c:=abs(a-b);
  if c>4 then c:=8-c;
  result:=c;
end;

function DistanceDeLevenshtein(Courbe1,Courbe2:TGeste):integer;
var d:array of array of integer;
    DTW:array of array of integer;
    i,j,n,m,cout:integer;
begin
  n:=Geste1.NbreDePoints;
  m:=Geste2.NbreDePoints;
  SetLength(d,n+1,m+1);
  for i:=1 to n do
    for j:=1 to m do
      d[i,j]:=Distance(Courbe1,Courbe2,i,j);
  SetLength(DTW,n+1,m+1);
  //La première rangée est initialisée un peu différemment
  for i:=1 to m do DTW[0,i]:=100000;
  //La première colonne aussi
  for i:=1 to n do DTW[i,0]:=100000;
  DTW[0,0]:=0;
  for i:=1 to n do
    for j:=1 to m do
    begin
      cout:=d[i,j];
      DTW[i,j]:=Minimum(DTW[i-1,j]+cout, //Là...
                                DTW[i,j-1]+cout, //...et la non plus, ce n'est pas pareil..
                                DTW[i-1,j-1]+cout);
    end;
  result:=DTW[n,m];
end;


Explications :
Contrairement à ce qui est montré sur wikipedia, on calcule ici de vraies distances (de vraies différences de valeurs en fait)
Pour vous en convaincre, faites vous un petit échantillon et faites vos petits tableaux (Astuce : excel, c'est cool pour ça...) comme le montre wikipedia.
Vous verrez, d'un seul coup vous aurez appris plein de chose en matière d'intelligence artificielle... :mrgreen:

En effet, par exemple, pour la reconnaissance vocale on utilise ce procédé tout simple pour comparer les données des courbes d'un fichier WAV (ce qui a été dit dans le micro) avec divers échantillons qui sont dans d'autres fichier WAV (pour savoir si le Monsieur à dit "Carré", "Cercle" ou "Triangle" par exemple).

Je vous préviens, si vous ne trouvez pas d'idées pour le prochain défi, ce sera votre prochaine punition... aie

Pour aller plus loin :
Vous pouvez aussi avoir une approche en codant une fonction récursive; voici l'algorithme de Wikipedia que j'ai remanié pour vous ;) :
Code:

entier Cout(caractère chaine1[1..longueurChaine1], caractere chaine2[1..longueurChaine2], entier i, entier j)
  si chaine1[i] = chaine2[j] alors retourner 0
                            sinon retourner 1
//Fin


entier Distance(caractère chaine1[1..longueurChaine1], caractere chaine2[1..longueurChaine2], entier i, entier j)
  Si i=0 alors retourner j
  sinon si j=0 alors retourner i
  sinon retourner minimum(distance(Chaine1,Chaine2,i-1, j) + 1,    // effacement
                          distance(Chaine1,Chaine2,i, j-1)+ 1,    // insertion
                          distance(Chaine1,Chaine2,i-1, j-1) + coût(Chaine1,Chaine2,i, j)  // substitution
//Fin


]entier DistanceDeLevenshtein(caractere chaine1[1..longueurChaine1], caractere chaine2[1..longueurChaine2])
  retourner Distance(Chaine1,Chaine2,longueurChaine1, longueurChaine2)
//Fin


Je vous prévient, cette approche, quoique élégante au niveau académique est particulièrement désastreuse en termes de performances ! aie (c'est du vécu :mouarf: )

Bon, je crois que j'en ai trop dit et que je vous ai tous mis en selle et réalisé la moitié du boulot, après vous n'avez plus qu'a vous amuser avec un TPaintBox et ses évènements OnMouseDown/OnMouseMove/OnMouseUp

A vous de jouer... :mouarf:

Je peut vous assurer qu'on peut, sans trop se compliquer la vie, faire encore mieux que ce que je vous ai proposé là, en tout cas c'est mieux que le code de ma première version où j'ai trouvé le procédé de façon complêtement empirique ! :D

Pour les "Pros" qui ont déjà envoyé leur code : vous ne nous en voulez pas hein ?:oops:

Pascal Jankowski 20/08/2006 06h55

Je voulais simplement ajouter une petite chose.
Je ne suis pas l'auteur de ce source, il faut rendre à César ce qui lui appartient

L'auteur de ce source est un membre de dvp qui me l'a fait parvenir par mail et son pseudo est _cqu_

J'en profite d'ailleurs pour vous rappeler que vous pouvez tous contribuer à la page source.

Bon défi à tous :D

Jeannot Alpin 20/08/2006 10h21

Ah bah ca c'est gentil !!!:D

korntex5 21/08/2006 12h24

oula ça me parait pas très simple finalement cette méthode des distance... un peu trop mathématique comme approche a mon gout :cry:
vous pouvez aussi essayer une approche graphique

waskol 21/08/2006 13h29

Citation:

korntex5 a écrit :
oula ça me parait pas très simple finalement cette méthode des distance... un peu trop mathématique comme approche a mon gout :cry:
vous pouvez aussi essayer une approche graphique


Mais si !
En fait, c'est une histoire de "quel est le chemin le plus court" entre ce que l'utilisateur a tracé et les différents modèles...

Voici un exemple concret
l'utilisateur à tracé un V, et comme il dessine hyper mal, ça donne :
Code:

s:='23323121181';

on va essayer de comparer avec un A, un L et un V que l'on a dans notre dictionnaire :
A : S0='24';
L : S1='53';
V : s2='31';

On compare s et s0 pour voir si c'est un A :
1) Voici notre tableau des distances :
Code:

Distance(i,j)=ABS(s0[i]-s[j])
        i=        1        2
j=                2        4 <--- s0[i]
---------+-------------
1        2|        0        2
2        3|        1        1
3        3|        1        1
4        2|        0        2
5        3|        1        1
6        1|        1        3
7        2|        0        2
8        1|        1        3
9        1|        1        3
10      8|        2        4
11       1|        1        3
        ^
        |
        +---s[j]


Ensuite, on fait un deuxième tableau que j'ai appelé DTW, on l'initialise comme ceci :
Code:

j=\i=        0        1        2
0        0        10000        10000
1        10000        0        0
2        10000        0        0
3        10000        0        0
4        10000        0        0
5        10000        0        0
6        10000        0        0
7        10000        0        0
8        10000        0        0
9        10000        0        0
10      10000        0        0
11      10000        0        0
12      10000        0        0


A partir de là on rempli les cases où il y a des zéros (celles qui se trouvent en-dessous et à droite des cases ou on a 10000, comme la case qui est en rouge.
Pour ce faire prenons notre case en rouge, on prend la valeur la plus petite entre la case qui se trouve au dessus, celle qui se trouve à gauche, et celle qui se trouve au-dessus à gauche (cases vertes).
La valeur la plus petite est 0. on recopie cette valeur et on ajoute la distance(i,j) correspondante qui est aussi 0.
Puis on passe à la case du dessous jusqu'a avoir terminé la colonne. puis on passe à la colonne suivante et on obtient :
Code:

DTW(i,j)
j=\i=        0        1        2
0        0        10000        10000
1        10000        0        2
2        10000        1        1
3        10000        2        2
4        10000        2        4
5        10000        3        3
6        10000        4        6
7        10000        4        6
8        10000        5        7
9        10000        6        8
10        10000        8        10
11        10000        9        11
12        10000        9        9


On lit la valeur qui se trouve en bas à droite et on obtient v0=9

On compare s et s1 pour voir si c'est un L :
On fait la même chose que pour le A et on obtient :
Code:

        i=        1        2                j=\i=        0        1        2
j=                5        3                0        0        10000        10000
1        2        3        1                1        10000        3        4
2        3        2        0                2        10000        5        3
3        3        2        0                3        10000        7        3
4        2        3        1                4        10000        10        4
5        3        2        0                5        10000        12        4
6        1        4        2                6        10000        16        6
7        2        3        1                7        10000        19        7
8        1        4        2                8        10000        23        9
9        1        4        2                9        10000        27        11
10        8        3        1                10        10000        30        12
11        1        4        2                11        10000        34        14
                                        12        10000        34        14

On lit la valeur qui se trouve en bas à droite et on obtient v1=14

On compare s et s2 pour voir si c'est un V :

Code:

        i=        1        2                j=\i=        0        1        2
j=                3        1                0        0        10000        10000
1        2        1        1                1        10000        1        2
2        3        0        2                2        10000        1        3
3        3        0        2                3        10000        1        3
4        2        1        1                4        10000        2        2
5        3        0        2                5        10000        2        4
6        1        2        0                6        10000        4        2
7        2        1        1                7        10000        5        3
8        1        2        0                8        10000        7        3
9        1        2        0                9        10000        9        3
10        8        5        1                10        10000        14        4
11        1        2        0                11        10000        16        4
                                        12        10000        16        4

On lit la valeur qui se trouve en bas à droite et on obtient v2=4

Interprétation du résultat :
Bon, maintenant, entre les valeurs V0, V1 et V2, quelle est la plus petite ? Hein, hein, dis ?

Bravo, c'est V2, donc la lettre tracée est plus que probablement un V.

CQFD, sans maths ou presque, juste en remplissant deux tableaux.

Tu vois, ce n'est pas si compliqué... :roll:

ero-sennin 21/08/2006 16h28

Salut Waskol,

Je suis vachement intéressé par cette méthode, et bien que j'ai encore rien commencé concernant le Défi (manque de temps ...) je voudrais tout de même comprendre le fonctionnement de la Distance de Levenshtein

En fait, il y a 2/3 choses dont je n'arrive pas trop bien à cerner :(

Citation:

Waskol a écrit :
On compare s et s0 pour voir si c'est un A :
1) Voici notre tableau des distances :
Code:

Distance(i,j)=ABS(s0[i]-s[j])
        i=        1        2
j=                2        4 <--- s0[i]
---------+-------------
1        2|        0        2
2        3|        1        1
3        3|        1        1
4        2|        0        2
5        3|        1        1
6        1|        1        3
7        2|        0        2
8        1|        1        3
9        1|        1        3
10        8|        2        4
11        1|        1        3
        ^
        |
        +---s[j]



Je n'ai pas compris d'où venais le i=12 (l=24 car c'est la lettre de comparaison A si je ne me trompe pas )
Aussi concernant ce passage
Code:

Distance(i,j)=ABS(s0[i]-s[j])
je vois pas trop :oops:

Peut-être suis-je un peu bête :mrgreen: mais bon ...

Merci ;)

waskol 21/08/2006 16h46

Citation:

ero-sennin a écrit :
Salut Waskol,

Je suis vachement intéressé par cette méthode, et bien que j'ai encore rien commencé concernant le Défi (manque de temps ...) je voudrais tout de même comprendre le fonctionnement de la Distance de Levenshtein

En fait, il y a 2/3 choses dont je n'arrive pas trop bien à cerner :(

Je n'ai pas compris d'où venais le i=12 (l=24 car c'est la lettre de comparaison A si je ne me trompe pas )
Aussi concernant ce passage
Code:

Distance(i,j)=ABS(s0[i]-s[j])
je vois pas trop :oops:

Peut-être suis-je un peu bête :mrgreen: mais bon ...

Merci ;)

Mais non, tu n'es pas bête et tu fais très bien de demander !

le i=12 ce sont les indices du tableau, tu sais :


Code:

for i:=1 to 2
  for j:=1 to 11 do
    Distance[i,j]:=...


Donc le Tableau Distance est un tableau à 2 dimensions avec des indices qui vont de 1 à n et de 1 à m
Et le tableau DTW a des indices qui commencent à zéro (donc de i=0 à i=n et de j=0 à j=m).

Bref i=, j=, 1 2 sur la ligne et les 1 2 3 4 5 6 7 8 9, etc sur la première colonne sont juste là pour faire jolis...

C'est plus clair là ?

C'est sur, c'est pas facile de faire un tableau en BBCode....

Code:

Distance(i,j)=ABS(s0[i]-s[j])
ABS, c'est la fonction "Valeur Absolue"
S0[i] est le i-ème élément du tableau s0[]
S[j] est le j-ème élément du tableau s[]

Incohérences dans mes explications :
Sinon, oui effectivement, dans un cas je parle de chaîne de caractère :
s0:='31';
et je l'utilise en suite comme entier... :roll:

C'est clair, il y a un IntToStr à rajouter là... :roll:

Ensuite la distance entre la direction 1 est la direction 8
(et pas 7) parce qu'on se place sur un cercle... d'où :
Code:

function Distance(Courbe1,Courbe2:string;i,j:integer):integer;
var a,b,c:integer;
begin
  a:=StrToInt(Courbe1[i]);
  b:=StrToInt(Courbe2[j]);
  c:=abs(a-b);
  if c>4 then c:=8-c;
  result:=c;
end;


C'est sur, il y a deux, trois petites choses comme ça, mais je me refuse d'offrir du code sans erreurs et des explications "au carré" avant la fin du défi. A vous de comprendre le mécanisme...:mrgreen:

J'ai exposé ici un principe , à vous d'en faire ce que vous voulez. Il y a d'autres solutions, surement (Mon code initial par exemple...)

ero-sennin 21/08/2006 18h04

Merci pour ton explication,

C'est (un peu) plus clair ;)

Comme tu dis, il existe d'autre façon de faire mais (personnellement) cette méthode m'intéresse beaucoup!
Allez, dès que j'ai le temps, j'essaie de tester tout celà ;)

Encore Merci

Jeannot Alpin 21/08/2006 19h09

Citation:

ero-sennin a écrit :
C'est (un peu) plus clair ;)


:D Mais ca a pas l'air d'être facile a expliquer !
Moi aussi j'ai un peu de mal a comprendre mais cette technique m'interresse beaucoup aussi et j'ai du mal a la mettre en oeuvre mais j'y arriverrai bien dans quelques jours !8-)

waskol 22/08/2006 10h26

En tout cas, Claudius40 à compris, à décidé de se lancer, et nous à envoyé son code hier ;)

On peut l'applaudir... :applo:

Claudius40 22/08/2006 12h11

Bonjour,

C'est un peu tôt pour les applaudissements, car je pense mon code mérite grandement d'être amélioré. Mais j'y travaille...

@+ Bon dev à tous.

Captain_Flam 24/08/2006 09h46

Bonjour à tous

Je suis un petit nouveau sur le site, mais comme beaucoup d'autres abonnés j'adore le déphi delphi.
J'essaye de le relever de mon mieux.

Suite au post de waskol j'aimerai faire une petite remarque.




Waskol parle de direction uniquement...

Direction -/|\
Codage 0123


je pense que la notion de sens est peut être importante...

(on tourne dans le sens trigo)
SENS -/|\-/|\
Codage 01234567


Juste une petit exemple
pas de difference entre un p et un b en tenant compte uniquement de la direction.

.....................DIRECTION ...........SENS
Dessin d'un p
-------------

.-
| |
.-
|
.....................= 22020 ............ 22064


Dessin d'un b
-------------

|
.-
| |
.-
....................= 22020 .............66024


Concernant l'avancement de mon code ..je m'amuse simplement avec les mousedown, Mouseup :oops:

Mais je compte bien envoyer une solution

waskol 24/08/2006 11h08

A Capitaine Flam : (haaa, j'ai toujours révé d'écrire au héro de mon enfance ;) )

Ha oui, là, c'est toi qui à raison j'ai bien inversé la notion de sens et de direction, ... bouh !... :mrgreen:

Mais j'utilise bien 8 sens, enfin, tu as compris. Donc pas de confusion entre p et b ;)

J'ai utilisé, à tort, le mot disrection au sens commun du terme... 8 directions qui sont en fait 8 sens... aie

Claudius40 24/08/2006 16h14

Salut à tous !

Bon je me suis penché de nouveau sur ce défi, et j'obtiens à quelques améliorations.

Cependant pour obtenir une reconnaisance de caractères (presque) parfaite je pense que la méthode de Levenshtein atteint ses limites.

Prenons l'exemple du D et du P. Pour ces 2 lettres le tracé est quasi identique. En se fixant sur mon repère de direction (et sens, merci Captain ;) ) j'arrive au même résultat: 821876.

On peux retrouver une similitude de trait pour le X et le Y.

J'arrive donc à cette question: n'est-il pas nécessaire de combiner la méthode de Levenshtein avec une reconnaissance graphique pure :question:

Je n'attends pas à ce que l'on m'aide à trouver une réponse, je voulais juste partager ce sentiment.

@+ Claudius

waskol 24/08/2006 16h25

Citation:

Claudius40 a écrit :
Cependant pour obtenir une reconnaisance de caractères (presque) parfaite je pense que la méthode de Levenshtein atteint ses limites.

Non, elle n'atteind pas ses limites, tu crois tout de même pas que je vais tout dire non plus... :mrgreen:
Citation:

Claudius40 a écrit :
Prenons l'exemple du D et du P. Pour ces 2 lettres le tracé est quasi identique. En se fixant sur mon repère de direction (et sens, merci Captain ;) ) j'arrive au même résultat: 821876.

Effectivement, il y a donc moyen d'utiliser autre chose que des directions (sens aie ).... des coordonnées par exemple.

Distance=sqrt((x2[i]-x1[j])²+((y2[i]-y1[j])²), mais comme ça requier plus de variables à stocker, et qu'il faut "normaliser" les coordonnées dans lequel une lettre est tracé, c'est un tout petit peu plus complexe, mais rien d'insurmontable. ;)

Ou alors, autre méthode, vérifier où commence et où fini le tracé...;)

rezuss 24/08/2006 16h37

Intéressant ce petit défi, je crois que moi aussi je vais m'y mettre, on verra ce que ça donnera :)

Jeannot Alpin 24/08/2006 19h14

Citation:

rezuss a écrit :
Intéressant ce petit défi, je crois que moi aussi je vais m'y mettre, on verra ce que ça donnera :)

Super ! Plus on est de fou plus on s'amuse ! et plus il y aura de solution differente !:D

rezuss 24/08/2006 19h18

Au fait, on a conbien de temps pour réaliser ce défi?

NoisetteProd 24/08/2006 19h37

Citation:

rezuss a écrit :
Au fait, on a conbien de temps pour réaliser ce défi?

Tu pense avoir besoin de combien de temps ?

rezuss 24/08/2006 20h30

Difficile à dire, je viens tout juste de commencer... :oops:

NoisetteProd 24/08/2006 20h32

Citation:

rezuss a écrit :
Difficile à dire, je viens tout juste de commencer... :oops:


Et vous autre, de combien de temps pensez vous avoir besoin pour finir ce défi ??

:merci:

Jeannot Alpin 24/08/2006 21h05

Citation:

Et vous autre, de combien de temps pensez vous avoir besoin pour finir ce défi ??
Pfffou difficile a dire mais 1 semaine peut etre :oops: (si c'est pas trop long sinon j'essayerai de faire plus vite)

tiki06 25/08/2006 08h45

Citation:

Et vous autre, de combien de temps pensez vous avoir besoin pour finir ce défi ??


Moi en ce qui me concerne ça fait un petit moment que je suis dessus, mais c'est vrai que j'ai pas beaucoup de temps, donc c'est seulement petit à petit par morceau que j'avance. Je serais plus dispo début septembre, donc c'est vrai que si on pouvait attendre du genre vers le 9 ou 10 septembre je trouverais ça super (Comme ça peut être que ceux qui rentrent de vacances début septembre verront le défi). Mais ça fait peut être un peu loin, et vous voulez peut être pas attendre jusque là.

Captain_Flam 25/08/2006 12h08

Merci à Waskol de continuer à nous "infuser" ses précieux conseils.

En effet pour ma part je continue à creuser l'idée de la distance de levenshtein.

Mais je n'oublie le Module de mes vecteurs.

Il faut il faut améliorer le concept de notre partie élémentaire ( ou quantum ou élément irréductible) .. non pas les gaulois ... aie

Je m'eplique pour ma part j e m'oriente vers un concept de "bâton" orienté de Module "unitaire" .
Un bâton orienté .. c'est un vecteur.. défini par un angle ( ici un orientation simplifiée) et un module ( concept à simplifier aussi) et ensuite je compare tous les modules de l'ensemble des vecteurs.

Il faudrait ( je ne l'ai pas encore implementer... ) alors convertir les valeurs de modules en 1,2,3.. unités et fournir autant de fois le nombre de bâtons orientés.

par exemple : on a une liste de vecteurs du style:

pour le caractère P : Module | Orientation : 457|2,223|0,234|6,207|4

après conversion (simplifaction des valeurs de module) ( à définir... ) la liste devient

Caractère P : Module | Orientation : 2|2,1|0,1|6,1|4

Notre chaine de comparaison contient donc 2 bâtons orientés vers le haut, 1 vers la droite, 1 vers le bas, 1 vers la gauche

traduit en caractères d'orientation pour notre chaine de levenshtein = '22064' ... à comparer à notre dico...


J'avance petit à petit sur le déphi (??? ) Comme beaucoup je reviens de vacances et nous devons tous donner un coup de collier.:zzz: :zzz: :zzz:

TicTacToe 26/08/2006 03h47

1 pièce(s) jointe(s)
de retour de vacances :piou:

La discussion a pas mal évoluée ! :)

Je poste l'executable qui pour ma part a moins évolué que ce fil, mais je n'aurais plus le temps de le mettre à jour bien qu'à mon avis, la reconnaissance soit largement perfectible :roll:

Pièce jointe 4161

Claudius40 26/08/2006 14h20

1 pièce(s) jointe(s)
Bonjour à tous !

Bon voilà ce à quoi je suis arrivé. Tout n'est pas parfait, loin de là, mais bon !
Ecrivez plutot gros !!

Bon courage à ceux qui trime encore ;)

@+

TicTacToe 26/08/2006 16h21

Bravo :applo: pour ton prog Claudius, très joli et convivial.

Je n'arrive pas à tracer certains car.
comme le 'é'

et aussi, si on définit le X, en inversant l'ordre des batons, le Y est totalement ignoré par la suite (mais je suis tombé strictement sur le même problème à un moment ;) )

Sinon, très beau programme :D
allez, on attends les autres binaires !

Claudius40 26/08/2006 18h45

Merci Tic-Tac-Toe pour tes commentaires sympathiques.:)

Effectivement le X et le Y posent problèmes d'interprétation lorsqu'ils sont dessinés selon le même tracé.

La méthode que j'ai utilisée atteint sûrement ses limites. Je n'aurai sûrement pas le temps de m'y consacrer davantage.:cry:

@+

PS: Pour ceux qui veulent transmettre leur projet à la rédaction, un conseil, ne transmettez pas l'exe dans votre zip mais uniquement vos sources.
J'ai eu des problèmes de rejet lors de l'envoi.

Bon courage à tous.

mayloshi 27/08/2006 19h53

:oops: :( Bououououh.

Ils ont presque tous finis, mais pas moi, maman...

Jeannot Alpin 27/08/2006 20h58

Citation:

Ils ont presque tous finis, mais pas moi, maman...
Tu n'ai pas le seul !:( Moi je rame un peu mais j'espere finir bientot !

NoisetteProd 28/08/2006 14h05

A tous,

La fin du défi à été fixée au 15 septembre 2006 23h59
par l'équipe Défi Delphi.

Je vous rappel que seul les binaires peuvent être déposé dans ce fil de discussion.

Les codes sources sont à envoyer à l'adresse defi indiquée dans les règles du défi.

Bon courage pour cette dernière ligne droite, et amusez vous bien !

Jeannot Alpin 28/08/2006 14h06

Parfait !! Ca nous laisse plein de temps pour finir tout ca !:P

korntex5 29/08/2006 02h04

1 pièce(s) jointe(s)
Nouvelle Version de ma solution, j'ai pas eu trop de temp pour rmenier la reconnaissance mais les actions ont évoluées on peux dors et déja en plus
  • des actions de lancement de fichier ex: W lance Word (si on le configure)
  • calculer une formule du type 1+2*3
  • corriger l'orthographe d'un mot écrit comme VOTURE en VOITURE ou VELLO en VELO

chacunes de ses action s'effectue en dessinant les carractères un à un car la reconnaissance s'effectue carractère par carractère puis pour valider un joli RETURN dessineé comme celui de votre de la touche Entrée, autrement dit un trait descandant qui par à angle droit vers la gauche...aie


dites moi ce que vous en penssez?

anapurna 29/08/2006 11h04

salut

bon de retour de vacance je voit que les concurrent on bien avancé
il ne reste plus que 15 jours pour vous mettre la paté donc ;)

@+ Phil

Jeannot Alpin 30/08/2006 18h29

:D Ouai trop content je viens enfin de comprendre comment marchait La Distance de Levenshtein ! :D
Il reste plus qu'a le programmer !! aie

Pedro 02/09/2006 23h51

Citation:

anapurna a écrit :
salut

bon de retour de vacance je voit que les concurrent on bien avancé
il ne reste plus que 15 jours pour vous mettre la paté donc :wink:

@+ Phil

Citation:

:D Ouai trop content je viens enfin de comprendre comment marchait La Distance de Levenshtein ! :D
Il reste plus qu'a le programmer !! aie

On a tous hâte de voir vos programmes :D
Une fois encore, la compétition est rude ;)

Jeannot Alpin 03/09/2006 17h39

Pffffou:scarymov: après m'être cassé la tete pendant des jours voila mon programme (par contre les performances ne sont pas extra !aie)
Je pense que je vais le pauffiner un peu avant d'envoyer les sources !:?

ero-sennin 03/09/2006 18h09

Salut,

Jeannot Alpin, ne manquerait-il pas un fichier dans le post que tu as mit précédemment car il me marque "Erreur fichier introuvable". Et lorsque je dessine, il me mais une Erreur hors limite de -1" (plus très sur de la phrase).

Voilà, je vous laisse!
Les cours reprennent grrr aie
Bonne Soirée

EDIT:

Ah ba c'est rectifié lol

Pedro 03/09/2006 18h09

Citation:

Jeannot Alpin a écrit :
Pffffou:scarymov: après m'être cassé la tete pendant des jours voila mon programme (par contre les performances ne sont pas extra !aie)

Euh... J'ai eu des problèmes Houston aie
Au démarrage:
Citation:

Fichier introuvable.

Ensuite, je dessine des lignes sur l'écran tactile et d'un coup,
Citation:

Index hors limite (-1)
qui ne s'arrête plus. On est obligé de killer l'appli pour que les messages s'arrêtent ;)

Jeannot Alpin 03/09/2006 18h11

Citation:

Euh... J'ai eu des problèmes Houston
Au démarrage:
Citation:
Fichier introuvable.
Ensuite, je dessine des lignes sur l'écran tactile et d'un coup,
Citation:
Index hors limite (-1)
qui ne s'arrête plus. On est obligé de killer l'appli pour que les messages s'arrêtent

Autant pour moi j'ai oublié de mettre le dico ! voila c'est rectifier !

Pedro 03/09/2006 18h16

Citation:

Jeannot Alpin a écrit :
Autant pour moi j'ai oublié de mettre le dico ! voila c'est rectifier !

Ah c'est beaucoup mieux :D
Par contre, j'ai beaucoup de mal à le faire reconnaitre mes caractères :? Y-a-til quelque chose à savoir que je ne sais pas?

Jeannot Alpin 03/09/2006 18h25

Citation:

Pedro a écrit :
Par contre, j'ai beaucoup de mal à le faire reconnaitre mes caractères :? Y-a-til quelque chose à savoir que je ne sais pas?


Ah bon ? bah mince alors (normalement ya rien de spécial à faire :? Je vais essayer d'améliorer tout ca !

Pedro 03/09/2006 18h29

Citation:

Jeannot Alpin a écrit :
Ah bon ? bah mince alors (normalement ya rien de spécial à faire :? Je vais essayer d'améliorer tout ca !

Non attends explique plutot ce qu'il faut faire dans l'ordre parce que ça peut aussi venir de moi aie
Voila ce que je fais:
Je lance le prog
J'écris sur la zone à droite (mais je ne sais pas si on peut relacher la souris ou pas pour dessiner un caractère...) et ça met rarement le bon caractère...

Jeannot Alpin 03/09/2006 18h58

Citation:

Pedro a écrit :
Je lance le prog

La pas de problème !:lol:

Citation:

Pedro a écrit :
J'écris sur la zone à droite (mais je ne sais pas si on peut relacher la souris ou pas pour dessiner un caractère...)

La ok aussi ! mais tu peux relacher la souris (tu peux modifier le temps avant l'analyse avec la tempo (en bas a gauche !)

Citation:

Pedro a écrit :
et ça met rarement le bon caractère...

Et la c'est possible que ca marche pas très bien (surtout pour le minuscule !:? )

Pedro 03/09/2006 19h13

Citation:

Jeannot Alpin a écrit :
Et la c'est possible que ca marche pas très bien (surtout pour le minuscule !:? )

Ca peut venir aussi de ma façon d'écrire les caractères qui n'est pas forcément pareille que la tienne ;)
L'idéal est en fait un module d'apprentissage comme sur les Palm ;) Ca permet comme ceci à tout le monde et quelque soit son écriture d'utiliser ton prog. En plus, tu évites comme ça le fichier dico à fournir avec puisque tu le génères à l'apprentissage ;)

Jeannot Alpin 03/09/2006 20h48

Citation:

Pedro a écrit :
L'idéal est en fait un module d'apprentissage comme sur les Palm ;) Ca permet comme ceci à tout le monde et quelque soit son écriture d'utiliser ton prog. En plus, tu évites comme ça le fichier dico à fournir avec puisque tu le génères à l'apprentissage ;)


C'est bien ce que pensait faire mais je sais pas si j'aurais le temps (la rentrée est apres demain pour moi et après j'ai plein de boulot ...)
Sinon un conseil : écrit gros !aie

korntex5 04/09/2006 13h17

pourquoi dois on sélectionner majuscule ou minuscule avant la reconnaissance ? tes dictionnaires se chevauchent?

Jeannot Alpin 04/09/2006 13h31

Citation:

korntex5 a écrit :
pourquoi dois on sélectionner majuscule ou minuscule avant la reconnaissance ? tes dictionnaires se chevauchent?

En effet, surtout pour ceux qui font des minuscule d'ordinateur qui ressemble au majuscule mais je vais voir je vais peut être rassembler les dico (apprentissage à la premiere utlisation !);)

Fabrice ROUXEL 1 05/09/2006 10h58

Bonjour.

Voici une modeste version qui implémente la distance de Waskolstein.:mouarf:

Pedro 05/09/2006 13h39

Citation:

Fabrice ROUXEL 1 a écrit :
Bonjour.

Voici une modeste version qui implémente la distance de Waskolstein.:mouarf:

Beau boulot il marche pas mal du tout :D
Toutefois, j'ai eu quelques problèmes sur les 2 qui étaient reconnus comme des R et le U comme un J... Mais sinon, ça marche très bien :D :ccool:
Pour faire mon casse bonbons, je dirais juste que la reconnaissance est un poil trop longue mais bon... ;)

Fabrice ROUXEL 1 07/09/2006 14h28

Pedro a écrit:
Citation:

Toutefois, j'ai eu quelques problèmes sur les 2 qui étaient reconnus comme des R et le U comme un J

Je prends bonne note de ces remarques.;)
La mise en place d'un second niveau d'analyse devrait corriger ces problemes.

En ce qui concerne la lenteur du mode automatique, un timer déclanche l'analyse au terme d'un laps de temps d'1.30 seconde.
En effet je n'ai pas encore trouvé le truc pour déterminer la fin d'un caractère après plusieurs levés.

@+

Mike85 09/09/2006 00h41

Ce défi est vraiment très intéressent. :mouarf:
Je crois que je vais m'y mettre quand j'aurais le temps, sauf que ce sera en VB6.

NoisetteProd 12/09/2006 01h13

Attention, la date de fin du défi approche !

Pensez à envoyer vos copies sur le mail ;)

Bon courage à tous !

anapurna 12/09/2006 10h09

bon

je pense vous l'envoyer a temps
j'ai eu un petit contretemps ,
mais je devrais pouvoir m'en sortir

@+ Phil

Pedro 12/09/2006 21h26

Bon courage à tous pour la dernière ligne droite :D

waskol 12/09/2006 21h54

Merci Pedro !

Surtout que je me suis aperçu que je n'avais pas mis le mien en ligne.
Avec le tutoriel spécial, j'avais complêtement oublié ! :lol:

Avec ma panne d'Internet d'il y a deux semaines et la machine à laver que je n'ai pas encore fini de réparer (pieces=30 heuros, main d'oeuvre=4 jours ==> conclusion : je le fait moi-même aie ), je suis complêtement perturbé :koi:

korntex5 14/09/2006 01h42

1 pièce(s) jointe(s)
Voici ma dernière version, avec une option supplémentaire assez interressante
ou je m'affranchit de ma zone de saisie.
Vous pouvez dessiner n'importe ou dans windows en clickant "sur le boutton du millieu" de la souris et mon prog fait l'annalyse et déclenche toujours une action ratachée à un carractère si vous l'avez paramétré, ou interprete un chaine de carractère.

soucis l'annalyse est moins bonne que dans la zone, je ne sais pas trop pourquoi et mon applis ne dois pas être minimisée, mais je vais essayer de corriger cela pour demain...

Fabrice ROUXEL 1 14/09/2006 14h57

Bonjour à toute l'équipe et les compétiteurs.

Je vous présente la version finale, l'interface est améliorée, l'algorithme de reconnaissance reste inchangé. (donc pas de perceptrons multicouches ni autres formes complexes d'IA).


Cordialement.

NoisetteProd 14/09/2006 23h39

Plus qu'un jour et une poigné de minutes (merci korntex5 ;) )

Tous à vos codes !

Pour rappel :

La fin du défi à été fixée au 15 septembre 2006 23h59
par l'équipe Défi Delphi.

Je vous rappel que seul les binaires peuvent être déposé dans ce fil de discussion.

Les codes sources sont à envoyer à l'adresse defi indiquée dans les règles du défi.

Bon courage pour cette dernière journée !

waskol 15/09/2006 00h11

OUI !!!! ET QUE LE MEILLEUR GAGNE !!!
:lahola: :lahola: :lahola:

J'espère que l'originalité du défi vous aura plue et que vous aurez appris tout plein de choses.

Je vous proposerais un article très détaillé dès que possible sur la réalisation pas-à-pas de la solution que je vous proposerais :P
Vous verrez, ce n'était pas si compliqué...;)
Vous verrez même qu'il était possible de faire quelque chose d'acceptable sans même connaître la "distance de Levenstein" :mrgreen:

Je remarque que des petits malins sont allés très loin dans leur logiciel, on ne vous en demandait pas tant !

Bref, encore une fois, tout le monde a ses chances de gagner.

En tout cas, bravo à tous les participants !

Jeannot Alpin 15/09/2006 18h23

1 pièce(s) jointe(s)
Citation:

waskol a écrit :
J'espère que l'originalité du défi vous aura plue et que vous aurez appris tout plein de choses.

Oh oui moi ca m'a fait délirer ce défi et j'ai appris plein plein de trucs !!

Voila mon dernier exécutable ! (je voulais faire plus de modif mais j'ai pas eu le temps avec tout c'est cours :? ) je fournit le dico que j'ai fait avec mon écriture mais vous pouvez créer le votre !:D

tiki06 15/09/2006 21h26

1 pièce(s) jointe(s)
Ca aura été juste, mais voila enfin ma participation. Si j'avais eu plus de temps à consacrer au Défi j'aurais ajouté des fonctionalités en plus, mais boulôt oblige j'ai pas plancher plus dessus. Mais c'est pas grave l'essentiel c'est de participer, et en plus j'ai appris pleins de super trucs avec ce défi.
Bref c'était génial.... :ccool:

Voila donc mon executable.

Jeannot Alpin 15/09/2006 22h07

pffiou chapeau !!8O j'adore la présentation le seul hic cest que tu peux pas dessiner des minuscule (sans passer par le deuxieme écran)

waskol 15/09/2006 23h26

Plus qu'une 1/2 heure et des brouettes :P

TicTacToe 16/09/2006 00h09

whaou! :)

Super le Look, bravo !
Avec fichier d'aide et tout et tout...

Avec un moyen très élégant de séparer la bib majuscules et la bib minuscules ;)
mais l'efficacité est là!

et Bravo a ceux qui sont allés jusqu'au bout et au delà, c'est toujours un plaisir d'arriver au bout d'un objectif (bon ok, on arrive jamais au bout, on a toujours un truc a rajouter ... :) )

korntex5 16/09/2006 00h23

ce défi ma beaucoup plus je l'ai trouvé très orriginal merci de vous être cassé la tête pour le dénicher vraiment
:bravo:

Pedro 16/09/2006 00h26

Comme vous avez pu le constater,
le défi est maintenant clos
depuis presque 30 minutes aie
Les résultats seront publiés bientôt :D

Merci à tous pour votre participation. :bravo:
Nous vous attendons tous pour le prochain défi qui s'annonce plutôt intéressant ;)

tiki06 16/09/2006 09h59

Merci à ceux qui ont aimé mon appli. :merci: Mais je trouve qu'il y en a beaucoup qui ont fait des super trucs. :D Je pense que la tache du jury ne vas pas être facile. En tout cas j'ai l'impression que tout le monde c'est régalé dans ce défi. Et moi c'est mon cas. Ca promet un bel avenir au prochains défi. Je languis déjà de les découvrir.

Je vais peut être même en proposer un, j'ai quelques idées par ci par là....;)


Citation:

le seul hic cest que tu peux pas dessiner des minuscule (sans passer par le deuxieme écran)

Oui c'est fait pour simplifier le code. Comme ça je n'ai qu'a gérer une seule librairie de caractères. Et l'utilisateur lui n'a pas à selectionner (Un bouton ou autre) d'abord quelque part si il veut être en MAJ ou MIN, il lui suffit juste de déssiner a gauche ou à droite en fonction de ce qu'il veut.

Citation:

(bon ok, on arrive jamais au bout, on a toujours un truc a rajouter ... )

Oui là c'est clair, si je m'étais écouté, j'aurais passé encore plus de temps (Mais le temps me manquait...) pour rajouter ci et ça. J'avais je ne sais pas combien d'idées par jour de choses que je pouvais rajouter.:D

Claudius40 16/09/2006 13h23

Félicitations Tiki06 :applo: très bel interface !

Je ne rajouterais qu'un mot:
Citation:

tiki06 a écrit :
En tout cas j'ai l'impression que tout le monde c'est régalé dans ce défi.

Farpaitement :P
Et vivement le prochain défi.

@+ Claudius.

anapurna 17/09/2006 10h48

salut

bravo a tous les participants, mon projet n'ayant pas abouti pour diverses raison j'espere lire tres vite vos source

@+ phil

Laurent Dardenne 17/09/2006 16h49

Citation:

tiki06 a écrit :
Ca promet un bel avenir au prochains défi. Je languis déjà de les découvrir.

On va s'efforcer de proposer qq chose d'un peu plus accessible pour les développeurs moins aguerri comme cela avait été demandé derniérement.

korntex5 17/09/2006 20h00

ou autre solution vous pouvez faire de poules de catégorie débutant ou confirmé, sinon ptet qu cela motivera moins de monde :roll:

anapurna 18/09/2006 14h22

le but d'un defi c'est qu'il soit relevé, le niveau de la personne n'a pas une inportance en soit

avec les indices laissés par les defieurs, il etait facile de trouver des infos sur le net.

apres que l'on fasse des cathegorie par classement pourquoi pas mais il faut que la trame du defi soit le meme pour tous et qui sais paut etre qu'un debutant aura une approche differente des gens d'experience et que celle ci peut etre plus adapter au defi

@+ Phil

Claudius40 18/09/2006 14h48

Salut,

Entièrement d'accord avec Anapurna.
Créer des poules ne me semble pas forcément une bonne idée. Que l'on soit débutant ou pas, c'est en se frottant à plus fort que soi que l'on progresse.

Et puis comme dit Anapurna, on peut être débutant et avoir de bonnes idées.

Salut et @+ sur le prochain défi.

Lung 18/09/2006 16h14

Citation:

Laurent Dardenne a écrit :
On va s'efforcer de proposer qq chose d'un peu plus accessible pour les développeurs moins aguerri comme cela avait été demandé derniérement.

Je n'ai pas eu le temps de participer aux deux défis, mais il me semble que le démineur était moins compliqué que la reconnaisance de caractères ...

Linkin 18/09/2006 16h20

Je n'ai pas eu (pris) le temps de me mettre sérieusement (je n'ai que des embrons pour les deux défis), mais pour le démineur, il y avait peu de pistes pour chercher, tandis que la reconnaissance de caractères (tracés ou non) est un sujet assez bien documenté sur le net.

TicTacToe 18/09/2006 16h32

Citation:

Lung a écrit :
Je n'ai pas eu le temps de participer aux deux défis, mais il me semble que le démineur était moins compliqué que la reconnaisance de caractères ...


Hum...:?
Pour avoir fait les 2, (il faudra également demander à Fabrice et à Waskol qui ont également planché sur les 2 défis),

J'ai trouvé qu'il n'y avait aucune comparaison.
Pour moi (et cela n'engage que moi), le démineur était d'une complexité bien plus grande avec des niveaux d'analyses beaucoup plus variés, avec également une problématique de temps processeur.

La reconnaissance était beaucoup plus accessible et plus élémentaire (mais je n'ai pas dis facile dans l'absolu).
De surcroit, il y a a eu des indices (mais même sans les indices...).

Enfin, ce n'est que mon humble avis, mais j'ai comme le pressentiment qu'il sera partagé par Fabrice et Waskol ?!

tiki06 18/09/2006 17h21

En ce qui me concerne je ne sais pas pour le démineur car je n'ai pas put y participer. Par contre comme le précise TicTacToe pour la reconnaissance de caractères il y a eu beaucoup d'indices dans les différents Post de la discussion. Je pense même que l'on peut dire que Waskol nous a grandement aidée :merci: . Et en tout cas, du moins en ce qui me concerne, je pense que Waskol nous a permis de voir qu'un problème qui pouvait sembler complexe au départ ne l'était pas tant que ça. C'est sur qu'en lisant juste la description du défi on pouvait se dire que c'était super dur et complexe, mais après en lisant plus les différentes explications on se rendait compte que cela pouvait être ramené à des choses simples et élementaires. Et après tout c'est la base de notre métier, rendre des choses qui peuvent parraitre complexe le plus simple possible. ;)

Lung 18/09/2006 17h31

Citation:

tiki06 a écrit :
il y a eu beaucoup d'indices dans les différents Post de la discussion. Je pense même que l'on peut dire que Waskol nous a grandement aidée

Lesquels ?
J'ai dû rater des pages ...

TicTacToe 18/09/2006 17h43

Citation:

Tiki06 a écrit :
Et en tout cas, du moins en ce qui me concerne, je pense que Waskol nous a permis de voir qu'un problème qui pouvait sembler complexe au départ ne l'était pas tant que ça


+1
Exactement ca. Le démineur peut sembler simple, au 1er abord alors que...

Et Invsersement pour la reconnaissance de car. (quoi que nous ne sommes pas allés aussi loin que les logiciels pro. ou là... je pense que c'est une autre paire de manche :D )

Citation:

Lung a écrit :
Lesquels ?
J'ai dû rater des pages ...

Je crois oui, assied toi, sers toi un verre, (une aspirine éventuellement) et lis le post quelques page ago :mouarf:

tiki06 18/09/2006 17h53

Et bien là :

http://delphi.developpez.com/defi/ecriture/topic/#p18

Ou il nous apprend qu'il faut déterminer les mouvements qu'il faut pour avoir les caractères.

Là aussi :

http://delphi.developpez.com/defi/ecriture/topic/#p22

Ou l'on comprend qu'il faut transformer le dessin en droite.
Là :

http://delphi.developpez.com/defi/ecriture/topic/#p26

Ou l'on sait qu'il y a un dictionnaire.
Puis là :


http://delphi.developpez.com/defi/ecriture/topic/#p27

Ou il nous dit que pour lui le dessin se fait en une fois et dès qu'on lache le bouton la reconnaissance se fait.
Et là encore :

http://delphi.developpez.com/defi/ecriture/topic/#p31

ou il nous dit que les fonctions à utiliser sont ArcTan,PenPos et LineTo.
Puis encore là :

http://delphi.developpez.com/defi/ecriture/topic/#p37

Ou il explique même comment modifier la position du crayon sur un canvas.
Et là :

http://delphi.developpez.com/defi/ecriture/topic/#p121

Oui il nous explique le fonctionement de la Distance de Levensthein (Que je ne connaissais pas du tout avant qu'il en parle :D ). Puis là

http://delphi.developpez.com/defi/ecriture/topic/#p125

et Encore là :

http://delphi.developpez.com/defi/ecriture/topic/#p127

Ou il explique encore plus le principe du calcul de la distance de Levensthein.
Ce qui fait pas mal d'indice et d'explications.
De plus Lung je crois que dans une présentation des différents projets sur lesquels on travaillait tu avais parlé d'un outil ImageViewer sur lequel tu bossais avec des filtres sur les images, donc tu dois connaitre au moins un peu quelques fonctions d'utilisation des Canvas, donc je reste persuadé que si tu avais eu le temps tu aurais très bien put réussir ce défi, et même peut être aurais tu fait mieux que tout le monde. Je suis sûr qu'au prochain défi tu vas nous épater... ;)

Lung 18/09/2006 17h58

J'ai raté des pages pendant mes vacances ... aie
Néanmoins, ça me parait bien compliqué ... :koi:

Bravo, à ceux qui ont réussi à faire quelque chose.

tiki06 18/09/2006 18h01

Citation:

TicTacToe a écrit :
quoi que nous ne sommes pas allés aussi loin que les logiciels pro. ou là... je pense que c'est une autre paire de manche :D


Ha bon ???, mince moi qui avait déja contacté un éditeur pour vendre le mien.... :mouarf: :mouarf: :mouarf:

Laurent Dardenne 18/09/2006 20h47

Citation:

Claudius40 a écrit :
Créer des poules ne me semble pas forcément une bonne idée.

Je le pense aussi.
Citation:

Claudius40 a écrit :
Que l'on soit débutant ou pas, c'est en se frottant à plus fort que soi que l'on progresse.

Oui mais devant l'écran on est seul. Et dans notre contexte c'est seulement la lecture des différents code source qui permet d'en tirer un enseignement. Enfin vue de ma fenêtre.
Citation:

Claudius40 a écrit :
Et puis comme dit Anapurna, on peut être débutant et avoir de bonnes idées.

Oui tout à fait mais la mise en oeuvre c'est une autre paire de manches.
Comme dirait La Palisse "pour tirer vers le haut il faut partir d'en bas" (pas trop non plus :mouarf: )

Enfin vous verrez bien dans qq jours ...

waskol 18/09/2006 21h26

2 pièce(s) jointe(s)
Citation:

tiki06 a écrit :
Et bien là :
...
Là aussi :
...
Là :
...
Puis là :
...
Et là encore :
...
Puis encore là :
...
Et là :
....
Puis là :
...
et Encore là :

http://www.developpez.net/forums/sho...&postcount=127


:mouarf3:
Ce qui est vrai, c'est que j'ai joué au Petit Poucet :lol:

Par contre, ce qui est vrai aussi, c'est que dans sa version de base, il n'y a aucune distance de Levensthein : 1 ArcTan coté math, 1 LineTo et 1 PenPos coté graphique.
Le dictionnaire, se limité à un bête tableau de "directions suivies pas la souris pour chaque lettre à reconnaitre).
Et je puis vous assurer, que sous cette forme, c'est déjà plus performant que le plugin de reconnaissance gestuelle pour Firefox :mrgreen: aie
Bref pas de maths, juste un algorithme maison qui compare une succession de directions (direction, au sens 8 directions Nord/NE/Est/SE/Sud/SO/Ouest/NO, pas au sens mathemathique/vecteur "stricto sensu") suivies par la souris..

Quand vous allez voir le code source.... :mouarf:

Bon d'accord, la reconnaissance est beaucoup plus limitée qu'avec la distance de Levenshtein que j'ai introduit lors du déf et que j'utilise dans ma version experti, mais franchement, avouez que cette dernière était VRAIMENT simple à mettre en oeuvre... peut être même plus que mon algorithme maison aie
A tel point, qu'on peu se passer du Arctan en faisant comme ça...

Dans cette version que, il y a un dictionnaire et une base de données d'exemples de tracés. Dedans, au lieu d'utiliser mes 8 "directions" ("sens" si vous préférez), chaque lettre est enregistrée dans une Liste de points.

En tout cas vos logiciels explosent tous (tousse très fort aie) de très loin mes modestes réalisations en terme de fonctionnalité... c'est dire :roll:

Edit : mes sources
Deux versions donc...
1) La version qui à conduit au défi :

Au départ, tout est parti d'un post :
Citation:

declencher a écrit :
Bonjour,

Si j'ai bien compris le problème, la précision de l'utilisatoin d'un écran tactile est inutile, tu souhaites faire un dessin sur un canva, et ensuite l'interpréter ?

Inspire toi déjà de ce qui est fait avec les alphabets des PDA, et un OCR efficace n'est pas simple à faire (de nombreux travaux d'étude et de recherche portent sur le sujet).


Et ce que j'ai répondu :
Citation:

Waskol a écrit :
Hé bien non, la reconnaissance de gestes (parce que c'est bien de ça dont on parle) est nettement moins compliqué que la reconnaissance d'écriture, et ce n'est pas du tout la même chose !

Pour Ceidre :
D'une part , un écran tactile se comporte, pour la partie tactile, comme une souris... avec un seul bouton, le curseur étant déplacé par le doigt.
D'autre part voici une démonstration que j'ai mis au point à l'occasion et que vous pourrez utiliser dans votre projet :
- à vous de complêter pour tout l'alphabet dans unit2 (vous comprendrez en lisant le source et en voyant le tableau Gestes)
- la reconnaissance de Geste est contenue entièrement dans une classe TSourisTexte que j'ai mis dans unit2, et il n'y a vraiment pas grand chose...
- l'utilisation de TSourisTexte se fait via les interaction de la souris avec une TPaintbox (évènements OnMouseDown, OnMouseUp, OnMouseMouve)
- le TEdit vous affiche le texte que "vous êtes en train de taper"
- le TMemo ne sert à rien

Pour écrire, il faut maintenir le bouton gauche (ou droit) de la souris enfoncé, puis tracer ce qui ressemble le plus a votre lettre en un seul geste :
Pour faire un :
A --> faire un V à l'envers
a --> faire un 'a' façon écriture manuscrite !
B --> faire un B (commencer en bas à gauche de la lettre, remonter, puis faire les deux anses.
le programme reconnait aussi le B si on fait un mouvement bas, ouis haut pour revenir au tracé des anses.
b--> faire un 'b' façon lettre manuscrite (en attaché, avec la p'tite boucle...)
C -->faire un C (en démarrant en haut à droite, en commençant bien vers la direction haut-gauche puis en finissant haut-droit
D--> un peu comme le B
E --> droite-bas-gauche
F --> droite-bas


Il n'y a pas d'intelligence artificielle là-dedans, le propgramme interprète les directions (8 en tout) dans lesquelles la souris se déplace et stocke ceci sous forme d'une succession de chiffres (chacun représentant une direction) placée dans une string appelée FGeste.

La propriété Delta de ma classe TSourisTexte est un seuil qui correspond à la distance minimale entre deux points où la souris a pu se trouver et qui sont pris en compte pour calculer la direction prise par celle-ci (quand on écrit avec une souris, on ne fait pas de belles lignes droites )

Le seul "truc coton" ça été d'implémenter la méthode Reconnaitre et la méthode ReduireGeste :
Cette dernière effectue une comparaison entre le geste de l'utilisateur, et le geste correspondant à une lettre particulière. Chaque direction du geste utilisateur est testé pour voir si il est à peu près identique à la direction attendue, si tel est le cas, le geste attendu correspondant est stocké dans une nouvelle string (Reduction) puis renvoyée dans la méthode "Reconnaitre" dans la variable GesteReduit.
La probabilité (dans "reconnaitre") pour qu'une lettre soit effectivement correcte correspondra aux nombres de chiffes dans GesteReduit divisé par le nombre de chiffres attendus.


Giovanny Temgoua est tombé sur le poste ou je livrais tout, code source, etc... vers minuit-1heure du matin et à pensé que ce serait une bonne idée de défi.
Du coup on a déplacé tout mon post vers la zone privé du forum le soir même pour que personne ne puisse s'en inspirer aie
Hé oui ! cette fois ci, les sources ont été à votre disposition pendant quelques minutes !!! :lol:

2) La version "Expert"i :
Vous allez pouvoir réviser Vos TList, TObJectList, TStream pour la partie gestion des Dictionnaires aie


Enfin, en attendant un petit article, je vous laisse décortiquer tout ça, hein ?... :mrgreen:

Amusez vous bien ;)

Fabrice ROUXEL 1 20/09/2006 13h34

Une erreur s'est glissée au cours de l'épuration du code.
Je repostes sur el forum les sources de la version corrigée.


@+

waskol 24/09/2006 01h37

Citation:

Fabrice ROUXEL 1 a écrit :
Une erreur s'est glissée au cours de l'épuration du code.
Je repostes sur el forum les sources de la version corrigée.


@+


Renvoies nous la bonne version par mail aussi, s'il te plait .aie

waskol 24/09/2006 01h43

Hé, les gars, d'après les règles du défi :
Citation:

...l'utilisation de composantes ou bibliothèques autres que celles fournies en standard par Borland sont interdites...

Ca vaut aussi pour l'unité Math qui n'existe pas dans Delphi Standard :mrgreen: aie

Vous êtes tous disqualifiés.

Pour info, ArcTan, je me le suis fait à la main ;)

Code:

function ArcTan2(const Y, X: Extended): Extended;
asm
  FLD Y
  FLD X
  FPATAN
  FWAIT
end;


Mais comme je suis bon joueur et que je ne peux pas prétendre à un classement... vous êtes tous réhabilités...

Fabrice ROUXEL 1 25/09/2006 10h22

1 pièce(s) jointe(s)
Bonjour.

J'ai posté la version corrigée sur le mail du défi.
Je poste les sources ici également.

Pour Waskol:
Pour ce défi je suis parti d'un copier-coller du code posté sur le forum.
J'ai conservé les commentaires dans le code source.

ps:
Désolé mais je n'ai aucune fulgurance pour proposer le prochain défi.:?

Jeannot Alpin 25/09/2006 19h01

Citation:

waskol a écrit :
Hé, les gars, d'après les règles du défi :


Ca vaut aussi pour l'unité Math qui n'existe pas dans Delphi Standard :mrgreen: aie

Vous êtes tous disqualifiés.

Pour info, ArcTan, je me le suis fait à la main ;)

Code:

function ArcTan2(const Y, X: Extended): Extended;
asm
  FLD Y
  FLD X
  FPATAN
  FWAIT
end;


Mais comme je suis bon joueur et que je ne peux pas prétendre à un classement... vous êtes tous réhabilités...


ouf !8O
Que tu es généreux waskol !! :lol:
Je pensais qu'on avait le droit d'utiliser cette unité (je ne l'ai pas télécharger a part ! (enfin j'en ai pas le souvenir !))

Pedro 25/09/2006 22h12

Pour information, l'unité Math est disponible avec Turbo Delphi édition Explorer, donc gratuite, donc accessible à tout le monde ;)
Donc finalement, cet "écart" aux règles qui n'en est pas vraiment un est toléré :D

korntex5 26/09/2006 10h02

pfiouff moi qui l'utilise juste pour power je crois, j'avais pas pensé à ça


LES DEFIS DELPHI

LES DEFIS DELPHI DEFI ECRIVEZ A LA SOURIS LA SOLUTION DU DEFIEUR LA SOLUTION DU VAINQUEUR LA SOLUTION DES CHALLENGEURS

Valid XHTML 1.1!Valid CSS!

Copyright © 2017 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Responsables bénévoles de la rubrique Delphi : Gilles Vasseur - Alcatîz -