17

我正在尝试开发一个使用TTS引擎和语音识别的酷应用程序。到目前为止还可以,但我想要更多。我想创建一个服务(我认为服务是正确的方式),它总是“听”,当有人说"ok google"或其他东西时,语音识别就会开始,就像现在的谷歌一样。例如,如果您说"ok google"google 现在开始。我不知道从哪里开始,所以我直接在这里询问是否可能。我尝试查看此线程 [here](一直在侦听关键字,例如 4.4 上的“Ok google”),最后一个答案谈到了一项服务,正如我所想的那样。有人可以帮我写代码吗?

例如,这是通过点击按钮启动语音识别的代码:

/**
 * Instruct the app to listen for user speech input
 */
private void listenToSpeech() {
    //start the speech recognition intent passing required data
    Intent listenIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    //indicate package
    listenIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, getClass().getPackage().getName());
    //message to display while listening
    listenIntent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Say a word!");
    //set speech model
    listenIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
    //specify number of results to retrieve
    listenIntent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 10);
    //start listening
    startActivityForResult(listenIntent, VR_REQUEST);
}

您认为可以listenIntent仅通过语音而不按任何按钮来启动它吗?这就是我的意思。

4

3 回答 3

2

(2018 年 1 月 6 日更新:在之前的答案中添加了一些内容)

你可以参考Saiy,以前是Utter

这个应用程序使用热词检测作为“Google Now”。

Android 没有提供这样的 API 来执行这样的操作。

Saiy 应用程序现在是开源的,这里有存储库。从我在代码中看到的一点点来看,它似乎已经使用 CMU Pocketshinx 实现了该功能。

不要忘记发布您的发现。

请注意 - 在后台一直收听非常消耗 CPU 和电池。

于 2014-07-09T03:46:11.353 回答
0

好吧,使用 Jform,而不是 android,并且您创建了一个按钮,您就可以调用button.doClick()。所以我使用的是一个 Timer ,Timer.scheduleAtFixedRate(new task(),int delay,int iterval);这样它就可以独立完成并重复。所以我想要得到的是,我确定在 android 中有一种方法do.action/button/key,等等,你可以使用一个计时器来独立地激活它。看起来好像它是一个空白只是尝试

listenToSpeech();

至于计时器;

Timer listenTimer = new Timer();
//listenTimer.schedualAtFixedRate(new listeningTask(),0,1);//place this where your program starts as this starts the timer
class listeningTask extends TimerTask{
  if(condition){
    listenToSpeech();
  }
}

抱歉格式或缩进,使用平板电脑。

于 2014-10-08T19:04:15.733 回答
0

不是java,但是你见过Jasper吗?看起来很有希望:http: //jasperproject.github.io

于 2014-07-25T23:19:09.700 回答