1

我想对大量的正在不断地产生.wav文件进行语音识别。的质量问题与离线语音到文本的使用Sphinx4

有越来越多的在线语音到文本API服务(例如Google Cloud SpeechAmazon LexTwilio Speech RecognitionNexmo 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,如果有的话,做了哪些调整以使其工作?是否有替代声学/语言模型,字典等......表现更好?对于离线语音到文本,我应该考虑其他任何开源建议吗?

回答

0

事实证明,这是公司在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 

现在,它的工作相当不错。下面是从新闻报道转录音频的片断:

急救部门官员表示,他们预计从万人 大厅寻求在得克萨斯州博尔顿浮华万人已被 在临时庇护所照顾的援助是在发动机一个大的发布 水从两个起伏,保护休斯敦市的意识...

相关问题