安卓离线语音识别

6

我在StackOverFlow上搜索了很多关于这个问题的帖子,但是这些帖子都超过三年了。

我实现了需要互联网连接的Google语音识别。搜索如何使用离线语音识别没有成功。

现在是否可以在离线状态下使用语音识别

我的代码如下:

speechStartButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            promtSpeechInput();
        }
    });

private void promtSpeechInput() {
    Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
            RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault());
    intent.putExtra(RecognizerIntent.EXTRA_PROMPT,
            "Recording...");
    try {
        startActivityForResult(intent, REQ_CODE_SPEECH_INPUT);
    } catch (ActivityNotFoundException e) {
        Toast.makeText(getApplicationContext(), "Language not supported", Toast.LENGTH_SHORT).show();
    }
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
        case CAMERA_PIC_REQUEST: {
            try {
                Bitmap image = (Bitmap) data.getExtras().get("data");
                ImageView imageView = (ImageView) findViewById(R.id.taskPhotoImage);
                imageView.setImageBitmap(image);

            } catch (NullPointerException e) {
                e.printStackTrace();
            }
        }
        case REQ_CODE_SPEECH_INPUT: {
         if(resultCode == RESULT_OK && null != data) {
             ArrayList<String> result = data
                     .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
             speechToTextField.setText(speechToTextField.getText()+" " +result.get(0));
         }
            break;
        }
    }
}

祝好!

2个回答

7

谢谢你的信息!是不是sourceforge宕机了? - korunos
网站侧面,似乎是 sourceforge.net/projects/cmusphinx/?source=directory。 - Will Bobo
1
这个库不准确 :( - Sam

5

实际上,您可以离线使用语音识别器。

  • 进入“设置” ->“语言和输入”
  • 从“键盘和输入方法”部分选择键盘并启用“Google语音输入”
  • 返回上一个屏幕“语言和输入”,您将看到“Google语音输入”已启用。
  • 点击“离线语音识别”。
  • 下载语言。
  • 现在您应该能够离线使用语音转文本功能。

这样做的问题是,如果不使用循环,它就不是连续的,并且使用SpeechRecognizer循环会发出持续的哔哔声。有一些方法可以解决哔哔声的问题,但其中大多数会静音哔哔声及其所在的同一音频流中的所有内容。

如步骤中所述,您还必须下载“Google语音输入”和相应的语言,这将占用更多存储空间。总的来说,您可以离线使用语音识别器,但这是一个很大的麻烦。


1
有没有一种简单的方法来检查离线引擎是否可用。我知道有 RecognizerIntent.EXTRA_PREFER_OFFLINE 选项可以仅使用离线语音识别引擎,但如果不可用,我想回退到在线模式。尽管命名暗示了它会回退,但它似乎并没有回退。 - Scott Morrison

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接