用C或Java或PHP进行语音识别?

时间:2011-05-27 11:08:46

标签: java php c speech-recognition

是否有任何众所周知的C或Java或PHP建立的框架来进行语音识别应用程序?麦克风音频输入,它将识别英语单词。比如伪代码:

Speech s = new Speech();
s.input(micStream);
result = s.recognise("Hello");
if (result) { printf("Matched hello"); } else { printf("No match found"); }

跟进:

下载:sphinx4/1.0%20beta6/

enter image description here

  1. 添加库

  2. 复制&粘贴代码:

    a)将xml文件放在某处,可以从代码中加载:

    https://gist.github.com/2551321

    b)使用它:

    package edu.cmu.sphinx.demo.hellowrld;
    import edu.cmu.sphinx.frontend.util.Microphone;
    import edu.cmu.sphinx.recognizer.Recognizer;
    import edu.cmu.sphinx.result.Result;
    import edu.cmu.sphinx.util.props.ConfigurationManager;
    import java.io.IOException;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import models.Tts;
    
    public class Speech {
    
      public static void main(String[] args) {
        ConfigurationManager cm;
    
        if (args.length > 0) {
            cm = new ConfigurationManager(args[0]);
        } else {
            ///tmp/helloworld.config.xml
            cm = new ConfigurationManager(Speech.class.getResource("speech.config.xml"));
    
        }
        Recognizer recognizer = (Recognizer) cm.lookup("recognizer");
        recognizer.allocate();
    
        Microphone microphone = (Microphone) cm.lookup("microphone");
        if (!microphone.startRecording()) {
            System.out.println("Cannot start microphone.");
            recognizer.deallocate();
            System.exit(1);
        }
    
        System.out.println("Say: (Hello | call) ( Naam | Baam | Caam | Some )");
    
        while (true) {
            System.out.println("Start speaking. Press Ctrl-C to quit.\n");
    
            Result result = recognizer.recognize();
    
            if (result != null) {
                String resultText = result.getBestFinalResultNoFiller();
                System.out.println("You said: " + resultText + '\n');
    
                    Tts ts = new Tts();
                    try {
                        ts.load();
                        ts.say("Did you said: " + resultText);
                    } catch (IOException ex) {
    
                    } 
            } else {
                System.out.println("I can't hear what you said.\n");
            }
        }
      }
    }
    

6 个答案:

答案 0 :(得分:10)

答案 1 :(得分:4)

从几个月来看这些问题,我发现大多数开发人员的选择都是这样的:

Windows用户 - 使用.Net或Microsoft.Speech的System.Speech功能并安装Microsoft提供的免费识别器。 Windows 7包含一个完整的语音引擎。其他人可以免费下载。有一个称为SAPI的相同引擎的C ++ API。见http://msdn.microsoft.com/en-us/magazine/cc163663.aspx。或http://msdn.microsoft.com/en-us/library/ms723627(v=vs.85).aspx。有关Windows的Microsoft引擎的更多背景知识 What is the difference between System.Speech.Recognition and Microsoft.Speech.Recognition?

Linux人员 - Sphinx似乎有很好的追随者。请参阅http://cmusphinx.sourceforge.net/http://cmusphinx.sourceforge.net/wiki/

商业产品 - Nuance,Loquendo,AT& T,其他

在线服务 - Nuance,Yapme,其他人

当然这也可能有用 - http://en.wikipedia.org/wiki/List_of_speech_recognition_software

有一个Java语音API。请参阅Java Speech API http://java.sun.com/products/java-media/speech/forDevelopers/jsapi-guide/Recognition.html中的javax.speech.recognition。我相信您仍然需要找到支持此API的语音引擎。我不认为Sphinx完全支持它 - http://cmusphinx.sourceforge.net/sphinx4/doc/Sphinx4-faq.html#support_jsapi

还有很多其他SO问题: Need text to speech and speech recognition tools for Linux

答案 2 :(得分:3)

嗯。一个有趣的话题。虽然多年前我在Amiga上花了相当多的时间和一些(相当基本的)语音识别软件一起玩,但我还没有做过任何关于这种事情的工作。这很有趣,但不像伪代码示例那么简单。

您将需要第三方API库。 (我想这可能可能自己编写,但我不认为你是一个可行的想法)

有许多API库可用;谷歌出现了几个 - 这是我得到的结果之一:http://en.wikipedia.org/wiki/Microsoft_Speech_API - 但你可能需要尝试一些,直到你得到一个满足你的需求。

它有可能成为一个商业API - 即你必须付出代价。可能有一些开源的(我在粗略的谷歌中没有看到任何东西,但我确定它们存在),但它们可能更难以使用。

一旦你有了一个你满意的图书馆,并且你已经编写了与之接口的代码,你的工作就没有完成,因为语音识别是一个非常棘手的工作。

不同的口音只是问题的开始。说话者的性别和他们说话的速度也会影响识别所说内容的能力。人类在识别语言方面远远超过计算机,但即使我们也在努力解决一些不熟悉的口音。

语音识别软件通常需要经过培训才能识别特定的单词和短语。你当然不会尝试匹配一个字符串,如你的例子;你要求它发现一个特定的一个被训练过来的短语。

简而言之,这是一个非常大的领域,你显然只是将你的脚趾浸入其中。我希望你顺利进行,但我认为你不久的将来会有很多研究时间!

以下是一些可能对您有帮助的其他链接:

答案 3 :(得分:1)

试试我的C库libsprec,它是围绕Google的语音识别引擎构建的:

http://github.com/H2CO3/libsprec

答案 4 :(得分:1)

HTK是C的更受欢迎的框架之一。

http://htk.eng.cam.ac.uk/

它不易使用,但绝对是强大的。

答案 5 :(得分:1)

J.A.R.V.I.S. Java Speech API非常强大且功能强大,是Sphinx的极简主义替代品。

https://github.com/The-Shadow/java-speech-api