Sphinx4 en c++ voce

problème d'installation

Le problème exposé dans ce sujet a été résolu.

Bonjour,

J'essaie d'intégrer sphinx4 à un programme en c++ je suis tomber sur ce post j'ai donc essayé d'installer voce. Mais ça ce passe pas vraiment bien.

Mon système :

os : Ubuntu 32 bits

java : jdk 1.8.0_92

ide : codeblocks

Manip et erreur Rencontré :

J'ai d'abord eu erreur jni.h est introuvale, j'ai donc inclue ces directories :

/usr/lib/jvm/java-8-oracle/include/linux /usr/lib/jvm/java-8-oracle/include /usr/lib/jvm/java-8-oracle/lib /usr/lib/jvm/java-8-oracle/bin

J'ai également remplacer :

#include <string.h>

par :

#include <cstring.h>

J'ai actuellement l'erreur :

/home/daxbrin/Legacy/voce-0.9.1/src/c++/voce.h|173|référence indéfinie vers « JNI_CreateJavaVM »|

Que j'ai comblé en ajoutant : /usr/lib/jvm/java-8-oracle/jre/lib/i386/client/libjvm.so

Mais maintenant j'ai cette erreur :

libjvm.so: cannot open shared object file: No such file or directory

J'essaie de changer les variable global comme ceci :

$ export LD_LIBRARY_PATH=/usr/lib/jvm/java-8-oracle/jre/lib/i386:/usr/lib/jvm/java-8-oracle/jre/lib/i386/client

Mais sans succès.:'(

Peut-être quelqu'un aurait la réponse je ne suis pas le seul avoir ce problème mais j'ai déjà cherché et je ne trouve pas la solution pour mon système.

Merci d'avance ;)

+0 -0

Je suis sous code::Block donc j'ai fait settings >> compiler >> linker settings puis add et j'ai mis le lien vers libjvm.so Et Merci pour l’explication de string.h ce n'est pas moi qui est codé voce.h du coup j'essaie de pas trop modifier le fichier, si vous avez besoin de précision http://voce.sourceforge.net

+0 -0

Le jour où j'ai utilisé C::B et mis une lib, j'ai tellement rien compris que j'ai ajouté les options manuellement.

Dans quelque chose comme linker flags -> -L/usr/lib/jvm/java-8-oracle/jre/lib/i386/client -ljvm

Les LD_* impactent le lancement d'un exécutable, pas la compilation. Je me demande d'où vient cette croyance… ?

+0 -0

J'ai pas vraiment compris ?? J'ai regardé la dessus : http://forums.codeblocks.org/index.php?topic=11576.0 j'ai ajouté vos options de compilation mais aucun changement. Vous semblez dire que c::b est vraiment pas bien et vous êtes pas le seul. Pouvez vous m'en proposer un autre changer d'ide ne me dérange pas (je commence a sécher sur ce problème de jvm)

Voilà aussi mes var d’environnement :

JRE_HOME=/usr/lib/jvm/java-8-oracle/jre LD_LIBRARY_PATH=/usr/lib/jvm/java-8-oracle/jre/lib/i386:/usr/lib/jvm/java-8-oracle/jre/lib/i386/client JAVA_HOME=/usr/lib/jvm/java-8-oracle

Quand je le lance en console j'ai cette erreur :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
daxbrin@ubuntuDev:~/Legacy$ g++ -I"/usr/lib/jvm/java-8-oracle/include/linux" -I"/usr/lib/jvm/java-8-oracle/include" -L"/usr/lib/jvm/default-java/jre/lib/i386/client" -ljvm main.cpp
In file included from main.cpp:5:0:
/home/daxbrin/Legacy/voce-0.9.1/src/c++/voce.h: In function ‘void voce::init(const string&, bool, bool, const string&, const string&)’:
/home/daxbrin/Legacy/voce-0.9.1/src/c++/voce.h:159:38: warning: format not a string literal and no format arguments [-Wformat-security]
    sprintf(s, classPathString.c_str());
                                      ^
/home/daxbrin/Legacy/voce-0.9.1/src/c++/voce.h:164:28: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
    options[1].optionString = "-Xmx256m";
                            ^
/home/daxbrin/Legacy/voce-0.9.1/src/c++/voce.h:189:38: warning: format not a string literal and no format arguments [-Wformat-security]
    sprintf(s, classPathString.c_str());
                                      ^
/tmp/ccJ7M2lv.o: dans la fonction « voce::init(std::string const&, bool, bool, std::string const&, std::string const&) »:
main.cpp:(.text+0x48d): référence indéfinie vers « JNI_CreateJavaVM »
main.cpp:(.text+0x57a): référence indéfinie vers « JNI_CreateJavaVM »
collect2: error: ld returned 1 exit status
+0 -0

J'ai essayé dans l'autre sens mais aucun changement :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
daxbrin@ubuntuDev:~/Legacy$ g++ -L"/usr/lib/jvm/default-java/jre/lib/i386/client" -I"/usr/lib/jvm/java-8-oracle/include/linux" -I"/usr/lib/jvm/java-8-oracle/include" -ljvm main.cpp
In file included from main.cpp:5:0:
/home/daxbrin/Legacy/voce-0.9.1/src/c++/voce.h: In function ‘void voce::init(const string&, bool, bool, const string&, const string&)’:
/home/daxbrin/Legacy/voce-0.9.1/src/c++/voce.h:159:38: warning: format not a string literal and no format arguments [-Wformat-security]
    sprintf(s, classPathString.c_str());
                                      ^
