2014-09-22 103 views
1

我正在开发一个Glass应用程序,通过语音执行“下一张卡片”和“上一张卡片”。该应用程序工作得很好,除了从说单词到执行操作的时间超过1秒。这是一个足够长的延迟,它是显而易见的。这并没有像谷歌那样用“ok玻璃”来响应。Google Glass和语音识别器延迟识别结果

最明显的变化似乎是实施: EXTRA_SPEECH_INPUT_MINIMUM_LENGTH_MILLIS 和/或EXTRA_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS 和/或EXTRA_SPEECH_INPUT_POSSIBLY_COMPLETE_SILENCE_LENGTH_MILLIS

但目前没有任何效果。在Android的RecognizerIntent网页上也注意到了所有这三个: “还要注意某些值可能会导致意外或意外的结果 - 谨慎使用!另外,根据识别器的实现,这些值可能没有任何作用。

下面是代码为这是如何实现的主:)

 speechIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
    speechIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
    speechIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, getApplication().getPackageName()); 
    speechIntent.putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS, true); 
    speechIntent.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_MINIMUM_LENGTH_MILLIS, Long.valueOf(100)); 
    speechIntent.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS, Long.valueOf(100)); 
    speechIntent.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_POSSIBLY_COMPLETE_SILENCE_LENGTH_MILLIS, Long.valueOf(100)); 

    speechRecognizer = SpeechRecognizer.createSpeechRecognizer(this); 
    speechRecognizer.setRecognitionListener(this); 

    if (SpeechRecognizer.isRecognitionAvailable(this)) { 
     speechRecognizer.startListening(speechIntent); 

     } 

我试图取代Long.valueOf()与新长(也只有100(我也尝试过的价值500如果由于某种原因100只是小)。 Eclipse的警告建议使用Long.valueOf()。

结果返回onPartialResults,此过程比onResults更有效,因为onResults会等待暂停。由于测试了上述3个附加项目,我的结果反馈给了结果,但没有变化。

关于我在这里失踪的任何想法?如果您需要查看更多代码,请告诉我。 谢谢。

回答

0

对于这样的简短命令,您应该使用contextual voice menu而不是语音识别器来获得更好的结果。

您可以看到当前批准的命令列表here,但在开发过程中,您可以使用任何需要的命令(通过向清单中添加开发权限)。

请务必提交您可能需要的任何新语音命令,如果您希望通过审查过程并在将来启动。

+0

我在应用程序的介绍中实现了一个上下文语音菜单,因为有一个选项菜单,用户可以在应用程序中进行操作,因此非常适合。一旦用户在某个区域中,只需说出“下一个”或“后退”,而不必先说出“OK玻璃”,因为用户将会经历多张卡片,因此效率更高。当你说使用上下文语音菜单“获得更好的效果”时,它只与响应时间有关吗?除了可以理解的电池以外,其他方面似乎工作得很好。感谢您及时的回复。 – JenM 2014-09-22 23:47:19