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

开发类似于“Google now”的应用程序——是否可以在没有按键输入的情况下使用语音识别?

相洛华
2023-03-14

我正在尝试开发一个很酷的应用程序,它使用TTS引擎和语音识别。到目前为止还可以,但我想要更多。我想创建一个服务(我认为服务是正确的方式),它总是“倾听”,当有人说“ok google”或其他什么时,语音识别就会启动,就像google now一样。例如,如果你说“ok google”google现在启动。我不知道从哪里开始,所以我直接在这里问是否可能。我试着看这个帖子(在这里)(一直在听关键字,比如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);
}

您认为可以只使用语音而不按任何按钮启动Listenent吗?这就是我的意思。

共有3个答案

昌琪
2023-03-14

用Jform,而不是android,你创建一个按钮,你可以调用button.doClick()。所以我用的是一个Timer,Timer.scheduleAtFixedRate(新任务(),int延迟,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();
  }
}

抱歉,使用平板电脑时出现了格式或缩进。

潘自强
2023-03-14

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

邢洋
2023-03-14

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

你可以参考Saiy,之前的Utter

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

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

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

别忘了公布你的调查结果。

注意-在后台一直听音乐需要占用大量CPU和电池。

 类似资料:
  • 是否可以在没有实体的情况下使用JpaRepository?在这种情况下,将其替换为DTO。 如下示例所示 这种情况有替代方案吗? 注意:DTO已经映射,但我不想创建视图来将此DTO转换为实体。 我已经验证了这个主题,但没有重大进展,请使用无实体的JpaRepository交互样式 我在试这个 接口- 公共接口BffDTOInterface2{ } 我有这个错误

  • 我想使用并使其直接进入给定的url,而不是从ribbon配置中获取主机。 我知道在Spring,cloud-feign默认与ribbon和eureka一起出现。 根据这个:https://cloud.spring.io/spring-cloud-netflix/multi/multi_spring-cloud-ribbon.html#spring-cloud-ribbon-without-eure

  • 问题内容: 有关一些背景知识和参考,以下是一些Heroku文档页面的一些报价。 从Heroku Node.js支持>激活中: 当应用程序的根目录中有文件时,将使用Heroku Node.js buildpack 。 从Heroku Node.js支持>默认Web进程类型: 首先,Heroku寻找一个Procfile来指定您的进程类型。 如果在构建过程中应用程序的根目录中没有任何内容,则将通过运行[

  • 我已经从源代码处构建并安装了另一个glibc,并且我想让现有的用C++编写的可执行文件与自定义glibc一起运行,以供实验之用。为了做到这一点,我尝试更改可执行文件的加载程序。首先,在/lib64下创建了一个名为的链接,其路径指向新的加载程序 其次,通过文本编辑器修改了可执行文件中的加载器路径,将“/lib64/ld-linux-x86-64.so.2”更改为“/lib64/ld_linux-x8

  • 在Spring Boot的文档中,我只找到了使用Redis会话的例子,不使用Redis也能使用它吗?

  • 我在网站上做了一个小研究,并在这个网站上回顾了相关主题,但答案是矛盾的:有人说这是不可能的,有人说这是可能的,但很危险。 目标是传递匿名类的对象作为RMI方法的参数。由于RMI要求,这个类必须是可序列化的。这里没有问题,很容易使类序列化。 但是我们知道内部类的实例包含对外部类的引用(匿名类是内部类)。因此,当我们序列化内部类的实例时,外部类的实例也被序列化为一个字段。问题来了:外部类是不可序列化的