【发布时间】:2018-02-08 09:11:23
【问题描述】:
我想对大量不断生成的.wav 文件执行语音识别。
越来越多的在线语音到文本 API 服务(例如 Google Cloud Speech、Amazon Lex、Twilio Speech Recognition、Nexmo Voice 等)适用于连接的应用程序,但不是由于成本和带宽,适合此用例。
快速谷歌搜索建议CMUSphinx(CMU = 卡内基梅隆大学)在语音识别方面很受欢迎。
我尝试了“hello world”示例:
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,如果是,做了哪些调整以使其正常工作?是否有替代的声学/语言模型、词典等……表现更好?对于离线语音到文本的任何其他开源建议我应该考虑吗?
【问题讨论】:
标签: speech-recognition voice-recognition speech-to-text cmusphinx sphinx4