的质量问题与离线语音到文本的使用Sphinx4
我想对大量的正在不断地产生.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,如果有的话,做了哪些调整以使其工作?是否有替代声学/语言模型,字典等......表现更好?对于离线语音到文本,我应该考虑其他任何开源建议吗?
事实证明,这是公司在FAQ文档小事:“Q: What is sample rate and how does it affect accuracy”
[...]我们无法检测采样率呢。因此,在使用解码器之前,您需要确保解码器的两个采样率与输入音频的采样率匹配,并且音频的带宽与用于训练模型的带宽相匹配 。不匹配导致 的准确度非常差。
新闻片段是BBC音频立体声,记录在44.1千赫。
$ 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
我把它转化为单声道:
$ 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
然后下采样到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
现在,它的工作相当不错。下面是从新闻报道转录音频的片断:
急救部门官员表示,他们预计从万人 大厅寻求在得克萨斯州博尔顿浮华万人已被 在临时庇护所照顾的援助是在发动机一个大的发布 水从两个起伏,保护休斯敦市的意识...