当前位置: 首页 > 知识库问答 >
问题:

如何在我的Android应用程序中添加继续语音识别?

谭成业
2023-03-14

我正在尝试在我的Android应用程序中实现继续语音识别。我已经遵循了这个链接编码。这个继续语音识别在两天前工作。但是现在语音识别工作不好,它将需要更多的时间进行语音监听。如何解决这个问题。请指导我。谢谢

识别编码:

// starts the service
    protected void startListening() {
        try {
            initSpeech();
            Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
            //intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH);
            intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "en-US");
             if (!intent.hasExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE))
            {
                intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,
                        "com.dummy");
            }
            sr.startListening(intent);
        } catch(Exception ex) {
            Log.d("SpeechRecognitionService", "Bei der Initialisierung des SpeechRecognizers ist ein Fehler aufgetreten");
        }
    }

    // stops the service
    protected void stopListening() {
        if (sr != null) {
            sr.stopListening();
            sr.cancel();
            sr.destroy();
        }
        sr = null;
    }

    protected void initSpeech() {
        if (sr == null) {
            sr = SpeechRecognizer.createSpeechRecognizer(this);
            if (!SpeechRecognizer.isRecognitionAvailable(context)) {
                Toast.makeText(context, "Speech Recognition is not available",
                        Toast.LENGTH_LONG).show();
                finish();
            }
            sr.setRecognitionListener(VoiceRecognitionListener.getInstance());
        }
    }

用户开始说话

public void onBeginningOfSpeech() {
            System.out.println("Starting to listen");
        }

        public void onBufferReceived(byte[] buffer) { }

        // User finished speaking
        public void onEndOfSpeech() {
            System.out.println("Waiting for result...");
        }

共有1个答案

龙高歌
2023-03-14

我找到了减少说话和收到结果之间时间的解决方案

请求部分结果,因为这些结果在全部结果之前交付。

我用了这些额外的东西:-

mRecognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
mRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, Locale.getDefault().getLanguage().trim());
mRecognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, this.getPackageName());
mRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
mRecognizerIntent.putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS, true);
mRecognizerIntent.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS, 100);

mRecognizerIntent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 3);

mSongSpeechRecognitionListener = new SongSpeechRecognitionListener(mRippleBackground, mFloatingActionButton);

mSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(this);
mSpeechRecognizer.setRecognitionListener(mSongSpeechRecognitionListener);

然后在部分结果中

public void onPartialResults(final Bundle partialResults) {
    Log.i(LOG_TAG, "onPartialResults()");

    final List<String> partialResultList = partialResults.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);

for (final String result : partialResultList) {

    if (result.isEmpty()) {
    } else {
        mPartialResults++;
        if (mPartialResults == mPartialResultsMAX) {
            Log.i(LOG_TAG, "onPartialResults() EXECUTE");
            mFloatingActionButton.setEnabled(true);
            mAsyncTask.execute(result);
                break;
            }
        }
    }
}

我将mPartialResultsMAX设置为2,因为第一个部分结果似乎只有一个单词

当您收到部分结果时,可能需要取消语音识别器。

 类似资料:
  • 我想在我的Android应用程序中添加一个语音界面。两个要求: > 我只需要在任何时候从一个小字典中识别单词——基本上是屏幕上的任何可点击元素,并且大多数可点击元素已经有文本,所以从字面上看就是“说你看到的”。 在应用程序可见的情况下进行连续语音识别,尽管我可以忍受在演讲之前说“Ok app”。 实现这一点的最佳方式是什么? 谢谢NickB

  • 我想在我的应用程序中使用脱机语音识别。设置- 嗯,这里我通过语音向相机发送意图。所以,我对词汇量的要求有限。

  • 我有一个工作应用程序,我想添加语音命令。当前应用程序定期(定时器)通过蓝牙来回传输数据。用户可以按按钮和NumberPickers来修改通过蓝牙发送的数据。还有从蓝牙链接接收到的数据,并显示在文本视图中。此应用程序目前工作正常。 我想做的是添加语音命令功能,以便用户可以选择按下按钮/数字选择器,或者可以仅使用语音命令更改值。 我测试了一些可以在各种网站上找到的从语音到文本的例子。我成功地测试了一个

  • 我正在考虑做一个语音屏幕锁/解锁Android应用程序,作为我的最后一个毕业设计,我遇到了一些问题,当一个按下锁按钮时,我如何打开麦克风,这样它就可以一直听下去,直到密码说出来。 我已经搜索了它,但我只找到了使用RecognizerIntent和其他类Google Speech API的技术。 我需要知道当锁定屏幕显示时,我如何开始收听麦克风,这样我就可以捕捉音频流。不允许我使用任何api,没有谷

  • 我正在从事一个关于“家庭自动化”系统的项目,该系统使用Android应用程序和微控制器,通过蓝牙模块将它们连接起来。我已经将“语音到文本”合并到语音命令中。尽管如此,它与内置的谷歌语音识别api配合得很好。我所需要的只是一个连续的语音识别,而不需要谷歌语音弹出窗口。我在playstore“speechnotes”上看到了一个类似的应用程序,这正是我想要开发的。它完全离线工作。

  • 我制作了一个简单的Android应用程序,其中有一个登录活动和一个片段(BottomSheetDialogFragment)。我正试图通过片段(有多个按钮)向主活动(登录活动)添加多种语言,但它在代码下面不起作用。有人能帮我吗? 登录活动 碎片 登录活动片段