1

Je voudrais effectuer la reconnaissance vocale sur un grand nombre de .wav fichiers qui sont continuellement générés.problème de qualité avec la voix hors-texte en utilisant Sphinx4

Il y a un nombre croissant de services API voix-texte en ligne (par exemple Google Cloud Speech, Amazon Lex, Twilio Speech Recognition, Nexmo Voice, etc.) qui fonctionnent bien pour les applications connectées, mais ne conviennent pas pour ce cas d'utilisation en raison de coût et bande passante.

Une recherche rapide sur google suggérée CMUSphinx (CMU = Carnegie Mellon University) est populaire pour la reconnaissance vocale.

J'ai essayé l'exemple 'bonjour':

import edu.cmu.sphinx.api.Configuration; 
import edu.cmu.sphinx.api.SpeechResult; 
import edu.cmu.sphinx.api.StreamSpeechRecognizer; 

import java.io.File; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.io.InputStream; 

public class Main { 

    public static void main(String[] args) throws IOException { 

     Configuration configuration = new Configuration(); 

     configuration.setAcousticModelPath("resource:/edu/cmu/sphinx/models/en-us/en-us"); 
     configuration.setDictionaryPath("resource:/edu/cmu/sphinx/models/en-us/cmudict-en-us.dict"); 
     configuration.setLanguageModelPath("resource:/edu/cmu/sphinx/models/en-us/en-us.lm.bin"); 

     StreamSpeechRecognizer recognizer = new StreamSpeechRecognizer(configuration); 
     InputStream stream = new FileInputStream(new File("src/main/resources/test.wav")); 

     recognizer.startRecognition(stream); 
     SpeechResult result; 
     while ((result = recognizer.getResult()) != null) { 
      System.out.format("Hypothesis: %s\n", result.getHypothesis()); 
     } 
     recognizer.stopRecognition(); 

    } 
} 

Le résultat est un peu décevant. Le fichier 'test.wav' contient l'audio suivant:

Ceci est le premier intervalle de conversation. Après le premier instant de silencieux, c'est le deuxième intervalle de parler. Après le troisième moment de silence, c'est le troisième intervalle de conversation et le dernier un.

Ceci a été interprété comme:

c'est le premier intervalle de parler ... pour le premier moment de silence est la deuxième de tous parler ... pour le pour le moment de silence C'est la f *** ing plusieurs parlant dans le dernier

La plupart des mots ont été capturés, mais la sortie est brouillée dans la mesure où la signification est perdue. J'ai alors téléchargé une histoire de nouvelles où l'énonciation était limpide, et la transcription était le charabia complet. Il capturé autant qu'une personne très saoulait écouter une langue étrangère.

Je suis curieux de savoir si quelqu'un utilise Sphinx4 avec succès et, dans l'affirmative, quels ajustements ont été faits pour le faire fonctionner? Existe-t-il d'autres modèles acoustiques/langagiers, dictionnaires, etc. qui fonctionnent mieux? Toutes les autres suggestions open source pour la lecture hors-texte hors ligne, je devrais envisager?

Répondre

0

Cela est avéré être une question triviale qui est documentée dans la FAQ: « Q: What is sample rate and how does it affect accuracy »

[...] nous ne pouvons pas détecter encore la fréquence d'échantillonnage. Avant d'utiliser le décodeur, vous devez vous assurer que la fréquence d'échantillonnage du décodeur correspond à la fréquence d'échantillonnage de l'audio d'entrée et que la bande passante de l'audio correspond à la bande passante utilisée pour l'apprentissage du modèle. Une non-concordance entraîne une très mauvaise précision de .

Le reportage était une chaîne audio stéréo BBC enregistrée à 44,1 khz.

$ soxi GlobalNewsPodcast-20170828-CatastrophicFloodsRisin.wav 

Input File  : 'GlobalNewsPodcast-20170828-CatastrophicFloodsRisin.wav' 
Channels  : 2 
Sample Rate : 44100 
Precision  : 16-bit 
Duration  : 00:29:23.79 = 77783087 samples = 132284 CDDA sectors 
File Size  : 311M 
Bit Rate  : 1.41M 
Sample Encoding: 16-bit Signed Integer PCM 

I a converti en mono:

$ sox GlobalNewsPodcast-20170828-CatastrophicFloodsRisin.wav GlobalNewsPodcast-20170828-CatastrophicFloodsRisinMono.wav remix 1,2 
$ soxi GlobalNewsPodcast-20170828-CatastrophicFloodsRisinMono.wav 

Input File  : 'GlobalNewsPodcast-20170828-CatastrophicFloodsRisinMono.wav' 
Channels  : 1 
Sample Rate : 44100 
Precision  : 16-bit 
Duration  : 00:29:23.79 = 77783087 samples = 132284 CDDA sectors 
File Size  : 156M 
Bit Rate  : 706k 
Sample Encoding: 16-bit Signed Integer PCM 

ensuite sous-échantillonné à 16kHz:

$ sox GlobalNewsPodcast-20170828-CatastrophicFloodsRisinMono.wav -r 16k GlobalNewsPodcast-20170828-CatastrophicFloodsRisinMono16k.wav 
$ soxi GlobalNewsPodcast-20170828-CatastrophicFloodsRisinMono16k.wav 

Input File  : 'GlobalNewsPodcast-20170828-CatastrophicFloodsRisinMono16k.wav' 
Channels  : 1 
Sample Rate : 16000 
Precision  : 16-bit 
Duration  : 00:29:23.79 = 28220621 samples ~ 132284 CDDA sectors 
File Size  : 56.4M 
Bit Rate  : 256k 
Sample Encoding: 16-bit Signed Integer PCM 

Maintenant, il fonctionne assez bien. Voici un extrait de l'audio transcrites de l'article de nouvelles:

officiels d'urgence ont dit qu'ils attendent la salle de millions de personnes à demander de l'aide au Texas bolton mille flashy personnes déjà être soignés dans des abris temporaires est sur le moteur est un grand dégagement d'eau à partir de deux bas qui protègent Houston sens de la ville de ...