IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Java Discussion :

problème pour mettre en français Sphinx 4 API


Sujet :

API standards et tierces Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2017
    Messages : 24
    Points : 12
    Points
    12
    Par défaut problème pour mettre en français Sphinx 4 API
    Bonjour j'ai un problème pour passer sphinx4 en français, il ne trouve pas le ./french/mean
    et lorsque je cherche les fichiers nécessaires sur le sourceforge je ne les trouve pas, quelqu'un connaîtrais comment faire avec les fichiers disponibles sur le sourceforge ou aurais un lien vers les fichiers manquants ?

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Es-tu sur que le Français soit déjà disponible dans Sphinx 4 ? Car quand je vais sur leur site web, je trouve un sondage qui demande quel langage ajouter dans la prochaine version et en tête de cette liste on trouve... le Français... (et c'est actuellement le Russe qui mène au niveau des votes : Russe 20%, Allemand 17%, Autre 15%, Français 14% sur un total de 11.3k votes))

    Nom : sphinx.jpg
Affichages : 3800
Taille : 202,2 Ko

    EDIT 1 - Le planning indique que les bases du support du Français ont du être posées fin Aout (de quelle année ?) lors de la tache #7. Ce même planning n'a pas l'air d'avoir été mis a jour récemment car il indiquait être sur la tache #4.

    EDIT 2 - Apparemment les modèles pour les autres langage, dont le Français, peuvent être téléchargés séparément.

    EDIT 3 - l'archive cmusphinx-fr-ptm-8khz-5.2.tar.gz contient un fichier means et le README indique

    This directory contains generic French acoustic model trained with latest sphinxtrain.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2017
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    Je vais check tout ça quand j'aurais plus la migraine pck là j'ai une grippe terrible, merci d'avoir pris le temps pour moi je viendrais vous dire si cela a marché

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2017
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    Bon même avec ça je n'arrive pas à le passer en français rien ne correspond avec la vidéo que j'ai vue quelqu’un pourrais me faire un tuto qui marche ?

  5. #5
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Il semble manquer des fichiers, le dictionnaire par exemple. Si je compare les fichier par défaut pour en-us et qui sont utilisés pour l’initialisation dans le didacticiel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    configuration.setAcousticModelPath("resource:/edu/cmu/sphinx/models/en-us/en-us"); // Répertoire fichiers acoustiques.
    configuration.setDictionaryPath("resource:/edu/cmu/sphinx/models/en-us/cmudict-en-us.dict"); // Fichier dictionnaire.
    configuration.setLanguageModelPath("resource:/edu/cmu/sphinx/models/en-us/en-us.lm.bin"); // Fichier modèle.
    On retrouve ce répertoire et ces fichiers, dans ce même ordre, dans le JAR de sphynx-data :

    Nom : sphynx-1-1.jpg
Affichages : 3514
Taille : 35,5 Ko

    Par contre dans l'archive Française on a bien le répertoire contenant les mêmes fichiers acoustiques mais pas le dico (.dict) ni le fichier modèle (.lm.bin) :

    Nom : sphynx-1-2.jpg
Affichages : 3412
Taille : 10,4 Ko

    Il faut probablement suivre ce didacticiels pour les créer : http://cmusphinx.sourceforge.net/wiki/tutoriallm (par exemple la section Building a simple language model using web service EDIT - a non c'est pour l'anglais cette section)

    EDIT 2 - les deux fichiers manquants sont disponibles sur : https://sourceforge.net/projects/cmu...Models/French/

    EDIT 3 - J'ai pu charger le langage Francais de la manière suivante en plaçant un répertoire avec les fichiers dans la racine de mon projet (et donc j'ai utilise une uri avec file au lieu de resource qui désigne quelque chose dans un JAR) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    configuration.setAcousticModelPath("file:fr/cmusphinx-fr-ptm-8khz-5.2"); // Répertoire fichiers acoustiques.
    configuration.setDictionaryPath("file:fr/fr.dict"); // Fichier dictionnaire.
    configuration.setLanguageModelPath("file:fr/fr-small.lm.bin"); // Fichier modèle.
    Nom : sphynx-1-3.jpg
