【问题标题】:Constantly-on speech recognition listening for just one keyword只听一个关键字的持续语音识别
【发布时间】:2017-06-09 20:26:54
【问题描述】:

我尝试使用 Android 包含的 android.speech.SpeechRecognizer 类对此进行编码,但没有成功。

基本上,我想做的是让我的应用程序不断地监听一个关键字,只要识别出这个关键字就会触发一个意图。 我知道这会消耗大量电池。

例如 - 你正在和一个人交谈。正常对话。手机会主动倾听和识别每一个说的单词并倾听关键字。

假设在这种情况下关键字是“奶酪”。

每当您说“奶酪”时,应用程序就会触发启动应用程序另一部分的意图。

我曾尝试将语音识别作为一项服务使用,但事情并没有真正按计划进行。也许我做错了,我不知道。

我已经连续 2 天尝试完成此任务,总共工作时间超过 24 小时。如果我过于宽泛或违反了 SO 的任何规则,我真诚地道歉并要求删除我的问题。

我的问题是 - 这怎么可能?当然,android 本身包含的 SpeechRecognition 会是首选,但它肯定会很麻烦,因为它甚至不是为长时间工作而设计的。

【问题讨论】:

  • 考虑 CMUSphinx,但实际上最佳解决方案取决于您未提供的详细信息。例如,它应该是任意词还是某个预定义的词。您是否想让用户记录单词以进行识别,或者您想要一些预定义的关键词或随机关键词用户类型。您需要支持哪些语言。
  • 这将是一个预定义的单词。我认为记录单词并使用记录的文件检查输入并不是那么准确。我需要它是正确的。仅限英文。

标签: android speech-recognition


【解决方案1】:

根据我的研究,没有办法使用标准的谷歌语音识别服务器来做到这一点。它们的工作方式是一旦声音/单词被识别,识别器就会返回一个它认为它听到的内容的列表以及相关的置信度分数。

按照你的要求做,你会:

  1. 必须在每次触发识别事件时重新激活识别服务,直到它与您想要的单词匹配。

  2. 您的应用程序必须“保持唤醒”识别服务。您可以通过创建一个定期唤醒您的手机并恢复服务/活动的服务来做到这一点。

考虑到持续开启语音识别服务确实会缩短电池寿命,我不会推荐这两种选择。

【讨论】:

  • 但是还有什么其他可能的选择呢?我研究了其他可能的语音识别 API,但无济于事。
  • 我见过的大多数应用程序(包括我的一个)都依赖用户手动启动语音识别器,或者在我的情况下,作为对语音合成器的响应。例如,点击这里说点什么,或者“你想说点什么吗?”。
  • Google 搜索是如何做到的呢?它不断地监听“OK Google”
  • 你仍然需要做手势(向上滑动)。这将启动语音识别。 AFAIK,它不是连续的。
  • AFAIK,非接触式控制目前仅适用于部分配备 KitKat 或更高版本的摩托罗拉手机。据我了解,这是因为这些手机有额外的电路/芯片组/硬件支持,可以持续收听语音命令。
【解决方案2】:

很遗憾,我认为没有任何原生 Android API 可以完全满足您的需求。我建议查看pocketsphinx。 它是来自 CMU 的一个非常强大的独立于说话者的语音识别 API,更适用于此类任务。您还可以查看入门教程here

【讨论】:

  • pocketsphinx 库不对 android 负责。它没有将明确的词捕获为“OK Google”。还有其他图书馆吗?
【解决方案3】:

Google 尚未公开对“OK GOOGLE”的 API 支持,而是让供应商更改或将支持传递给消费者。 我认为此时最好的选择是自己构建源代码,然后调用 API。作为下面的示例,谷歌库具有实现识别器的低级细节。我不确定为什么谷歌不公开它。 我没有看到一种简单的方法来实现和测试它。

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.3_r2.1/android/speech/srec/Recognizer.java

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    • 2012-07-15
    • 1970-01-01
    • 2023-04-06
    • 2011-03-10
    相关资源
    最近更新 更多