/home/daxbrin/Legacy/voce-0.9.1/src/c++/voce.h:164:28: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
    options[1].optionString = "-Xmx256m";
                            ^
/home/daxbrin/Legacy/voce-0.9.1/src/c++/voce.h:189:38: warning: format not a string literal and no format arguments [-Wformat-security]
    sprintf(s, classPathString.c_str());
                                      ^
/tmp/ccXBZG7e.o: dans la fonction « voce::init(std::string const&, bool, bool, std::string const&, std::string const&) »:
main.cpp:(.text+0x48d): référence indéfinie vers « JNI_CreateJavaVM »
main.cpp:(.text+0x57a): référence indéfinie vers « JNI_CreateJavaVM »
collect2: error: ld returned 1 exit status
+0 -0

??? J'ai lu je dois vraiment être bête, je n'y arrive pas j'ai essayé : g++ -I"/usr/lib/jvm/java-8-oracle/include/linux" -I"/usr/lib/jvm/java-8-oracle/include" -L"/usr/lib/jvm/default-java/jre/lib/i386/client" main.cpp -ljvm

g++ main.cpp -I"/usr/lib/jvm/java-8-oracle/include/linux" -I"/usr/lib/jvm/java-8-oracle/include" -L"/usr/lib/jvm/default-java/jre/lib/i386/client" -ljvm

g++ -I"/usr/lib/jvm/java-8-oracle/include/linux" -I"/usr/lib/jvm/java-8-oracle/include" main.cpp -L"/usr/lib/jvm/default-java/jre/lib/i386/client" -ljvm

+0 -0

Étrange… Je remarque que le chemin de la bibliothèque n'est pas le même entre ton premier message et celui utilisé dans la ligne de compilation, est-ce normal ?

  • /usr/lib/jvm/java-8-oracle/jre/lib/i386/client/
  • /usr/lib/jvm/default-java/jre/lib/i386/client

Essaye avec g++ -I"/usr/lib/jvm/java-8-oracle/include/linux" -I"/usr/lib/jvm/java-8-oracle/include" -L/usr/lib/jvm/java-8-oracle/jre/lib/i386/client/ main.cpp -ljvm pour voir.

Excuse-moi c'est que j'essaie d'autre truc en même temps je suis reparti sur un linux propre j'ai exécuté votre g++ et j'obtient ces erreurs :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
ne0ratek@ne0ratek:~/Legacy$ g++ -I"/usr/lib/jvm/java-8-oracle/include/linux" -I"/usr/lib/jvm/java-8-oracle/include" -L/usr/lib/jvm/java-8-oracle/jre/lib/i386/client/ main.cpp -ljvm
In file included from main.cpp:2:0:
/home/ne0ratek/Legacy/voce-0.9.1/src/c++/voce.h: In function ‘void voce::init(const string&, bool, bool, const string&, const string&)’:
/home/ne0ratek/Legacy/voce-0.9.1/src/c++/voce.h:159:38: warning: format not a string literal and no format arguments [-Wformat-security]
    sprintf(s, classPathString.c_str());
                                      ^
/home/ne0ratek/Legacy/voce-0.9.1/src/c++/voce.h:164:28: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
    options[1].optionString = "-Xmx256m";
                            ^
/home/ne0ratek/Legacy/voce-0.9.1/src/c++/voce.h:189:38: warning: format not a string literal and no format arguments [-Wformat-security]
    sprintf(s, classPathString.c_str());
                                      ^
+0 -0

Ce ne sont pas des erreurs, mais des avertissements. L'idéal serait de les corriger, mais comme ce n'est pas ta libs, cela devient délicat. Tu peux demander à gcc de ne pas les afficher en utilisant -iquote à la place de -I.

Maintenant il y a normalement un exécutable nommé a.out dans ton dossier.

C'est exact merci j'ai plus d'erreur mais par contre la synthése et reco vocale ne fonctionne pas (d'après le code ça a fonctionné mais j'entends rien et ne peux rien dire) voilà mon code :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include </home/ne0ratek/Legacy/voce-0.9.1/src/c++/voce.h>

using namespace std;

int main()
{
    voce::init("voce-0.9.1/lib", true, true, "voce-0.9.1/lib/gram", "digits");
    voce::synthesize("Hello World");
    //voce::destroy();
    while(voce::getRecognizerQueueSize() > 0)
    {
          std::string s = voce::popRecognizedString();
          std::cout << "You said: " << s << std::endl;
    }
    //cout << "Hello world!" << endl;
    return 0;
}

Voilà le résultat :

1
2
3
4
5
6
ne0ratek@ne0ratek:~/Legacy$ ./a.out
[Voce] Java virtual machine created
[Voce] Initializing synthesizer
[Voce] Initializing recognizer. This may take some time...
[Voce] Initialization complete
ne0ratek@ne0ratek:~/Legacy$ 
+0 -0

Encore merci. Avec setReconinizerEnable(true); j'ai cette ligne qui est en plus

1
2
3
4
5
6
7
ne0ratek@ne0ratek:~/Legacy$ ./a.out
[Voce] Java virtual machine created
[Voce] Initializing synthesizer
[Voce] Initializing recognizer. This may take some time...
[Voce] Initialization complete
[Voce warning] Cannot initialize microphone. Speech recognition disabled.
ne0ratek@ne0ratek:~/Legacy$ 
+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte