安卓语音识别技术

5

我正在从事语音识别方面的工作,需要一些样例程序。

有人可以指导我吗?

3个回答

12

让我剪切并粘贴一些内容,向您展示您需要的代码。

编辑:您还可以从此项目中下载一个方便的抽象类。

您将需要这个意图(根据您的需要进行参数化):

public Intent getRecognizeIntent(String promptToUse, int maxResultsToReturn)
{
    Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
            RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
    intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, maxResultsToReturn);
    intent.putExtra(RecognizerIntent.EXTRA_PROMPT, promptToUse);
    return intent;
}

那么你需要像这样将你的意图发送到语音识别活动中:

public void gatherSpeech(String prompt)
{
    Intent recognizeIntent = getRecognizeIntent(prompt);
    try
    {
        startActivityForResult(recognizeIntent, SpeechGatherer.VOICE_RECOGNITION_REQUEST_CODE);
    }
    catch (ActivityNotFoundException actNotFound)
    {
        Log.w(D_LOG, "did not find the speech activity, not doing it");
    }
}

然后您需要让您的活动处理语音结果:

protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    Log.d("Speech", "GOT SPEECH RESULT " + resultCode + " req: "
        + requestCode);
    if (requestCode == SpeechGatherer.VOICE_RECOGNITION_REQUEST_CODE)
    {
        if (resultCode == RESULT_OK)
        {
            ArrayList<String> matches = data
                            .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
            Log.d(D_LOG, "matches: ");
            for (String match : matches)
            {
                Log.d(D_LOG, match);
            }
        }
    }
}

1
如何检测标点符号?我尝试了上面的代码,说“?”表示问号,“,”表示逗号,“。”表示句号,但都没有成功。 - Swathi EP
很遗憾,没有办法识别标点符号。 - gregm
Google不会返回标点符号。例如,如果我说“嘿,你在做什么?”,那么Google的解释可能是“嘿,你在做什么”。没有逗号,没有问号。 - Joey
我一直得到0活动,有什么线索吗? - guiomie
@gregm,请问我该如何从那个类中获取我的声音?我的意思是,我想要以mp3格式获取我的声音。 - CompEng
@Ersin 你可能想看一下SpeechRecognizer类及其监听器。我相信你可以访问原始数据。 - gregm


0

首先需要像这样显示Google语音输入对话框

 /**
 * Showing google speech input dialog
 * */
private void promptSpeechInput() {
    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,
            getString(R.string.speech_prompt));
    try {
        startActivityForResult(intent, REQ_CODE_SPEECH_INPUT);
    } catch (ActivityNotFoundException a) {
        Toast.makeText(getApplicationContext(),
                getString(R.string.speech_not_supported),
                Toast.LENGTH_SHORT).show();
    }
}

然后需要进行语音输入,就像这样。

 /**
 * Receiving speech input
 * */
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    switch (requestCode) {
        case REQ_CODE_SPEECH_INPUT: {
            if (resultCode == RESULT_OK && null != data) {

                ArrayList<String> result = data
                        .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
                txtSpeechInput.setText(result.get(0));
            }
            break;
        }

    }
}

需要设置REQ_CODE_SPEECH_INPUT

  private final int REQ_CODE_SPEECH_INPUT = 100;

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