Les Défis DELPHI - Ecrivez à la souris !
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 :
- Reconnaître les mouvements de la souris
- Interpréter ces mouvements
- reconnaître les lettres de l'alphabet (Majuscules, minuscules)
- reconnaître des symboles simples
- Reporter l'interprétation des mouvements dans un Memo.
- Interpréter des mouvements particuliers pilotant votre application.
- 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 ! |
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 !". |
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.
Je vous souhaite donc bonne chance à tou(te)s. Que la fête commence !!! |
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
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 !!!
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
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
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 ) |
Citation:
anapurna a écrit :
salut
vi beaucoup plus clair
je vais piraté mon palm
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 ! |
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
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 |
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 |
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 ? )
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 |
Citation:
anapurna a écrit :
salut
je sais pas mais moi je serait bien passer par une
fonction graphique du genre
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
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 ! |
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 ) |
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 |
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 ? |
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
Sauf pour les intersections...
Sinon, pour savoir quand la personne a fini son caractere, à toi de trouver ! |
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...
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
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 |
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 |
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 ) 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
Un peu (beaucoup) de recherches me feront le plus grand bien |
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 |
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
Un peu (beaucoup) de recherches me feront le plus grand bien
|
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
|
Et moi je suis marié et j'ai trois enfants, c'est dire !
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é |
je suis parfaitement capable de ne pas relever ce défi...
en fait je suis surtout incapable de faire un tel programme , mais je suis vraiment curieux de voir la solution .
bravo les experts |
TicTacToe |
02/08/2006 12h24 |
C'est vrai que c'est un défi très interessant !
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 |
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 ! |
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 |
Citation:
chtiot a écrit :
en fait je suis surtout incapable de faire un tel programme
|
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. |
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
|
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...
|
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...
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? |
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?
|
Bien sur ! |
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?
|
Hahahaaa, je sens que tu es bien parti |
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
@+ Phil |
TicTacToe |
03/08/2006 17h46 |
Damned, j'ai pas commencé
mais j'ai des idées
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
@+ 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. |
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' ?
(enfin, je dis 'nous' pour les autres pour le moment, je cause je cause et j'ai pas encore cliquer sur 'nouveau projet' ) |
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' ?
(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
Plus sérieusement, j'ai hâte de lire vos solutions
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
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
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 ? |
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 ??? |
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 |
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 |
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
|
|
Citation:
TicTacToe a écrit :
, heu.. il frappe Waskol ?
|
Citation:
tiki06 a écrit :
PS : Ca ressemble à quoi un Waskol en colère ???
|
A ça :
|
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.
parceque c'est bizzare... j'ai également un arctan dans mon code !
alors là anapurna, il y a pleing de petits cailloux blancs partout |
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.
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
Promis, Juré, craché par terre (flute, ma chaussure ! ), 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... |
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...
|
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 |
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" |
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 |
Citation:
waskol a écrit :
Avec le mien, il vaut mieux s'appliquer quan on dessine "écrit"
|
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 ? |
Citation:
tiki06 a écrit :
juste les lettres du mot qu'on dessine les unes après les autres ?
|
Ca sera déjà pas mal...
Et pour les accents, on s'en moque...
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 |
Citation:
waskol a écrit :
Ca sera déjà pas mal...
Et pour les accents, on s'en moque...
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. |
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.
|
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...
Puis j'ai tout dechiré...
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? |
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... |
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 |
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
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
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 ! |
Je suis comblé par ce chaleureux acceuil.
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 |
Citation:
acness a écrit :
Je suis comblé par ce chaleureux acceuil.
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
|
En voilà un qui a compris
Félicitations !
(Par contre, l'EA n'a rien reçu, peux-tu vérifier si ton mail est bien parti STP ? ) |
Hello
Je viens de réenvoyer le mail, j'avais laissé l'accent sur défi dans l'adresse ...
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. |
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 ... |
J'ai reçu 2 emails l'un à 09H51 et le suivant à 10H16
Contenus identiques
Reçu le troisième à 11H21 |
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 |
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é
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 ! |
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 ... |
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
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 |
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 |
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
|
+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...
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...
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
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
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) |
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
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... |
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. Grrrrrrr |
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 |
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
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 ! |
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...
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.. |
Citation:
NoisetteProd a écrit :
Vous êtes tous entrain de coder ??
|
Effectivement ça fait moins animé que le dernier défis
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
En tout cas, bon courage à tous |
C'est parce qu'on est tous en train de coder comme des fous !
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 ), on attend vos oeuvres, vos commentaires.
Allez, bientôt je vous met en ligne ma version. |
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
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 |
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 |
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
|
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 |
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 ), 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...
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. |
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...
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
Et dire que je voulait éviter les maths...
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 ? )
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 (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 :
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 ) :
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
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...
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...
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 ! (c'est du vécu )
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...
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 !
Pour les "Pros" qui ont déjà envoyé leur code : vous ne nous en voulez pas hein ? |
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 |
Jeannot Alpin |
20/08/2006 10h21 |
Ah bah ca c'est gentil !!! |
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
vous pouvez aussi essayer une approche graphique |
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
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 :
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é... |
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
Peut-être suis-je un peu bête mais bon ...
Merci |
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
Peut-être suis-je un peu bête 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...
C'est clair, il y a un IntToStr à rajouter là...
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...
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
|
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 ! |
En tout cas, Claudius40 à compris, à décidé de se lancer, et nous à envoyé son code hier
On peut l'applaudir... |
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
Mais je compte bien envoyer une solution |
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 !...
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... |
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 |
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...
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 ).... 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é... |
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 ! |
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 ? |
Difficile à dire, je viens tout juste de commencer... |
NoisetteProd |
24/08/2006 20h32 |
Citation:
rezuss a écrit :
Difficile à dire, je viens tout juste de commencer...
|
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 (si c'est pas trop long sinon j'essayerai de faire plus vite) |
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 ...
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. |
TicTacToe |
26/08/2006 03h47 |
1 pièce(s) jointe(s)
de retour de vacances
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
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 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
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.
@+
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 |
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 ! |
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...
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 |
Ouai trop content je viens enfin de comprendre comment marchait La Distance de Levenshtein !
Il reste plus qu'a le programmer !! |
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
@+ Phil
|
On a tous hâte de voir vos programmes
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 ! )
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
Bonne Soirée
EDIT:
Ah ba c'est rectifié lol |
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 ! )
|
Euh... J'ai eu des problèmes Houston
Au démarrage:
Ensuite, je dessine des lignes sur l'écran tactile et d'un coup,
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 ! |
Citation:
Jeannot Alpin a écrit :
Autant pour moi j'ai oublié de mettre le dico ! voila c'est rectifier !
|
Ah c'est beaucoup mieux
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 ! |
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
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 !
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 ! ) |
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 ! |
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. |
Citation:
Fabrice ROUXEL 1 a écrit :
Bonjour.
Voici une modeste version qui implémente la distance de Waskolstein.
|
Beau boulot il marche pas mal du tout
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
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.
@+ |
Ce défi est vraiment très intéressent.
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 |
Bon courage à tous pour la dernière ligne droite |
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é !
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 ), je suis complêtement perturbé |
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 ! |
OUI !!!! ET QUE LE MEILLEUR GAGNE !!!
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
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"
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 ! |
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....
Voila donc mon executable. |
Jeannot Alpin |
15/09/2006 22h07 |
pffiou chapeau !! j'adore la présentation le seul hic cest que tu peux pas dessiner des minuscule (sans passer par le deuxieme écran) |
Plus qu'une 1/2 heure et des brouettes |
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: |
Comme vous avez pu le constater,
le défi est maintenant clos
depuis presque 30 minutes
Les résultats seront publiés bientôt
Merci à tous pour votre participation. :bravo:
Nous vous attendons tous pour le prochain défi qui s'annonce plutôt intéressant |
Merci à ceux qui ont aimé mon appli. :merci: Mais je trouve qu'il y en a beaucoup qui ont fait des super trucs. 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. |
Claudius40 |
16/09/2006 13h23 |
Félicitations Tiki06 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
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 |
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. |
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 ... |
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 ?! |
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. |
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 )
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 |
J'ai raté des pages pendant mes vacances ...
Néanmoins, ça me parait bien compliqué ...
Bravo, à ceux qui ont réussi à faire quelque chose. |
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
|
Ha bon ???, mince moi qui avait déja contacté un éditeur pour vendre le mien.... |
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 )
Enfin vous verrez bien dans qq jours ... |
2 pièce(s) jointe(s)
Ce qui est vrai, c'est que j'ai joué au Petit Poucet
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
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....
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
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 ) de très loin mes modestes réalisations en terme de fonctionnalité... c'est dire
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
Hé oui ! cette fois ci, les sources ont été à votre disposition pendant quelques minutes !!!
2) La version "Expert"i :
Vous allez pouvoir réviser Vos TList, TObJectList, TStream pour la partie gestion des Dictionnaires
Enfin, en attendant un petit article, je vous laisse décortiquer tout ça, hein ?...
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.
@+ |
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 . |
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
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
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 !
Que tu es généreux waskol !!
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 !)) |
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é |
korntex5 |
26/09/2006 10h02 |
pfiouff moi qui l'utilise juste pour power je crois, j'avais pas pensé à ça |
|