Android распознавание речи изменить язык возврата - PullRequest
2 голосов
/ 10 октября 2019

Я работаю над приложением для Android, которое принимает голосовой ввод и устанавливает текст результата в TextView. Хотя язык распознаваемой речи не является английским, в результате текст, который приложение предоставляет, является английским. Проще говоря, цель распознавания речи, которую я создаю, выглядит следующим образом:

Locale locale = new Locale.Builder().setLanguage("bn").setScript("Beng").setRegion("BD").build();
intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
                RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE,locale);
intent.putExtra(RecognizerIntent.EXTRA_SUPPORTED_LANGUAGES,locale);
intent.putExtra(RecognizerIntent.EXTRA_ONLY_RETURN_LANGUAGE_PREFERENCE,locale);

А метод RecognitionListener onResult() выглядит следующим образом:

public void onResults(Bundle results) {
    ArrayList<String> voiceResults = results
            .getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
    if (voiceResults == null) {
        text = "";
        Log.e("Listener","No voice results");
    } else {
        text = voiceResults.get(0);
        display.setText(text);
    }
}

Я хочуresults.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION) для возврата ArrayList, состоящего из бенгальских букв.

Ожидаемое поведение:

want image like this

Токовый выход:

wrong display image

1 Ответ

1 голос
/ 10 октября 2019

Используйте следующий метод для достижения желаемого результата, установите bn-BD:

 private void getAudioInput() {
        Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
        intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
        intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "bn-BD");
        intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "I am Listening...");
        try {
            startActivityForResult(intent, REQ_CODE_SPEECH_INPUT);
        } catch (ActivityNotFoundException ignored) {

        }
    }

Затем используйте onActivityResult(), чтобы получить результат, используя тот же код запроса, который вы использовали в startActivityForResult() с таким намерением:

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQ_CODE_SPEECH_INPUT) {
            if (resultCode == RESULT_OK && null != data) {
                ArrayList<String> result = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
                if (result != null) {
                    bangla_text = result.get(0);
                    textOutput.setText(bangla_text);
                }
            }
        }
    }
...