#1 Le 07/12/2013, à 10:48
- Rodney
Création d'un logiciel libre de reconnaissance de sinogrammes
Bonjour à tous,
Étant étudiant en japonais, j'ai longtemps cherché un équivalent pour Ubuntu du IME Pad proposé dans Windows. N'ayant rien trouvé, je me suis tourné vers des solutions en ligne, qui se révèlent bien moins efficaces. Pour ceux qui ne connaissent pas, l'IME Pad dispose d'une zone de tracé dans laquelle vous écrivez et propose des résultats de sinogrammes au fur et à mesure de votre tracé.
J'aimerais donc avoir vos conseils pour créer cet équivalent. Je suis en train d'apprendre le C, pensais vous que ce langage est adapté? Je suppose aussi que j'aurai besoin d'une base de donnée pour les caractères et leur profil.
Si vous avez des suggestions, des conseils ou bien si un équivalent existe, faites m'en part.
Merci
Ubuntu 18.04 64 bits
Hors ligne
#2 Le 07/12/2013, à 13:42
- moths-art
Re : Création d'un logiciel libre de reconnaissance de sinogrammes
Bonjour Rodney,
Je découvre IME Pad donc je peux difficilement te donner des conseils de softs équivalents.
Du peu que j'en vois : ça à l'air modeste et fonctionnel.
Le C est tout à fait adapté à ce genre de projet.
La vrai question est de savoir si tes connaissances en C suffiront.
Perso, j'utiliserais un langage de script (python en l'occurence) car ça prend bien 3 à 4 fois moins de temps pour arriver au même résultat.
J'emploierais le C uniquement dans 2 cas de figure (y'en a peu être plus) :
optimisation : pour ça, faut déjà avoir un prog fonctionnel mais qui présente des lenteur d'exécution ou une empreinte mémoire trop importante.
Ca métonnerais dans le cas de ton projet mais pour les déceller, il faut faire des benchs et identifier ce qui pose problème.
Si il n'y a aucune solution assez efficasse en python, on crée une lib C dans ce cas précis.Possibilité de bindings : le cas typique étant la possibilité d'étendre ton soft avec des plugins et dans un langage autre que celui du soft.
Ex: des programmeurs Ruby et Perl veulent créer des greffons pour ton soft.
Il faut du coup créer une API C pour rendre ça possible.
Autre points :
tu vas devoir utiliser un toolkit graphique : GTK ou QT.
J'ai une préférence pour QT mais GTK devrait suffire pour ton projet.
Du devras utiliser un canvas pour le tracé *interactif* de tes sinogrammes.
Au niveau de la reconnaissance, il y a 2 écoles :
* reconnaissance statique (principe des OCR) : on compare des images matriciels
* reconnaissance dynamique (principe de la Nintendo DS) : reconnaissance de vecteurs
Je te conseillerais de partir sur la 2ème.
Cependant, ça demande plus de taf au niveau base de donnée car il faut enregistrer les vecteurs (ou déplacements).PB : * ça oblige à écrire le sinogramme dans un ordre précis. (Je ne connais pas assez le japonnais pour ça mais j'imagine que c'est pareil que d'autres langues : tu ne commences pas à écrire un "R" par la boucle.
* Tu pourras dificilement récupérer en l'état une base de donnée : il faudra soit créer de rien (et éventuellement s'inspirer de) soit réupérer et modifier.(souvent plus délicat)base de donnée :
Pour ton soft, une base type SQL me semble too much : pas de jointures et autre trucs complexes et pas d'écriture (pour l'utilisateur)
La base la plus adapté me semble Redis : simple, rapide et efficace.
D'ailleurs : il existe combien de sinogrammes en japonnais?i18n : pense à rendre ton soft traduisible.
Et puis, ça peut te permettre d'ajouter des traductions des sinogrammes dans la langue natal : pour un débutant, ça peut être intéressant.
Site : https://mothsart.github.io Dépôts Git : https://github.com/mothsart PPAs : https://launchpad.net/~jerem-ferry
Hors ligne
#3 Le 07/12/2013, à 18:12
- Rodney
Re : Création d'un logiciel libre de reconnaissance de sinogrammes
Merci de ta réponse moths-art
Perso, j'utiliserais un langage de script (python en l'occurence) car ça prend bien 3 à 4 fois moins de temps pour arriver au même résultat.
Si tu penses que Python fait l'affaire ça m'arrange je trouve ce langage plus intuitif que C.
J'ai une préférence pour QT mais GTK devrait suffire pour ton projet.
Après pour Qt ou GTK, je n'ai pas d'à priori. Je vois que de plus en plus de softs utilisent Qt, est-il supérieur techniquement?
Du devras utiliser un canvas pour le tracé *interactif* de tes sinogrammes.
Au niveau de la reconnaissance, il y a 2 écoles :
* reconnaissance statique (principe des OCR) : on compare des images matriciels
* reconnaissance dynamique (principe de la Nintendo DS) : reconnaissance de vecteurs
Je te conseillerais de partir sur la 2ème.
Cependant, ça demande plus de taf au niveau base de donnée car il faut enregistrer les vecteurs (ou déplacements).
Je ne sais pas encore faire de canvas mais je vais potasser ça
Après le tracé de sinogrammes à une logique assez vectorielle et ne se trace pas dans n'importe quel sens, je pense donc que la reconnaissance statique est inadaptée.
Pour ton soft, une base type SQL me semble too much : pas de jointures et autre trucs complexes et pas d'écriture (pour l'utilisateur)
La base la plus adapté me semble Redis : simple, rapide et efficace.
Je ne connais pas Redis, je vais me documenter
D'ailleurs : il existe combien de sinogrammes en japonnais?
Il y en a 1945 usuels. Les autres servent pour le japonais ancien ou certains noms de familles et portent le chiffre à 19 000.
En tout cas un grand merci pour ton aide
Ubuntu 18.04 64 bits
Hors ligne
#4 Le 09/12/2013, à 13:30
- moths-art
Re : Création d'un logiciel libre de reconnaissance de sinogrammes
Je ventais surtout les langages de script sur le compilé en rapidité de dev (même si des outsiders tel que go réduise l'écart)... mais si tu connais python, c'est parfait!
Je te conseil de partir sur python 3 si tu peux : ça t'éviteras des suprises (bugs fourbes) niveau encodage.
Dans le cas contraire (python >= 2.6 < 3) : tu peux mettre ceci en entête de tes fichiers :
#coding=utf-8
from __future__ import unicode_literals
Le gros point fort de python c'est son mode interactif (ipython ou dans une moindre mesure bpython sont excellent) : tu peux tester/débugger/comprendre une partie de code rapidement.
Pour les différences GTK/QT... je ne veux pas partir sur débat stéril.
J'ai testé les 2 à des moments différents, avec des compétences différentes et pour des projets distincts.
C'est donc délicat d'être objectif.
Je dirais que la diff majeur est que GTK est un toolkit graphique alors que QT est un framework avec un sdk.
QT est soutenu par une entreprise, Nokia alors que GTK est principalement dev par des bénévoles. Même si ces derniers ne sont pas n'importe qui (bossent chez Red Hat pour la plupart), ils ne remplaceront pas des gens à temps complet.
La preuve est qu'il y a 2x plus de contributeurs pour QT que GTK cette année et 3x plus de commits... ça donne un ordre d'idée.
Mais on pourrait défendre que QT est une grosse machine à gaz monolithique alors que GTK suit plus l'esprit de Unix (fait 1 chose et bien) et utilise des libs tierce (qui s'interface bien mais demande souvent un peu plus d'investissement : philosophie différentes, fragmentation de la doc etc.) pour des besoins plus complexes.
https://www.wikivs.com/wiki/GTK_vs_Qt
Pour ton projet, GTK me semble suffisant mais :
tu trouveras sans doute plus de contributeurs sous QT
le jour ou tu décideras de créer un soft plus complexe ou d'étendre les possibilité de ton clone d'IME Pad (utilisation de libs multimédia, OpenGL, création d'applis mobile), tu connaîtra QT et la courbe d'apprentissage te semblera moins rude si tu as déjà fait tes armes avec.
Si tu pars donc sur QT (wrapper de l'API QT strict donc fonctionnement à la C++), tu auras le choix entre pyQT et pySide (wrapper de l'API QT mais désireux d'adapter cette dernière au fonctionnement de Python).
PySide était un projet outsider au départ mais sa popularité, clarté et facilité on poussé Nokia a soutenir officiellement sa doc et son évolution : son utilisation est vivement conseillé car plus intuitif.
Enfin, n'hésites pas si tu as des questions précises au sujet Redis.
Site : https://mothsart.github.io Dépôts Git : https://github.com/mothsart PPAs : https://launchpad.net/~jerem-ferry
Hors ligne