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

Ben*_*Ben 9 android voice-recognition google-glass google-gdk

使用Glass,您可以通过'OK,Glass'菜单启动应用程序,它似乎选择最近的匹配,除非命令是英里关闭,您显然可以看到命令列表.
无论是在应用程序内,还是从语音提示(在初始应用程序触发器之后)都有给出类似的列表并返回最近的匹配.

随机(非现实世界)示例,一个向您显示颜色的应用程序,"OK Glass,显示红色"

"显示颜色"可能是你的声音触发器,并且似乎在"最近邻居"方法上与玻璃匹配,但是"红色"只是作为自由文本读入,并且很容易被误读为"恐惧"或"头部",甚至"读",因为没有办法区分'读'和'红'.

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

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

blu*_*dow 20

Google GDK尚不支持此功能.但是,某些库中已经提供了必要的功能,只要GDK本身不支持这些功能,您就可以使用它们.你要做什么:

  1. 从Glass中拉出GlassVoice.apk: adb pull /system/app/GlassVoice.apk

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

  3. 将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) {

        }
    }

}
Run Code Online (Sandbox Code Playgroud)

  • 我刚刚更新到XE16,它似乎不再起作用了.更新后,我从/system/private-app/GlassVoice.apk中提取了新的apk,使用dex2jar进行转换,并将jar添加到我的构建路径中.在XE12上完全相同的代码.现在看来,VoiceListener在检测到第一个VoiceCommand之后从未捕获任何VoiceCommand.@blueshadow你知道为什么会这样,以及如何解决它? (2认同)
  • 现在的位置似乎是/ system/priv-app (2认同)

Ala*_*ain 5

您可以利用多个"活动"或"服务"支持相同的消歧步骤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>
Run Code Online (Sandbox Code Playgroud)

这些活动或服务仅用作"蹦床",以通过颜色选择启动应用程序的主要逻辑.


小智 5

如果您还没有,那么您应该看看几周前添加到GDK的上下文语音菜单.就在发布前一天我遇到了同样的问题,第二天看着它,发现这对我帮助很大!:)