【问题标题】:Development of application similar to "Google now" - is it possible to use voice recognition without key input?开发类似于“Google now”的应用程序 - 是否可以在没有按键输入的情况下使用语音识别?
【发布时间】:2014-03-14 09:09:12
【问题描述】:

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

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

/**
 * 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 吗?这就是我的意思。

【问题讨论】:

  • 确实是一个好主意,但我觉得编写一个能感知“OK Google”之类的服务也不过是一种语音识别技术,你不能保持 24X7 全天候运行。相反,您可以担保一个主屏幕小部件,点击它您可以启动此后台服务,该服务最终将为您启动您的应用程序,是的,您可以在 if 块中启动意图,您的条件类似于检查语音输入硬编码值,例如“OK Google”。
  • 是的,小部件是个好主意。但是,你知道如何用代码创建这种服务吗?我的意思是.. 如果我说“ok google”必须启动该意图,应用程序如何识别?这是我真正的问题。
  • 当您创建一个小部件时,您可以将一个活动映射到它的启动。因此,您可以编写一个代码,在启动小部件“XYZ”活动时启动该活动,并且该活动直接采用语音输入,就像您在应用程序中采用语音输入一样。现在,在获取语音输入后,您将其转换为文本并检查它是否与“OK GOOGLE”匹配,如果是,那么您只需在该 if 块中创建您想要的任何活动的 Intent。
  • 即使我已经开发了一个语音转文本应用程序,使用该应用程序,用户可以通过说出联系人列表中的姓名直接拨打电话...应用程序将通过输入作为用户姓名来拨打用户的电话打电话的人...我会在那里尝试这个东西,让你知道它是否有效......但我觉得没有问题,应该可以工作。
  • 我会尝试类似的,谢谢。好吧,如果我可以问,您是如何实现该应用程序的?我试图阅读联系人列表,但找不到“告诉它”以识别姓名并拨打正确号码的方法。它是否开源您的应用程序?

标签: java android speech-recognition text-to-speech google-now


【解决方案1】:

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

您可以参考Saiy,之前的Utter

此应用使用热词检测作为“Google Now”。

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

Saiy 应用程序现已通过repository here 开源。从我在代码中看到的一点点来看,它似乎已经使用 CMU Pocketshinx 实现了该功能。

不要忘记发布您的发现。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      使用 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();
        }
      }
      

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

      【讨论】:

      • 如果你使用 Timer scheduleAtFixedRate,它每秒只能运行 1000 次,所以它基本上使用 0% cpu,但如果你真的想,我可以发布一个使用套接字和 InputStream 的代码阻塞,直到 inptStream 可用 - 我使用套接字,因为它使您能够创建多个“waitBlocks”。因此,使用 waitBlock 它可以让您使用更少的 cpu。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-17
      • 1970-01-01
      相关资源
      最近更新 更多