首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用Sphinx4 java api识别实时语音

用Sphinx4 java api识别实时语音
EN

Stack Overflow用户
提问于 2016-03-22 17:25:43
回答 1查看 3.9K关注 0票数 1

我正在尝试运行使用Sphinx4的实时语音识别教程程序。这是主要的课程:

代码语言:javascript
运行
复制
public class LiveRecognition {

    public static void main(String[] args) throws Exception {
        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");
        configuration.setUseGrammar(false);

        LiveSpeechRecognizer recognizer = new LiveSpeechRecognizer(configuration);

        recognizer.startRecognition(true);

        SpeechResult result;
        while ((result = recognizer.getResult()) != null) {
            for(WordResult word : result.getWords()) {
                System.out.println(word);
            }
        }
        recognizer.stopRecognition();
    }
}

到目前为止,我正在使用由狮身人面像提供的字典和声学模型。当我运行这个程序时,它总是随机产生文本,就好像它在自言自语,不管我通过麦克风说什么,它都没有接近它。例如,输出如下:

代码语言:javascript
运行
复制
....
{between, 1.000, [2700:3610]}
23:21:37.391 INFO speedTracker            This  Time Audio: 0.83s  Proc: 3.82s  Speed: 4.60 X real time
23:21:37.391 INFO speedTracker            Total Time Audio: 1.58s  Proc: 7.66s 4.85 X real time
23:21:37.391 INFO memoryTracker           Mem  Total: 1173.00 Mb  Free: 410.17 Mb
23:21:37.393 INFO memoryTracker           Used: This: 762.83 Mb  Avg: 507.82 Mb  Max: 762.83 Mb
23:21:37.393 INFO trieNgramModel       LM Cache Size: 4183 Hits: 990660 Misses: 4183
{<sil>, 1.000, [3610:5810]}
{what, 1.000, [5820:6380]}
23:21:41.615 INFO speedTracker            This  Time Audio: 0.55s  Proc: 2.21s  Speed: 4.01 X real time
23:21:41.615 INFO speedTracker            Total Time Audio: 2.13s  Proc: 9.87s 4.63 X real time
23:21:41.615 INFO memoryTracker           Mem  Total: 1316.50 Mb  Free: 540.36 Mb
23:21:41.615 INFO memoryTracker           Used: This: 776.14 Mb  Avg: 597.26 Mb  Max: 776.14 Mb
23:21:41.615 INFO trieNgramModel       LM Cache Size: 5332 Hits: 1263784 Misses: 5332
{<sil>, 1.000, [6380:9060]}
{ooh, 1.000, [9070:9280]}
....

我做错了什么?当我说“你好世界”时,我想看“你好世界”。这两个词都在字典里。

更新我制作了一个小的语言模型文件和相应的字典使用这个在线服务从一个小的语料库文件描述这里。这一次,它更准确地使用了斯芬克斯数据库提供的默认声学模型。我不需要训练声学模型,因为我将主要处理英语(美国)语言。但我想要一个好的语言模型和字典,用于通用的短句。狮身人面像的语言模式对我来说不太好。

由于Nikolay Shmyrev在下面提到的更新可能是由于计算性能不佳所致,所以我使用以下方法:

  1. 英特尔核心™i7-4790 CPU @ 3.60GHz
  2. 16 GB DDR3内存
  3. Windows 10和Ubuntu 14.04

如有需要,可增加处理能力。

EN

Stack Overflow用户

发布于 2016-03-22 19:24:49

您的计算机速度太慢,无法实时处理音频,因此不准确。对于速度较慢的电脑,则使用袖珍狮身人面像。

Pocketsphinx也有Java/JNI,您可以找到示例这里,它应该如下所示:

代码语言:javascript
运行
复制
    Config c = Decoder.defaultConfig();
    c.setString("-hmm", "../../model/en-us/en-us");
    c.setString("-lm", "../../model/en-us/en-us.lm.bin");
    c.setString("-dict", "../../model/en-us/cmudict-en-us.dict");
    Decoder d = new Decoder(c);

    FileInputStream ais = new FileInputStream(new File("../../test/data/goforward.raw"));

    d.startUtt();
    d.setRawdataSize(300000);
    byte[] b = new byte[4096];
    int nbytes;
    while ((nbytes = ais.read(b)) >= 0) {
        ByteBuffer bb = ByteBuffer.wrap(b, 0, nbytes);
        bb.order(ByteOrder.LITTLE_ENDIAN);
        short[] s = new short[nbytes/2];
        bb.asShortBuffer().get(s);
        d.processRaw(s, nbytes/2, false, false);
    }
    d.endUtt();
    System.out.println(d.hyp().getHypstr());

    short[] data = d.getRawdata();
    System.out.println("Data size: " + data.length);
    DataOutputStream dos = new DataOutputStream(new  FileOutputStream(new File("/tmp/test.raw")));
    for (int i = 0; i < data.length; i++) {
        dos.writeShort(data[i]);
    }
    dos.close();

    for (Segment seg : d.seg()) {
        System.out.println(seg.getWord());
    }
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36161211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档