Стеклянная голосовая команда ближайшего совпадения из данного списка
С помощью Glass вы можете запустить приложение через меню "OK, Glass", и оно, похоже, выберет ближайшее совпадение, если команда не удалена, и вы, очевидно, можете видеть список команд.
В любом случае из приложения или из голосовой подсказки (после первоначального запуска приложения) можно получить аналогичный список и вернуть ближайшее совпадение.
Случайный (нереальный мир) пример, приложение, которое показывает вам цвет: "OK Glass, покажите красный цвет"
"show the color" может быть вашим голосовым триггером, и кажется, что он соответствует стеклу по методу "ближайшего соседа", однако "red" просто читается как свободный текст и может быть легко воспринят как "dread" или "head", или даже "читать", поскольку нет никакого способа отличить "чтение" от "красного".
Есть ли способ передать список предварительно утвержденных параметров (красный, зеленый, синий, оранжевый * и т. Д.) На этот этап или в другую голосовую подсказку в приложении, чтобы пользователь мог видеть список и получать более точные результаты? когда есть конечный набор ожидаемых ответов (как, например, основной ок стекло экрана)?
* хорошо, ничего не рифмуется с апельсином, мы, вероятно, в безопасности
3 ответа
Google GDK пока не поддерживает эту функцию. Однако необходимые функции уже доступны в некоторых библиотеках, и вы можете использовать их, если GDK не поддерживает это изначально. Что ты должен сделать:
Вытащите GlassVoice.apk из вашего стекла:
adb pull /system/app/GlassVoice.apk
Используйте dex2jar, чтобы конвертировать этот apk в файл jar.
Добавьте файл JAR в ваш путь сборки
Теперь вы можете использовать эту библиотеку следующим образом:
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) {
}
}
}
Если вы еще этого не сделали, вам следует взглянуть на контекстные голосовые меню, которые были добавлены всего несколько недель назад в GDK. У меня была точно такая же проблема за день до ее выпуска, я посмотрел на нее на следующий день и обнаружил, что это мне очень помогло!:)
Вы можете воспользоваться шагом устранения неоднозначности, который происходит, когда несколько операций или служб поддерживают одинаковые 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>
Эти действия или службы будут использоваться только в качестве "батута" для запуска основной логики вашего приложения с выбором цвета.