当前位置: 首页 > 面试题库 >

用Sphinx4发现关键字或关键词

曾航
2023-03-14
问题内容

我目前正在尝试使我的java代码(使用eclipse)执行某些功能(如果说了某件事)。我正在使用Sphinx4库,这是我目前拥有的:

我想做的是在它说的那行:

IF (TRUE) someFunction();

如果我的发言是Hello Computer,Hello Jarvis,Good Morning Computer或Good Morning
Jarvis,则运行该功能。或者换句话说,如果语音与.gram文件中的“ public
”行代码匹配,请运行该函数。更具体地说,如果我的讲话符合该语法规则,则返回“ greet”。对不起,如果这没有道理…

这是我的listener.java文件:

package speechRecognition;

import java.io.File;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
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;

public class Listener {

    public void someFunction(){
        System.out.println("Did Something");
    }

    public static void main(String[] args) {
        ConfigurationManager cm;
        if (args.length > 0) { cm = new ConfigurationManager(args[0]);
        } else { cm = new ConfigurationManager(Listener.class.getResource("configurations.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);
        }

        while (true) {
            Result result = recognizer.recognize();
            if (result != null) {
                String resultText = result.getBestFinalResultNoFiller();
                if (resultText != "" && resultText != null) {
                    IF (TRUE) someFunction();
                }
            } else {
                System.out.println("I can't hear what you said.\n");
            }
        }
    }
}

这是我的dictionary.gram:

#JSGF V1.0;
grammar dictionary;

public <greet> = (Hello | Good Morning) (Jarvis | Computer);

问题答案:

您可以这样做,但是唯一的事情是您需要在sphinx4中启用OOG发现。基本上以任何sphinx4语法示例为例,并根据此wiki页面在配置文件中启用OOG:

<component name="flatLinguist"
           type="edu.cmu.sphinx.linguist.flat.FlatLinguist">
     ....
    <property name="addOutOfGrammarBranch" value="true"/>
    <property name="outOfGrammarProbability" value="1E-20"/>
    <property name="phoneInsertionProbability" value="1E-10"/>
    <property name="phoneLoopAcousticModel" value="wsj"/>
     ...
</component>

之后,<unk>如果只记录了随机单词,它将返回您的单词,如果记录了您语法中的单词,它将返回您的关键短语。

您需要调整outOfGrammar概率以获得可​​靠的检测。有关更多详细信息,请参见

http://cmusphinx.sourceforge.net/wiki/sphinx4:rejectionhandling



 类似资料:
  • 问题内容: 是一样的“和”,是一样的PHP“或”? 我已经进行了一些测试,看来它们的行为相同。有什么区别吗? 如果不是,是否还有其他具有单词等效功能的PHP标志,您认为它使代码更易于阅读吗? 问题答案: 并且具有 更高的 优先级比和。更准确地说,它的优先级比赋值运算符()的优先级更高,而和则更低。

  • 下面是 Java 里面的关键字。不能使用以下任一作为您的程序标识符。关键字 const 和 goto 语句被保留,即使他们目前尚未使用。true, false, 和 null 似乎是关键字,但它们实际上是字面值;你不能使用它们作为你的程序标识符。 abstract continue for new switch assert*** default goto*

  • 关键字是不能做为变量的。Lua 的关键字不多,就以下几个: and break do else elseif end false for function if in local nil not or repeat return then true until while

  • 模型 21.1 model 视图 21.1 view 处理器方法 21.1 handler method 处理器 21.1 handler 控制器 21.1 controller 命令对象 21.1 command object 表单返回对象 21.1 form-backing object 响应 21.1 response 视图解析器 21.1 view resolver 验证器 21.1.1

  • 智能合约使用的语言为golang定制版,屏蔽了部分golang关键字。 package、import: 谨慎使用,所有的import的模块都只能是链上的模块,不支持引用外部模块,会校验import的模块是否在链上。代码打包成交易时,会自动删除package和import,并将import按照规则转化为数组,最终的交易里是不允许包含这两个关键字的。 go/select: 由于该操作会出现并发,导致数

  • 关键字,C的关键字共有32个 数据类型关键字(12个) char,short,int,long,float,double,unsigned,signed,struct,union,enum,void 控制语句关键字(12个) if,else,switch,case,default,for,do,while,break,continue,goto,return 存储关键字(5个) auto,exte