【问题标题】:quality issue with offline voice-to-text using Sphinx4使用 Sphinx4 的离线语音到文本的质量问题
【发布时间】:2018-02-08 09:11:23
【问题描述】:

我想对大量不断生成的.wav 文件执行语音识别。

越来越多的在线语音到文本 API 服务(例如 Google Cloud SpeechAmazon LexTwilio Speech RecognitionNexmo 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


    【解决方案1】:

    事实证明这是一个常见问题解答中记录的微不足道的问题:“Q: What is sample rate and how does it affect accuracy

    [...] 我们还不能检测采样率。所以在使用解码器之前,你 需要确保解码器的采样率与 输入音频的采样率和音频的带宽匹配 用于训练模型的带宽。不匹配导致 准确性非常差。

    新闻片段是 BBC 音频立体声,以 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
    

    我将它转换为单声道:

    $ 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
    

    现在它工作得很好。以下是新闻文章转录音频的 sn-p:

    紧急情况官员表示,他们预计大厅将有数百万人 在得克萨斯州寻求帮助 博尔顿 华丽的数千人已经在 在临时避难所照顾在引擎上是一个很大的释放 水从两个起伏,保护休斯顿城市的感觉......

    【讨论】:

      猜你喜欢
      • 2017-12-29
      • 1970-01-01
      • 1970-01-01
      • 2021-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-03
      相关资源
      最近更新 更多