Voir la version complète : [NDS] Moteur de reconnaissance de tracé
Moteur de reconnaissance de tracé
BETA
Version beta (http://francois.pessaux.neuf.fr/files/Test_glyphe.zip)
Présentation :
B'soir,
Allez, je viens de mettre en ligne le début d'un petit truc totalement inutile mais plutôt sympa :D
Une reconnaissance de tracé sur l'écran de la DS.
Si vous tracez des lettres comme montré dans l'image "alphabet"
Autres informations :
Sources :
http://francois.pessaux.neuf.fr/files/test_glyphe_raw_04_02_2006.zip
Implémentation d'un papier de Oleg Dopertchouck. On peut trouver l'article à :
http://www.gamedev.net/reference/art...rticle2039.asp
:-' -- Didou
J'ai testé et cela marche vraiment du tonnerre :w00t:
A mon avis ca aiderait pas mal si tu publiais aussi les sources non ? (/me curieux)
ça marche vraiment bien ;)
mais je fais certaines lettres diféremment, alors elles ne passent pas :unsure:
genre le f ^^
sinon, tout bien :)
Re,
A mon avis ca aiderait pas mal si tu publiais aussi les sources non ? (/me curieux)
Bien sûr. Pour le moment c'est un peu brut. Mais je vais le faire. Il y a une moulinette en OCaml pour générer les données de modèle, suivie d'une moulinette en C... :w00t:
Par contre, j'ai oublié de dire que c'est une implémentation un peu limé d'un papier de Oleg Dopertchouck. On peut trouver l'article à:
http://www.gamedev.net/reference/articles/article2039.asp
-- Didou
Voilà encore un homebrew terrible ! Et quand tu aura ouvert les sources ca pourra surement servir à plein de developpeurs DS ! :)
Wahouuuuu tu fais les lettres comme moi ! Exactement la même ecriture :D
Sinon tu fais du Ocaml pour faire un programme sur DS ? :blink: ... non non je n'ai jamais dit que j'aimais pas le caml :whst: .
ps: tu serais pas passé par grenoble que tu utilises du Ocaml ?
ah, faudra que je regarde ca :p j'avais fait un truc similaire (moins poussé) juste pour tester il y a longtemps mais j'ai perdu mes sources, faudrait que je recommence pour inclure à PAlib :/
Sinon tu fais du Ocaml pour faire un programme sur DS ? :blink: ... non non je n'ai jamais dit que j'aimais pas le caml :whst: .
Ben voui, ça m'arrive caïmant tout le temps de prototyper en OCaml l'algo central avant de le coder dans cet evil-language C ^^ ^^
ps: tu serais pas passé par grenoble que tu utilises du Ocaml ?
Grenoble ? Non. Versailles (Rocquencourt + exactement), oui :D
-- Didou
Lol au temps pour moi :D
En tout cas ca marche bien ce petit prog de reconnaissance !
A quand une utilisation dans un pti jeu ?
didou, question plus technique... Qu'en est-il de l'utilisation CPU ?
Areuh,
didou, question plus technique... Qu'en est-il de l'utilisation CPU ?
Ben je ne vois pas trop ce que tu veux dire...
En fait, l'acquisition des données peut "safement" être faite assez lentement. Ceci signifie qu'on peut entrelacer l'acquisition des données avec du traitement effectif. Plus précisément, j'insère un swiWaitForVBlank entre chaque acquisition afin d'éviter de récupérer des samples trop longs.
Ca marcherait sans, mais rien ne sert de sampler avec 10 fois trop de précision pour ensuite normaliser avec 10 fois moins de précision.
Et puis, il faut bien se dire que l'acquisition d'un signe ne doit pas durer très longtemps... On ne trace pas un signe pendant des heures !
Bon, quoi qu'il en soit, si je ne t'ai pas répondu (ce qui est probable :D ), on peut causer en MP.
-- Didou
bah t'as un peu contourner la question en fait, lol. L'acquisition je suis d'accord que c'est rien (logique), mais le traitement, une fois que tu relève le stylet, il est rapide ? Du genre si j'ai un jeu qui pousse déjà la DS pas mal, je sais que l'acquisition se fera sans soucis, mais au moment de l'interprétation du tracet, ca va pas saccader ? et d'ailleurs, plus tu as de signes plus ca rame ? Donc si tu mets un alphabet complet (minuscules+majuscules) ainsi que les 10 chiffres, ca va bien passer en moins d'un VBL ou c'est pas la peine de rêver ?
Salut,
une fois que tu relève le stylet, il est rapide ?
Oui car les strokes sont normalisés assez petits, donc il n'y a pas trop de tests à faire.
et d'ailleurs, plus tu as de signes plus ca rame ?
Logique :))
Donc si tu mets un alphabet complet (minuscules+majuscules) ainsi que les 10 chiffres...
Dans ce cas-là, il y a toujours une solution: encoder les patterns avec un arbre binaire de recherche par exemple. Tu réduis la complexité en Log. Ou alors faire un DAG dans lequel tu peux faire progresser la recherche incrémentalement en élaguant les branches non pertinentes au plus tôt.
-- Didou
Dans ce cas-là, il y a toujours une solution: encoder les patterns avec un arbre binaire de recherche par exemple. Tu réduis la complexité en Log. Ou alors faire un DAG dans lequel tu peux faire progresser la recherche incrémentalement en élaguant les branches non pertinentes au plus tôt. Euh... moi pas tout saisir, lol
dans lequel tu peux faire progresser la recherche incrémentalement en élaguant les branches non pertinentes au plus tôt Ca je vois, ca parait logique et efficace, meme si ca demande de changer un petit chouillat l'algo de base (pas méchant)
Dans ce cas-là, il y a toujours une solution: encoder les patterns avec un arbre binaire de recherche par exemple. Tu réduis la complexité en Log. En gros tu fais un premier comparatif très grossier, puis le comparatif fin uniquement sur ceux qui correspondent ? ou alors j'ai rien compris ? :/
Bon, je viens de faire des petits tests vite fait (en moins de 2h) sur la reco... Je pense que c'est pas autant au point que celle de Didou, mais ce n'est qu'un début... Je n'ai intégré que alpha, beta, gamma, a, b, et c, et ca se plante tout le temps entre a et c, lol... pour le reste ca s'en sort pas trop mal
J'ai tenté de corrigé les données erronées en fin de parcours, ca marche pas trop mal...
Ce que vous verrez :
- Ca affiche la position de tous les points pendant que ca trace, faut pas faire attention
- Quand on relache, ca prend 16 points sur le tracé, plus ou moins bien espacés, mais normalement à peu pret à égale distance en nombre de points tracés, et ca les affiche en rouge sur le tracé...
- Ca calcul ensuite l'angle entre les points, en soustrayant l'angle au niveau du point d'avant (sauf pour le premier point, bien sur). Avantage ? En théorie ca doit reconnaitre quel que soit le sens dans lequel on dessine ! Pour cela il suffit de ne pas effectuer de comparaison sur le premier angle (il sert de repère). Dans cet exemple j'ai laissé la comparaison avec le premier histoire de pouvoir différencier alpha et gamma... (sinon ca prend toujours gamma pour alpha...)
- Ca affiche ensuite 2 choses. En premier la lettre que ca pense reconnaitre (alpha, beta, gamma, a, b, ou c), comme j'ai dit ca plante beaucoup entre a et c. Puis, en-dessous, ca affiche un mystérieux code à 17 chiffres/lettres... C'est en fait le code représentatif du tracé. Et ouais, c'est tout con comme ca :) Suffit de copier/coller le code pour pouvoir l'utiliser. C'est comme ca que j'ai obtenu les codes pour mes lettres... Donc c'est facile d'en rajouter d'autres, et c'est facile à programmer...
Sinon, pour être discriminatoire, ca compare les différences d'angles en chaques points entre le tracé dessiné et les 'tracés' en mémoire, en mettant pour chacun la différence au carré... Parce que si on a une différence d'1, ca fera juste 1 de différence, alors que 4 donnera direct 16, ce qui tend à éliminer le tracé plus facilement...
Voilà en gros pour la méthode, le code sera inclus dans PAlib à terme... Sinon, dans l'idéal je compte inclure ca dans l'arm7, histoire de prendre 0 temps CPU de l'arm9, mais avec les émulateurs actuels ca risque d'être difficile... Yopyop, au boulot !! ;)
Voilà, qu'en pensez-vous (désolé, c'est pas aussi bien que celui de Didou :/)
www.palib.info/test/Reco.zip
code tout moche : http://www.rafb.net/paste/results/YyVZH156.html
Bobby Sixkilla
03/02/2006, 18h17
Didou et Mollusk, vous déchirez tout!!! :wub: La DS va pouvoir rivaliser avec les Palm! :D En plus, pour les jeux, ça peut être vraiment sympa. ^^
http://www.rafb.net/paste/results/YyVZH156.html pour voir le code en fait :)
Très bon système, ça ouvre la voie à plein de nouveautés ! :w00t:
Petite question que je me pose : pourquoi ne pas utiliser des conventions d'écritures manuscrites déjà éprouvées, comme le Graffiti de Palm OS?
(voir ici (http://www.pdacool.com/article.php3?id_article=48))
cyberfred91
03/02/2006, 23h31
sinon essayez de regarder au niveau de la reconnaissance sur palm :p
Le logiciel graffiti ^^
http://www.palm.com/us/images/products/graffiti_1.gif
voila, si ca peut donner des idees...
Humm humm... De quoi parlais-je à l'instant? =_=:whst:
cyberfred91
03/02/2006, 23h49
Desole, en plus ton post etait mieux.
Le temps que j'ai mis achercher lol... Desole
C'est prévu, c'est prévu... Sinon j'ai réfléchi dans le métro et je pense avoir un petit bug à la con qui major l'écart dans certains cas, faisant détecter la mauvaise lettre... la suite demain :p
S'lut,
Mollusk, de toute façon, je vais mettre les sources onlines, comme ça tu verras le truc. Je ne l'ai pas encore fait car c'est du brut :)) Y'a aucune doc, a peine 1 commentaire.. Bref... Il me faudrait un poil de temps pour nettoyer.
Par contre, s'il y a urgence, je balance l'archive telle qu'elle et 'faudra pas venir me dire que c'est crad :) :) :)
-- Didou
Hé bien messieurs vous vous étés vraiment déchiré sur ce coup la.
Encore un grand bravo à nos développeurs.
yopyop
edit moi je péte mon câble si c’est pas un code aux petits oignons.:devil:
Didou, je serais curieux de voir... Sinon j'ai ouvert un topic pour moi histoire de pas pourrir le tiens :
http://www.playeradvance.org/forum/showthread.php?p=19190
Au final j'ai changé un peu, retiré la possibilité de reconnaissance en rotation, bidouillé un peu des valeurs, et là ca marche plutot bien, j'ai mis avec un similé-Graffiti pour tester :p
Salut YopYop,
Pour ta gouverne, j'ai testé tout le développement du moteur sous ... DeSmuMe :)
-- Didou
Salut Mollusk,
Bon, 'faut qu'on aille faire les courses ;) , mais je vais mettre le bouzin online à mon retour dans l'état qu'il est. :berk:
A pluche'
-- Didou
Ben moi je corrige les sprites grâce a fushido :wub: (un peu difficile quand même mais bon je suis nul :ph34r: ) et maintenant grâce à des démos de Mollusk et Fab.
Merci à vous grâce à vos jeux j’ai fait des grandes avancées.
Yopyop
Lol, Yopyop il a pas tout compris... Merci à toi plutot, pour nous donner la possibilité de tester sur PC !
Bobby Sixkilla
04/02/2006, 15h43
Arrêtez de vous jeter des fleurs et remettez-vous au travail! :w00t:
ouais, ouais, ca va, je vais mettre à jour PAlib avec mon moteur alors...
Perso pour le moment je n’ai pas le mojo alors je fais une petite pause.
Mais en même temps je n'ai le mojo que de 16 à 19h d'habitude.
yopyop
Areuh,
Bon, ben sur l'insistance générale, voici les sources toutes chaudes sorties du micro-ondes ^^
C'est pas du brillant, poli et lustré :berk: , mais 'fallait pas insister :D
J'ai fouttu tout ça directement sur ma page:
http://francois.pessaux.neuf.fr/creations.html
-- Didou
Ben moi je corrige les sprites grâce a fushido :wub: (un peu difficile quand même mais bon je suis nul :ph34r: )
Nul ????? Ben au point de faire un émulateur qui fonctionne !!! Allons bon :)
Merci à vous grâce à vos jeux j’ai fait des grandes avancées.
Merci à toi qui nous permets de les tester, donc de les développer !
-- Didou
J'aurai bien voulu testé didou mais ton liens est mort :(
J'ai cliqué sur le lien juste au-dessus, et tout en bas de la page de didou t'es un lien qui marche ;)
B'soir,
J'aurai bien voulu testé didou mais ton liens est mort :(
Ben écoutes, apparemment, je l'ai testé et il marche...
-- Didou
vBulletin® v.3.7.2, Copyright ©2000-2008, Jelsoft Enterprises Ltd. Tous droits réservés - Version française vbulletin-fr.org