2016-07-16 42 views
2

Ich habe pocketsphinx in meinem Laptop (Linux Mint 17) installiert mit dem Ziel, eine WAV-Audiodatei in Text zu transkribieren. Die Audios sind auf Spanisch, also habe ich die Voxforge 0,2 spanische Modell von seiner Website und kopieren kleistert adaptierte den folgenden Code heruntergeladenCmusphinx spanisches Modell inkohärente Transkription

#include <pocketsphinx.h> 

int main(int argc, char *argv[]) 
{ 
    ps_decoder_t *ps; 
    cmd_ln_t *config; 
    FILE *fh; 
    char const *hyp, *uttid; 
    int16 buf[512]; 
    int rv; 
    int32 score; 

    if(argc == 2) 
    { 
     printf("Transcribiendo fichero: %s\n", argv[1]); 
    } 
    else if(argc > 2) 
    { 
     printf("Demasiados argumentos.\n"); 
    } 
    else 
    { 
     printf("Se esperaba un sólo argumento.\n"); 
    } 
    config = cmd_ln_init(NULL, ps_args(), TRUE, 
      "-hmm", "/home/<myuser>/software/voxforge-es/model_parameters/voxforge_es_sphinx.cd_ptm_3000", 
      "-lm", "/home/<myuser>/software/voxforge-es/etc/voxforge_es_sphinx.transcription.test.lm", 
      "-dict", "/home/<myuser>/software/voxforge-es/etc/voxforge_es_sphinx.dic", 
      NULL); 
    if (config == NULL) 
    { 
     fprintf(stderr, "Failed to create config object, see log for details\n"); 
    return -1; 
    } 

    ps = ps_init(config); 
    if (ps == NULL) 
    { 
     fprintf(stderr, "Failed to create recognizer, see log for details\n"); 
     return -1; 
    } 

    fh = fopen(argv[1], "rb"); 
    if (fh == NULL) 
    { 
     fprintf(stderr, "Unable to open input file.\n"); 
     return -1; 
    } 

    rv = ps_start_utt(ps); 

    while (!feof(fh)) 
    { 
     size_t nsamp; 
     nsamp = fread(buf, 2, 512, fh); 
     rv = ps_process_raw(ps, buf, nsamp, FALSE, FALSE); 
    } 

    rv = ps_end_utt(ps); 
    hyp = ps_get_hyp(ps, &score); 
    printf("Reconocido: %s\n", hyp); 

    fclose(fh); 
    ps_free(ps); 
    cmd_ln_free_r(config); 

    return 0; 
} 

Das Problem ist, dass eine WAV mono 16Khz Datei Ausbeuten seltsame Ergebnisse. Was ich wissen will, ist, wenn ich das Modell oder zum Abstimmen eines bestimmte Parameter ...

Zum Beispiel neu erstellen muß, unter Berücksichtigung den folgenden Text:

"Hola soy ingeniero informático"

I konvertiert es in eine 16KHz/16bit/Mono WAV-Datei.

meinen Code Rennen, gibt es diese Ausgabe:

> ./nlptest voice.wav 
"cola salir en y era de líneas" 

Wie Sie es ganz anders sehen kann vom Original. Nur die Wörter "hola" und "cola" sind in der Aussprache ähnlich (aber absolut unterschiedliche Bedeutung).

Auch mit pocketsphinx_continuous, sind die Ergebnisse sehr schlecht (es unterscheidet sich nur in einem Wort):

> pocketsphinx_continuous -hmm /home/<myuser>/software/voxforge-es/model_parameters/voxforge_es_sphinx.cd_ptm_3000 -lm /home/<myuser>/software/voxforge-es/etc/voxforge_es_sphinx.transcription.test.lm -dict /home/<myuser>/software/voxforge-es/etc/voxforge_es_sphinx.dic -infile voice.wav 
"cola seguir en y era de líneas" 

Vielen Dank für Ihre Beratung.

+0

Ich bin mir nicht sicher jetzt, ich bin vielleicht falsch, aber ich denke Sphinx kann sehr gut nur Wort für Wort übersetzen. Versuchen Sie also, Ihre wav in getrennte Wörter aufzuteilen. Sie können dies programmgesteuert tun, indem Sie in einem Audio nach Minipausen suchen. Aber ich bin mir sicher falsch. Sie können es jedoch für ein paar Wörter ausprobieren, um zu sehen, ob es funktioniert oder nicht. – Dalen

+0

@Dalen, du liegst falsch. Beachten Sie auch, dass es zwischen Wörtern in kontinuierlicher Sprache Pausen gibt. –

+0

Ja, danke, ich war in den alten Zeiten fest, als Sphinx Yung war. Wenn Sie sagen wollten "es gibt keine Pausen", ist das nicht wahr. Es gibt keine hörbaren Pausen, aber Grenzen existieren und können mit ein wenig Optimierungen gefunden werden. Und Sie können die meisten Wörter auf diese Weise trennen. – Dalen

Antwort

3

Das Modell voxforge_es_sphinx.transcription.test.lm, das Sie verwenden, hat "test" im Namen, es dient nur zu Testzwecken. Sie können das erweiterte Modell es-20k.lm.gz auf unserer Website here herunterladen.

Insgesamt ist unser spanisches Modell ziemlich einfach und nicht sehr genau, wenn Sie eine ernsthafte Transkription benötigen, müssen Sie sich viel Mühe geben, es zu erweitern.

+0

Woah, jetzt viel besser. Es sagt: "Hallo Soja Ingeniera de Niñas", es vermisst ein Wort und es klingt lächerlich, aber es ist viel besser! Danke – cabreracanal

+0

Der Punkt ist, dass ich keine Modelle für Spanisch neben dem Transkriptionstest von voxforge finden konnte. Ich bin überrascht über den aktuellen Stand des spanischen Sprachmodells, da es die dritt- oder zweithäufigste gesprochene Sprache der Welt ist. Ich hoffe es geht weiter besser :) – cabreracanal

+0

Es entschlüsselt informatico nicht weil das Wort im Modellvokabular fehlt. Sie können das Modell erweitern, wie in [unser Tutorial] (http://cmusphinx.sourceforge.net/wiki/tutoriallmadvanced) beschrieben. Die Arbeit an Spanisch ist nicht sehr aktiv, weil wir an Ressourcen Mangel haben, Ihre Hilfe würde geschätzt werden. –