我想对大量的正在不断地产生.wav
文件进行语音识别。的质量问题与离线语音到文本的使用Sphinx4
有越来越多的在线语音到文本API服务(例如Google Cloud Speech,Amazon Lex,Twilio Speech Recognition,Nexmo Voice等),这将用于连接的应用程序工作得很好,但不适合这种用途的情况下,由于成本和带宽。
快速谷歌搜索建议CMUSphinx(CMU =卡内基梅隆大学)是流行的语音识别。
我尝试了 '世界你好' 例如:
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();
}
}
结果是有些令人失望。 'test.wav'文件包含以下音频:
这是第一个发言间隔。 第一时间沉默后,这是第二个讲话区间。在第三个默认片刻后,这第三个区间的发言和最后一个 一个。
这被解释为:
这是第一个区间而言...对于 沉默的那一刻是所有讲的第二个......为的 沉默的瞬间这是最后几个发言的最后一个
大部分单词已被捕获,但输出在意义丢失的范围内乱码。然后我下载了一个新闻报道,其中的发音很清楚,而且转录完全是乱码。它抓住了一个非常醉的人会听外语。
我很想知道是否有人成功地使用Sphinx4,如果有的话,做了哪些调整以使其工作?是否有替代声学/语言模型,字典等......表现更好?对于离线语音到文本,我应该考虑其他任何开源建议吗?