玻璃语音命令从给定列表最接近匹配

使用Glass,您可以通过“OK,Glass”菜单启动应用程序,似乎可以select最接近的匹配项,除非命令在几英里之外,您可以很清楚地看到命令列表。
无论如何,从应用程序中,或从语音提示(在最初的应用程序触发器之后)有一个类似的列表,并返回最近的匹配。

随机(非现实世界)的例子,一个应用程序,显示你的颜色,“确定玻璃,显示红色的颜色”

“显示颜色”可能是你的语音触发,似乎是用“最近邻居”方法上的玻璃来匹配的,然而,“红色”只是作为自由文本阅读,很容易被误认为是“恐惧”或“头脑”甚至“读”,因为没有办法区分“读”和“红”。

有没有办法将预先批准的选项(红色,绿色,蓝色,橙色*等)列表传递到这个阶段,或在应用程序内传递给另一个语音提示,以便用户可以看到列表并获得更准确的结果当有一组预期的响应(如主要的确定玻璃屏幕)?

*好吧,没有橙色押韵,我们可能在那里安全

Google GDK尚不支持此function。 但是,某些库中已经有了必要的function,只要GDK本身不支持,就可以使用它们。 你必须做什么:

  1. 从Glass中adb pull /system/app/GlassVoice.apkadb pull /system/app/GlassVoice.apk

  2. 使用dex2jar将此apk转换成jar文件。

  3. 将jar文件添加到您的构buildpath

现在你可以像这样使用这个库了:

 public class VoiceActivity extends Activity { private VoiceInputHelper mVoiceInputHelper; private VoiceConfig mVoiceConfig; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.voice_activity); String[] items = {"red", "green", "blue", "orange"}; mVoiceConfig = new VoiceConfig("MyVoiceConfig", items); mVoiceInputHelper = new VoiceInputHelper(this, new MyVoiceListener(mVoiceConfig), VoiceInputHelper.newUserActivityObserver(this)); } @Override protected void onResume() { super.onResume(); mVoiceInputHelper.addVoiceServiceListener(); } @Override protected void onPause() { super.onPause(); mVoiceInputHelper.removeVoiceServiceListener(); } public class MyVoiceListener implements VoiceListener { protected final VoiceConfig voiceConfig; public MyVoiceListener(VoiceConfig voiceConfig) { this.voiceConfig = voiceConfig; } @Override public void onVoiceServiceConnected() { mVoiceInputHelper.setVoiceConfig(mVoiceConfig, false); } @Override public void onVoiceServiceDisconnected() { } @Override public VoiceConfig onVoiceCommand(VoiceCommand vc) { String recognizedStr = vc.getLiteral(); Log.i("VoiceActivity", "Recognized text: "+recognizedStr); return voiceConfig; } @Override public FormattingLogger getLogger() { return FormattingLoggers.getContextLogger(); } @Override public boolean isRunning() { return true; } @Override public boolean onResampledAudioData(byte[] arg0, int arg1, int arg2) { return false; } @Override public boolean onVoiceAmplitudeChanged(double arg0) { return false; } @Override public void onVoiceConfigChanged(VoiceConfig arg0, boolean arg1) { } } } 

您可以利用在多个活动或服务支持相同的Voice Trigger时发生的消歧步骤:只需在应用程序支持中将多个活动或服务作为语音触发器"show me the color" ,并使用颜色选项标记即可。

你的清单看起来像这样:

 <application android:allowBackup="true" android:label="@string/app_name" android:icon="@drawable/icon_50" > <activity android:name="com.mycompany.RedActivity" android:label="@string/red" android:icon="@drawable/icon_red" > <intent-filter> <action android:name="com.google.android.glass.action.VOICE_TRIGGER"/> </intent-filter> <meta-data android:name="com.google.android.glass.VoiceTrigger" android:resource="@xml/activity_start" /> </activity> <activity android:name="com.mycompany.BlueActivity" android:label="@string/blue" android:icon="@drawable/icon_blue" > <intent-filter> <action android:name="com.google.android.glass.action.VOICE_TRIGGER"/> </intent-filter> <meta-data android:name="com.google.android.glass.VoiceTrigger" android:resource="@xml/activity_start" /> </activity> <!-- ... --> </application> 

这些活动或服务只会被用作“蹦床”,用颜色select启动应用程序的主要逻辑。

如果还没有的话,你应该看几周前刚刚添加到GDK 上下文语音菜单 。 在发布前一天,我遇到了同样的问题,第二天看到它,发现这对我有很大帮助! 🙂