Affichages : 3436
Taille : 22,0 Ko

    Ce qui donne au lancement :

    Code Console : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    11:21:33.520 INFO dictionary           Loading dictionary from: file:fr/fr.dict
    11:21:33.591 INFO dictionary           Loading filler dictionary from: file:fr/cmusphinx-fr-ptm-8khz-5.2/noisedict
    11:21:33.592 INFO acousticModelLoader  Loading tied-state acoustic model from: file:fr/cmusphinx-fr-ptm-8khz-5.2
    11:21:33.592 INFO acousticModelLoader  Pool means Entries: 13824
    11:21:33.593 INFO acousticModelLoader  Pool variances Entries: 13824
    11:21:33.593 INFO acousticModelLoader  Pool transition_matrices Entries: 36
    11:21:33.593 INFO acousticModelLoader  Pool senones Entries: 2108
    11:21:33.593 INFO acousticModelLoader  Gaussian weights: mixture_weights. Entries: 6324
    11:21:33.593 INFO acousticModelLoader  Pool senones Entries: 2108
    11:21:33.593 INFO acousticModelLoader  Context Independent Unit Entries: 36
    11:21:33.593 INFO acousticModelLoader  HMM Manager: 97057 hmms
    11:21:33.593 INFO acousticModel        CompositeSenoneSequences: 0
    11:21:33.593 INFO trieNgramModel       Loading n-gram language model from: file:fr/fr-small.lm.bin
    11:21:36.884 INFO lexTreeLinguist      Max CI Units 37
    11:21:36.885 INFO lexTreeLinguist      Unit table size 50653
    11:21:36.886 INFO speedTracker         # ----------------------------- Timers----------------------------------------
    11:21:36.887 INFO speedTracker         # Name               Count   CurTime   MinTime   MaxTime   AvgTime   TotTime   
    11:21:36.887 INFO speedTracker         Load AM              1       1.0530s   1.0530s   1.0530s   1.0530s   1.0530s   
    11:21:36.887 INFO speedTracker         Load LM              1       2.5230s   2.5230s   2.5230s   2.5230s   2.5230s   
    11:21:36.887 INFO speedTracker         Load Dictionary      1       0.0730s   0.0730s   0.0730s   0.0730s   0.0730s   
    11:21:36.887 INFO speedTracker         Compile              1       0.7690s   0.7690s   0.7690s   0.7690s   0.7690s

    Par contre je trouve ca toujours aussi lent a s'initialiser et ça donne des résultats toujours aussi pauvres (lire cocasses) qu'avec l'anglais.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2017
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    Merci beaucoup enfin quelqu'un qui a pris du temps pour me répondre j'ai visiter je ne sais pas combien de forum tu es la seul personne m'ayant répondu je t'en remercie énormément !
    Bonne fin de journée

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2017
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    Parcontre tu ne touches pas au fichier config.xml comme on le vois dans un tuto youtube ?

    EDIT : Dans quoi tu as mis les uri pour set la config ?

    EDIT 2: bizarrement j'ai l'impression qu'on as pas du-tout la même installation de sphinx4 , tu as deux jar (sphinx4 core et sphinx4 data) alors que j'ai trois jar (sphinx4 ; jsapi ; js) J'ai suivis le vidéo suivante


    Peux tu me dire si je suis complètement à côté de la plaque ?

  8. #8
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Jamais touché de fichier XML de conf ou suivi un didacticiel YouTube quelconque. Je me suis contenté de suivre le didacticiel sur le site de Sphinx et seuls 2 JARs sont nécessaire pour faire tourner Shinx dans ce genre de config sont core et data. Ce projet a juste été créé pour pouvoir répondre à la question : Utiliser un Text To Speech.

    EDIT - j'ai l'impression que tu utilises le binding JavaScript de Shix, ce qui est somme toute un peu bizarre (mais faisable) si tu as un projet pure Java (vu que Phinx est en Java de toute manière donc pas vraiment besoin d'utiliser JS).
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2017
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    Je pense avoir réussi à l'installer mais j'ai un problème (et oui encore :p ).

    Donc comme le montre le code console suivant, tout semble bien s'initialiser mais lorsque je parle cela ne me retourne pas une phrase mais une suite de chiffre comme on le vois à la fin (les trois liveCMN) as tu le même rendu ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    10:11:34.680 INFO unitManager          CI Unit: aa
    10:11:34.681 INFO unitManager          CI Unit: ai
    10:11:34.681 INFO unitManager          CI Unit: an
    10:11:34.681 INFO unitManager          CI Unit: au
    10:11:34.681 INFO unitManager          CI Unit: bb
    10:11:34.682 INFO unitManager          CI Unit: ch
    10:11:34.682 INFO unitManager          CI Unit: dd
    10:11:34.682 INFO unitManager          CI Unit: ee
    10:11:34.682 INFO unitManager          CI Unit: ei
    10:11:34.682 INFO unitManager          CI Unit: eu
    10:11:34.682 INFO unitManager          CI Unit: ff
    10:11:34.683 INFO unitManager          CI Unit: gg
    10:11:34.683 INFO unitManager          CI Unit: gn
    10:11:34.683 INFO unitManager          CI Unit: ii
    10:11:34.683 INFO unitManager          CI Unit: in
    10:11:34.683 INFO unitManager          CI Unit: jj
    10:11:34.683 INFO unitManager          CI Unit: kk
    10:11:34.683 INFO unitManager          CI Unit: ll
    10:11:34.684 INFO unitManager          CI Unit: mm
    10:11:34.684 INFO unitManager          CI Unit: nn
    10:11:34.684 INFO unitManager          CI Unit: oe
    10:11:34.685 INFO unitManager          CI Unit: on
    10:11:34.685 INFO unitManager          CI Unit: oo
    10:11:34.685 INFO unitManager          CI Unit: ou
    10:11:34.686 INFO unitManager          CI Unit: pp
    10:11:34.686 INFO unitManager          CI Unit: rr
    10:11:34.687 INFO unitManager          CI Unit: ss
    10:11:34.687 INFO unitManager          CI Unit: tt
    10:11:34.687 INFO unitManager          CI Unit: un
    10:11:34.688 INFO unitManager          CI Unit: uu
    10:11:34.688 INFO unitManager          CI Unit: uy
    10:11:34.688 INFO unitManager          CI Unit: vv
    10:11:34.688 INFO unitManager          CI Unit: ww
    10:11:34.688 INFO unitManager          CI Unit: yy
    10:11:34.689 INFO unitManager          CI Unit: zz
    10:11:35.235 INFO autoCepstrum         Cepstrum component auto-configured as follows: autoCepstrum {MelFrequencyFilterBank, Denoise, DiscreteCosineTransform2, Lifter}
    10:11:35.521 INFO dictionary           Loading dictionary from: file:french/fr.dict
    10:11:35.586 INFO dictionary           Loading filler dictionary from: file:french/cmusphinx-fr-ptm-8khz-5.2/noisedict
    10:11:35.590 INFO acousticModelLoader  Loading tied-state acoustic model from: file:french/cmusphinx-fr-ptm-8khz-5.2
    10:11:35.590 INFO acousticModelLoader  Pool means Entries: 13824
    10:11:35.590 INFO acousticModelLoader  Pool variances Entries: 13824
    10:11:35.591 INFO acousticModelLoader  Pool transition_matrices Entries: 36
    10:11:35.591 INFO acousticModelLoader  Pool senones Entries: 2108
    10:11:35.591 INFO acousticModelLoader  Gaussian weights: mixture_weights. Entries: 6324
    10:11:35.591 INFO acousticModelLoader  Pool senones Entries: 2108
    10:11:35.591 INFO acousticModelLoader  Context Independent Unit Entries: 36
    10:11:35.592 INFO acousticModelLoader  HMM Manager: 97057 hmms
    10:11:35.592 INFO acousticModel        CompositeSenoneSequences: 0
    10:11:35.592 INFO trieNgramModel       Loading n-gram language model from: file:french/fr-small.lm.bin
    10:11:40.635 INFO lexTreeLinguist      Max CI Units 37
    10:11:40.635 INFO lexTreeLinguist      Unit table size 50653
    10:11:40.637 INFO speedTracker         # ----------------------------- Timers----------------------------------------
    10:11:40.638 INFO speedTracker         # Name               Count   CurTime   MinTime   MaxTime   AvgTime   TotTime   
    10:11:40.644 INFO speedTracker         Compile              1       1,9710s   1,9710s   1,9710s   1,9710s   1,9710s   
    10:11:40.645 INFO speedTracker         Load Dictionary      1       0,0690s   0,0690s   0,0690s   0,0690s   0,0690s   
    10:11:40.645 INFO speedTracker         Load LM              1       3,0720s   3,0720s   3,0720s   3,0720s   3,0720s   
    10:11:40.645 INFO speedTracker         Load AM              1       1,1200s   1,1200s   1,1200s   1,1200s   1,1200s   
    10:11:51.734 INFO liveCMN              54.88 -6.18 -3.53 0.14 0.53 -0.16 0.07 0.72 -0.85 1.10 1.78 1.14 1.34 
    10:11:56.515 INFO liveCMN              54.82 -6.14 -3.72 0.07 0.53 -0.17 0.05 0.78 -0.86 1.18 1.69 1.00 1.33 
    10:12:02.197 INFO liveCMN              55.94 -5.88 -3.53 0.16 0.36 -0.70 0.10 -0.05 -0.90 0.78 1.05 0.85 0.85
    EDIT : J'ai réussi à récupérer le texte c'est bon ! Par-contre c'est vrai que c'est pas folichon tu connaîtrai une meilleur api de reconnaissance vocale ?

  10. #10
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Non, j'avais créé ce test juste pour répondre à la personne qui avait posé la question. Pour le reste va falloir continuer à fouiller sur le net et / ou les rares forums qui en parlent et / ou leur liste de diffusion, si il y en a une.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2017
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    D'accord en tout cas merci pour ton aide le sujet est résolu !

    Ps: Si quelqu'un souhaite faire de la reconnaissance vocale je vous conseilles le C# plutôt que du java !

  12. #12
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2017
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Tuto rapide pour l'installation de Sphinx4 en Français ?
    Bonjour Oliver Queen et Bouye,
    Je me permets de vous relancer sur ce sujet car je vois qu'il est très frais, et donc j'entrevois enfin la possibilité d'obtenir enfin quelque chose !
    J'ai moi aussi suivi le tuto Youtube mais également impossible à mettre en oeuvre car beaucoup de fichiers mentionnés ne sont plus accessibles.

    La reconnaissance vocale me trotte méchamment dans la tête, et il faut absolument que j'ai une base qui marche ! Combien de fichiers ai-je téléchargés et combien de tutos ai-je suivis pour finalement aucun résultat ???

    Un de vous deux (ou les deux ?) pourrait-il publier un tuto des fichiers téléchargés et des manips nécessaires pour en arriver là où vous êtes ? En suivant ce fil de discussion, on est encore plus perdus qu'avant... Plus on est nombreux sur ces problématiques, plus on pourra affiner les réponses !

    Je vous remercie énormément d'avance !

    PS : j'étais aussi sur une autre piste pour la reconnaissance vocale en Français avec Java, celle d'employer l'API de Google...
    J.A.R.V.I.S : https://github.com/lkuza2/java-speech-api
    https://stackoverflow.com/questions/...-speech-api-v2
    Arrivé quasiment au bout, mais quand je lance : " could not write audio file: file type not supported: FLAC" et donc "ERROR: Google cannot be contacted
    java.io.FileNotFoundException: testfile2.flac (Le fichier spécifié est introuvable)"

    Utiliser les compétences de Google, ça c'est prometteur...

  13. #13
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Concernant Sphinx, ça va être assez simple (je pars de mon projet JavaFX donc faudra adapter pour Swing si besoin) :
    • Créer un nouveau projet JavaFX Maven dans NetBeans.
    • Rajouter dans pom.xml
      Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
          <dependencies>
              <dependency>
                  <groupId>de.sciss</groupId>
                  <artifactId>sphinx4-core</artifactId>
                  <version>1.0.0</version>
              </dependency>        
              <dependency>
                  <groupId>de.sciss</groupId>
                  <artifactId>sphinx4-data</artifactId>
                  <version>1.0.0</version>
              </dependency>
          </dependencies>
    • Compiler le projet avec les dépendances pour les télécharger.
    • Télécharger les fichiers suivants sur https://sourceforge.net/projects/cmu...Models/French/ :
      1. cmusphinx-fr-ptm-8khz-5.2.tar.gz
      2. fr-small.lm.bin
      3. fr.dict
    • Créer un répertoire fr a la racine du projet et mettre / dézipper les archives pour qu'on ait la structure suivante :
      Nom : sphynx-1-3.jpg
Affichages : 3391
Taille : 22,0 Ko
    • Utiliser ce code pour l'application :

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      54
      55
      56
      57
      58
      59
      60
      61
      62
      63
      64
      65
      66
      67
      68
      69
      70
      71
      72
      73
      74
      75
      76
      77
      78
      79
      80
      81
      82
      83
      84
      85
      86
      87
      88
      89
      90
      91
      92
      93
      94
      95
      96
      97
      98
      99
      100
      101
      102
      103
      104
      105
      106
      107
      108
      109
      110
      111
      112
      113
      114
      115
      116
      117
      118
      119
      120
      121
      122
      123
      124
      125
      126
      127
      128
      129
      130
      131
      132
      133
      134
      package test.spinxfx;
       
      import edu.cmu.sphinx.api.Configuration;
      import edu.cmu.sphinx.api.LiveSpeechRecognizer;
      import edu.cmu.sphinx.api.SpeechResult;
      import edu.cmu.sphinx.linguist.dictionary.Word;
      import edu.cmu.sphinx.result.WordResult;
      import java.util.stream.Collectors;
      import javafx.application.Application;
      import javafx.concurrent.Service;
      import javafx.concurrent.Task;
      import javafx.geometry.Insets;
      import javafx.scene.Scene;
      import javafx.scene.control.Button;
      import javafx.scene.control.TextArea;
      import javafx.scene.layout.HBox;
      import javafx.scene.layout.Priority;
      import javafx.scene.layout.VBox;
      import javafx.stage.Stage;
       
      public class Main extends Application {
       
          private Configuration configuration;
          private LiveSpeechRecognizer recognizer;
       
          @Override
          public void init() throws Exception {
              configuration = new Configuration();
              // configuration.setAcousticModelPath("resource:/edu/cmu/sphinx/models/en-us/en-us"); // Répertoire fichiers acoustiques.
              // configuration.setDictionaryPath("resource:/edu/cmu/sphinx/models/en-us/cmudict-en-us.dict"); // Fichier dictionnaire.
              // configuration.setLanguageModelPath("resource:/edu/cmu/sphinx/models/en-us/en-us.lm.bin"); // Fichier modèle.
              configuration.setAcousticModelPath("file:fr/cmusphinx-fr-ptm-8khz-5.2"); // Répertoire fichiers acoustiques.
              configuration.setDictionaryPath("file:fr/fr.dict"); // Fichier dictionnaire.
              configuration.setLanguageModelPath("file:fr/fr-small.lm.bin"); // Fichier modèle.
              recognizer = new LiveSpeechRecognizer(configuration);
          }
       
          private TextArea textToSayArea;
          private Button speechButton;
          private Button captureButton;
          private TextArea textCapturedArea;
       
          @Override
          public void start(Stage stage) throws Exception {
              textToSayArea = new TextArea();
              textToSayArea.setPromptText("Text to synthesize");
              VBox.setVgrow(textToSayArea, Priority.ALWAYS);
              //
              textCapturedArea = new TextArea();
              textCapturedArea.setEditable(false);
              textCapturedArea.setPromptText("Text captured");
              VBox.setVgrow(textCapturedArea, Priority.ALWAYS);
              //
              speechButton = new Button("Say");
              speechButton.setOnAction(actionEvent -> synthesizeText());
              captureButton = new Button("Capture");
              captureButton.setOnAction(actionEvent -> captureSpeech());
              final HBox buttonBox = new HBox();
              buttonBox.setSpacing(6);
              buttonBox.getChildren().setAll(speechButton, captureButton);
              VBox.setVgrow(buttonBox, Priority.NEVER);
              //
              final VBox root = new VBox();
              root.setSpacing(6);
              root.setPadding(new Insets(6));
              root.setFillWidth(true);
              root.getChildren().setAll(textToSayArea, buttonBox, textCapturedArea);
              final Scene scene = new Scene(root);
              stage.setTitle("JavaFX and Sphinx");
              stage.setScene(scene);
              stage.show();
          }
       
          private void synthesizeText() {
              String textToSay = textToSayArea.getText();
              textToSay = (textToSay == null) ? "" : textToSay.trim(); // NOI18N.
              if (textToSay.isEmpty()) {
                  // @todo Do stuff!
              }
          }
       
          private Service<SpeechResult> captureService;
       
          private void captureSpeech() {
              captureButton.setDisable(true);
              textCapturedArea.setText(null);
              if (captureService == null) {
                  captureService = new Service<SpeechResult>() {
                      @Override
                      protected Task<SpeechResult> createTask() {
                          return new SpeechCaptureTask();
                      }
                  };
                  captureService.setOnSucceeded(workerStateEvent -> {
                      final SpeechResult result = (SpeechResult) workerStateEvent.getSource().getValue();
                      dealWithSpeechResult(result);
                  });
                  captureService.setOnCancelled(workerStateEvent -> {
                      captureButton.setDisable(false);
                  });
                  captureService.setOnFailed(workerStateEvent -> {
                      captureButton.setDisable(false);
                  });
              }
              captureService.restart();
          }
       
          private final class SpeechCaptureTask extends Task<SpeechResult> {
       
              @Override
              protected SpeechResult call() throws Exception {
                  recognizer.startRecognition(true);
                  final SpeechResult result = recognizer.getResult();
                  recognizer.stopRecognition();
                  return result;
              }
          }
       
          private void dealWithSpeechResult(final SpeechResult result) {
              System.out.println("==== Got a result! ==="); // NOI18N.
              System.out.println(result.getHypothesis());
              final String sentence = result.getWords()
                      .stream()
                      .map(WordResult::getWord)
                      .map(Word::toString)
                      .collect(Collectors.joining(" ", "", "")); // NOI18N.
              textCapturedArea.setText(sentence);
              captureButton.setDisable(false);
          }
       
          public static void main(String[] args) {
              launch(args);
          }
      }


    C'est lent a s'initialiser et la reconnaissance est toute pourrie mais ça fonctionne.

    Concernant l'API Google, il me faut faire des tests vu que je ne l'ai jamais essayée. Par contre du coup il faut être en ligne j'imagine et il est possible que cela ne fonctionner pas pour moi compte tenu de notre config réseau "spéciale"
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  14. #14
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Hum, pour ce que j'en vois, l'API Google Speech API est destinée aux dev de Chromium. Y a pas moyen d'utiliser la Google Cloud Speech API a la place ?

    Sinon j'ai codé ce test mais comme il faut une clé d'API et que je ne suis pas dev Chromium, je n'ai pas pu aller plus loin (ni tester si ca fonctionne du coup).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    package test.jarvis;
     
    import com.darkprograms.speech.microphone.Microphone;
    import com.darkprograms.speech.recognizer.GoogleResponse;
    import com.darkprograms.speech.recognizer.Recognizer;
    import java.nio.file.Files;
    import java.nio.file.Path;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import javafx.application.Application;
    import static javafx.application.Application.launch;
    import javafx.concurrent.Service;
    import javafx.concurrent.Task;
    import javafx.geometry.Insets;
    import javafx.scene.Scene;
    import javafx.scene.control.Button;
    import javafx.scene.control.TextArea;
    import javafx.scene.layout.HBox;
    import javafx.scene.layout.Priority;
    import javafx.scene.layout.VBox;
    import javafx.stage.Stage;
    import javax.sound.sampled.AudioFileFormat;
    import javax.sound.sampled.AudioSystem;
    import net.sourceforge.javaflacencoder.FLACFileWriter;
     
    public class Main extends Application {
     
        @Override
        public void init() throws Exception {
            // Detection des formats audio supportes.
            final AudioFileFormat.Type[] typeArray = AudioSystem.getAudioFileTypes();
            for (AudioFileFormat.Type type : typeArray) {
                System.out.println("type: " + type.toString());
            }
        }
     
        private TextArea textToSayArea;
        private Button speechButton;
        private Button captureButton;
        private TextArea textCapturedArea;
     
        @Override
        public void start(Stage stage) throws Exception {
            textToSayArea = new TextArea();
            textToSayArea.setPromptText("Text to synthesize");
            VBox.setVgrow(textToSayArea, Priority.ALWAYS);
            //
            textCapturedArea = new TextArea();
            textCapturedArea.setEditable(false);
            textCapturedArea.setPromptText("Text captured");
            VBox.setVgrow(textCapturedArea, Priority.ALWAYS);
            //
            speechButton = new Button("Say");
            speechButton.setOnAction(actionEvent -> synthesizeText());
            captureButton = new Button("Capture");
            captureButton.setOnAction(actionEvent -> captureSpeech());
            final HBox buttonBox = new HBox();
            buttonBox.setSpacing(6);
            buttonBox.getChildren().setAll(speechButton, captureButton);
            VBox.setVgrow(buttonBox, Priority.NEVER);
            //
            final VBox root = new VBox();
            root.setSpacing(6);
            root.setPadding(new Insets(6));
            root.setFillWidth(true);
            root.getChildren().setAll(textToSayArea, buttonBox, textCapturedArea);
            final Scene scene = new Scene(root);
            stage.setTitle("JavaFX and J.A.R.V.I.S.");
            stage.setScene(scene);
            stage.show();
        }
     
        private void synthesizeText() {
            String textToSay = textToSayArea.getText();
            textToSay = (textToSay == null) ? "" : textToSay.trim(); // NOI18N.
            if (textToSay.isEmpty()) {
                // @todo Do stuff!
            }
        }
     
        private Service<GoogleResponse> captureService;
     
        private void captureSpeech() {
            captureButton.setDisable(true);
            textCapturedArea.setText(null);
            if (captureService == null) {
                captureService = new Service<GoogleResponse>() {
                    @Override
                    protected Task<GoogleResponse> createTask() {
                        return new SpeechCaptureTask();
                    }
                };
                captureService.setOnSucceeded(workerStateEvent -> {
                    // Recuperation du resultat.
                    final GoogleResponse response = (GoogleResponse) workerStateEvent.getSource().getValue();
                    System.out.println("Google Response: " + response.getResponse());
                    System.out.println("Google is " + Double.parseDouble(response.getConfidence()) * 100 + "% confident in" + " the reply");
                    System.out.println("Other Possible responses are: ");
                    for (String s : response.getOtherPossibleResponses()) {
                        System.out.println("\t" + s);
                    }
                    // @todo put result on screen.
                });
                captureService.setOnCancelled(workerStateEvent -> {
                    captureButton.setDisable(false);
                });
                captureService.setOnFailed(workerStateEvent -> {
                    final Throwable exception = workerStateEvent.getSource().getException();
                    Logger.getLogger(this.getClass().getName()).log(Level.SEVERE, exception.getMessage(), exception);
                    captureButton.setDisable(false);
                });
            }
            captureService.restart();
        }
     
        private Recognizer recognizer;
     
        private final class SpeechCaptureTask extends Task<GoogleResponse> {
     
            @Override
            protected GoogleResponse call() throws Exception {
                // Initialise le microphone.
                try (final Microphone mic = new Microphone(FLACFileWriter.FLAC)) {
                    // Capture 5s.
                    final Path soundFile = Files.createTempFile("mic_capture", ".flac");
                    mic.captureAudioToFile(soundFile.toFile());
                    Thread.sleep(5000);
                    // Initialise la reconnaissance (si besoin).
                    if (recognizer == null) {
                        recognizer = new Recognizer(Recognizer.Languages.FRENCH, System.getProperty("google-api-key"));
                    }
                    // Requete web chez Google.
                    int maxNumOfResponses = 4;
                    System.out.println("Sample rate is: " + (int) mic.getAudioFormat().getSampleRate());
                    final GoogleResponse response = recognizer.getRecognizedDataForFlac(soundFile.toFile(), maxNumOfResponses, (int) mic.getAudioFormat().getSampleRate());
                    return response;
                }
            }
        }
     
        public static void main(String[] args) {
            launch(args);
        }
    }
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  15. #15
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2017
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Merci, je vais essayer tout ça...
    Merci Bouye pour toutes ces infos...
    Je me suis lancé il y a quelques mois dans la prog JAVA, donc je suis novice, et encore plus dans le JavaFX, dont je ne connais strictement rien. C'est l'occasion d'apprendre !
    J'ai une clé d'API car j'ai suivi le tuto https://stackoverflow.com/questions/...-speech-api-v2

    Avec du temps, je vais essayer les deux solutions.
    Merci en tout cas !!!

  16. #16
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2017
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Sphinx 4 - Je ne comprends toujours pas...
    Bonjour,

    Je sais que je débute, mais je ne veux pas lâcher le morceau...
    J'ai bien téléchargé les 3 fichiers, je les ai bien importés dans Eclipse, au bon endroit, j'ai la classe de test, mais quand tu dis qu'il suffit simplement de deux .jar : le core et le data : dans l'archive "sphinx4-5prealpha-src.zip" j'ai bien deux dossiers à ces deux noms mais point de .jar... Pire pour "sphinx4-1.0beta6-bin.zip" et "sphinx4-1.0beta6-src.zip" où il n'y a jamais aucun de ces deux noms...
    Et il vient d'où ce pom.xml ??

    Bref, je suis bien paumé...

    Merci d'avance !

  17. #17
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Bon je ne suis pas un hyper fana de Maven pour bien des raisons (entre autre le fait que les sécurités de notre réseau d'entreprise rendent la chose pénible à utiliser), mais il se trouve que dans ce cas bien précis ça marche plutot bien.

    -> What is Maven?
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème pour mettre de la couleur !
    Par Fredo123456 dans le forum C
    Réponses: 5
    Dernier message: 31/12/2007, 15h14
  2. [DW MX] Problème pour mettre en ligne le site
    Par monadali dans le forum Dreamweaver
    Réponses: 9
    Dernier message: 07/11/2007, 08h40
  3. Réponses: 1
    Dernier message: 16/05/2007, 20h31
  4. Problème pour mettre un TChart sur QReport pour l'impression
    Par ghan77 dans le forum Composants VCL
    Réponses: 14
    Dernier message: 25/01/2006, 13h28
  5. Probléme pour mettre un renommer dynamiquement les colonnes
    Par bragon dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 02/09/2005, 10h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo