当前位置: 首页 > 知识库问答 >
问题:

使用cmu sphinx进行语音识别-无法正常工作

戚晨
2023-03-14

我试图用CMU Sphinx在java中进行语音识别,但结果不正确,我也不知道为什么。

我有一个。wav文件我用我的声音录制了一些英语句子。

以下是我的java代码:

            Configuration configuration = new Configuration();

        // Set path to acoustic model.
        configuration.setAcousticModelPath("resource:/edu/cmu/sphinx/models/en-us/en-us");
        // Set path to dictionary.
        configuration.setDictionaryPath("resource:/edu/cmu/sphinx/models/en-us/cmudict-en-us.dict");
        // Set language model.
        configuration.setLanguageModelPath("resource:/edu/cmu/sphinx/models/en-us/en-us.lm.dmp");
        StreamSpeechRecognizer recognizer = new StreamSpeechRecognizer(configuration);

        recognizer.startRecognition(new FileInputStream("assets/voice/some_wav_file.wav"));
        SpeechResult result = null;

        while ((result = recognizer.getResult()) != null) {
            System.out.println("~~ RESULTS: " + result.getHypothesis());
        }

        recognizer.stopRecognition();

    }
    catch(Exception e){
        System.out.println("ERROR: " + e.getMessage());
    }

我在Android中还有另一个不太好用的代码:

Assets assets = new Assets(context);
                File assetDir = assets.syncAssets();
                String prefix = assetDir.getPath();

                Config c = Decoder.defaultConfig();
                c.setString("-hmm", prefix + "/en-us-ptm");
                c.setString("-lm", prefix + "/en-us.lm");
                c.setString("-dict", prefix + "/cmudict-en-us.dict");
                Decoder d = new Decoder(c);
                InputStream stream = context.getResources().openRawResource(R.raw.some_wav_file);


                d.startUtt();
                byte[] b = new byte[4096];
                try {
                    int nbytes;
                    while ((nbytes = stream.read(b)) >= 0) {
                        ByteBuffer bb = ByteBuffer.wrap(b, 0, nbytes);
                        short[] s = new short[nbytes/2];
                        bb.asShortBuffer().get(s);
                        d.processRaw(s, nbytes/2, false, false);
                    }
                } catch (IOException e) {
                    Log.d("ERROR: ", "Error when reading file" + e.getMessage());
                }
                d.endUtt();
                Log.d("TOTAL RESULT: ", d.hyp().getHypstr());
                for (Segment seg : d.seg()) {
                    Log.d("RESULT: ", seg.getWord());
                }

我使用这个网站将wav文件转换为16bit、16khz、mono和little-endian(尝试了它的所有选项)。

知道为什么is不起作用吗。我使用内置字典和宾格模式,我的英语口音也不完美(不知道这是否重要)。

编辑:

这是我的文件。我录下自己说:“我的宝宝很可爱”,这就是我期望的输出。在纯java代码中,我得到:“我有艾米的青春”,在android代码中,我得到:“它”

这是包含日志的文件。

共有1个答案

冯枫
2023-03-14

您的音频因转换而有些损坏。您应该最初录制成wav或其他无损格式。您的发音也与美国英语相去甚远。对于格式之间的转换,您可以使用sox而不是外部网站。您的android示例似乎正确,但感觉您使用android解码了不同的文件。您可能会检查资源中是否有实际正确的文件。

 类似资料:
  • 我正在开发一个功能,当按下一个按钮时,它将启动语音识别,同时将记录用户所说的话。代码如下: 我一步一步地制作了这个应用程序,起初这个应用程序没有录音功能,语音识别效果非常好。 在我多次测试并认为语音识别正常后,我开始使用合并录音功能。 然后,我进行了测试,一旦按下按钮\u start,甚至在我试图说话之前,就会立即出现ERROR3音频信息。 我播放录音。语音也被正确记录和保存。 发生什么事了?为什

  • [信息]:#安装纯Python模块 [信息]:需求(SpeechRecognition,pyaudio)没有菜谱,试图用pip安装它们 [信息]:如果失败,这可能意味着模块已经编译了组件,需要一个配方。 工作:pid 3095的线程后台线程异常:n/python2.7-u-c“导入设置...(和509更多) 回溯(最近调用的最后一次): 文件“/usr/lib/python2.7/threadin

  • 我正在尝试使用适用于Xamarin Android的Microsoft认知语音从麦克风构建连续语音识别。我认为没有Xamarin的库,所以我稍微修改了“Xamarin。认知。BingSpeech”库(endpoint等)以使其正常工作。我有一些问题 我想通过以下教程连接到microsoft web套接字https://docs.microsoft.com/en-us/azure/cognitive

  • 我正在努力寻找使用谷歌云语音API进行实时连续语音识别的例子。我的要求是使用麦克风,检测语音,并在用户说话时进行转录。 我知道他们的RESTAPI没有这种支持,所以我研究了grpc示例,包括他们提供的示例。但它们似乎都是用户可以上传音频并检测语音的例子。 我在Java,谷歌grpc也支持java。有人遇到一个很好的例子,展示了如何通过麦克风持续进行这种识别吗?

  • 我目前正在开发一个智能助手程序(基本上,它只是听用户说什么,然后根据用户说的内容对代码进行处理)。直到今天,当我切换到笔记本电脑时,它一直工作正常。程序不会打印出任何错误,但也不会打印出我说的话。我正在使用Python语音识别库3.8版。1.有人知道这个图书馆的替代品吗?如果是,请尝试解释我将如何“即时”使用它(无需先录制文件,然后将其发送到服务器,更像是实时语音)。 编辑:我忘了在帖子里说,我正

  • 由于连接到不同的API,我目前正在开发一个工具,允许我阅读所有的通知。 它工作得很好,但现在我想用一些声音命令来做一些动作。 就像当软件说“一封来自Bob的邮件”时,我想说“阅读”或“存档”。 我的软件是通过一个节点服务器运行的,目前我没有任何浏览器实现,但它可以是一个计划。 在NodeJS中,启用语音到文本的最佳方式是什么? 我在它上面看到了很多线程,但主要是使用浏览器,如果可能的话,我希望在一