【问题标题】:Adding Android Voice Recognition to an existing App将 Android 语音识别添加到现有应用程序
【发布时间】:2015-03-04 21:15:31
【问题描述】:

我有一个可以工作的应用程序,我想添加语音命令。当前应用程序定期(定时器)通过蓝牙来回传输数据。用户可以按 Buttons 和 NumberPickers 来修改通过蓝牙发送的数据。还有从蓝牙链接接收的数据,并显示在 textViews 中。此应用程序当前运行正常。

我想做的是添加语音命令功能,以便用户可以选择按下按钮/数字选择器,或者可以仅使用语音命令更改值。

我已经测试了一些可以在各种网站上找到的 Speech-to-Text 示例。我已经成功测试了一个使用 RecognizerIntent 的应用程序。按下按钮后,会弹出一个对话框,您可以说出单词或短语,并在屏幕上正确显示结果。

所以,我认为我已经接近了,但我不确定如何将 Speech-to-Text 与我当前的蓝牙应用程序结合起来。我不希望用户必须按下按钮,我只想让应用程序不断地收听。另外,我不想在屏幕上弹出语音对话框。

我的硬件是运行 Android 4.1 的三星平板电脑。

我对 Android 编程比较陌生,因此我很感激任何建议(无论多么基础)。谢谢。

【问题讨论】:

    标签: android background speech-recognition


    【解决方案1】:

    要防止屏幕上弹出语音对话框,可以使用ACTION_RECOGNIZE_SPEECHintent:

    private static int SR_CODE = 123;
    
    
    /**
         * Initializes the speech recognizer and starts listening to the user input
         */
        private void listen()  {
            Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
            //Specify language
            intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.ENGLISH)
            // Specify language model
            intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
            // Specify how many results to receive
            intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 5);
            // Start listening
            startActivityForResult(intent, SR_CODE);
        }
    
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            if (requestCode == SR_CODE && resultCode == RESULT_OK)  {
                    if(data!=null) {
                    //Retrieves the best list SR result
                    ArrayList<String> nBestList = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
                   String bestResult = nBestList.get(0);
                   Toast.makeText(getApplicationContext(), bestResult, Toast.LENGTH_LONG).show;              
                }else {         
                    //Reports error in recognition error in log
                    Log.e(LOGTAG, "Recognition was not successful");
                }
    
        }
    

    关于另一个问题,“我不希望用户必须按下按钮,我只是希望 App 一直在听”:

    我建议使用CMUSphinx 连续识别语音。要使用 google 语音识别 api 实现连续语音识别,您可能不得不求助于后台服务中的循环,这将占用过多资源并耗尽设备电池。

    另一方面,Pocketsphinx 确实很棒。它的速度足以在用户无需触摸设备的情况下发现关键短语并识别锁定屏幕后面的语音命令。它离线完成所有这些工作。 你可以试试demo

    如果你真的想像我上面演示的那样使用谷歌的 api,see this

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-30
      • 2014-04-12
      • 1970-01-01
      • 1970-01-01
      • 2021-12-15
      相关资源
      最近更新 更多