Распознавание голоса Android Все результаты в одном индексе массива

Я пытаюсь проанализировать результаты действия по распознаванию голоса Android и обнаружил, что все слова (разделенные пробелом) находятся в первом индексе массива.

Я ожидал, что он поместит все слова в каждый индекс массива.

private void startVoiceRecognitionActivity() 
{
    Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);

    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
        RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);

    long wait = 10000;
    intent.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_MINIMUM_LENGTH_MILLIS, wait);

    intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speak Now");
    startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);
}

/**
 * Handle the results from the recognition activity.
 */
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK) 
    {
        // Fill the list view with the strings the recognizer thought it could have heard
        ArrayList<String> matches = data.getStringArrayListExtra(
            RecognizerIntent.EXTRA_RESULTS);
        /*mList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,
                    matches)); */

        //start intent after we get list of items
        mListIntent = new Intent();
        mListIntent.setClassName(Consts.CLASS_PATH,
        ActivityUtil.getInstance().getClassName()); //get class name based
        //on current activity

        //now set array 'matches' from above and send to next activity...
        Bundle bundle = new Bundle();
        bundle.putStringArrayList(Consts.BUNDLE_KEY_VOICE_LIST, matches);
        mListIntent.putExtras(bundle);

        startActivity(mListIntent);

        //TODO: also how do we add to google dictionary?

    }

    super.onActivityResult(requestCode, resultCode, data);
}

person Mike6679    schedule 02.06.2011    source источник


Ответы (3)


У вас есть дополнительная цитата в этой строке:

intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speak Now" ");

Просто удалите его.
Это может сработать.

person Sudarshan Bhat    schedule 14.11.2011

Только что нашел это сейчас. Если кто-то еще обнаружит это, проблема не в дополнительной речевой метке (хотя это остановит компиляцию кода).

Проблема заключается в понимании пользователем того, что возвращается в совпадениях (RecognizerIntent.EXTRA_RESULTS). В этом массиве нет одной записи для каждого слова, в нем есть одна запись для каждого совпадения, которое распознаватель речи имеет для того, что, по его мнению, вы могли сказать.

Например. если вы скажете «Я написал о переполнении стека», массив может быть:

["I wrote on stack overflow",
 "I boat a stack over flow",
 "Ire oh ton stack over flow"]

Если вы хотите получить массив слов, я бы предложил взять первую строку соответствия и разбить ее на все пробелы.

person hcarver    schedule 25.08.2012

Я дал рабочий код, который вы можете просто скопировать и вставить, и все готово. здесь

person AndroidGeek    schedule 29.05.2014