Непрерывное распознавание речи в Android: предотвращение конца - PullRequest
0 голосов
/ 12 января 2019

Как вы записываете и транскрибируете непрерывную речь на Android?

Хотите записывать и транскрибировать речь в Android для мобильного (cordova) приложения. Как можно заставить Android API для распознавания речи НЕ останавливать запись, когда он думает, что речь сделана? Попробовал установить все параметры. Параметры, которые, по-видимому, гарантируют непрерывное распознавание (см. Ниже), похоже, не работают, даже когда они используются в целом ряде значений / комбинаций. Независимо от того, какие значения мы пытались передать, алгоритм распознавания речи останавливается и возвращается примерно через 1-2 секунды тишины. Некоторые из используемых в настоящее время параметров установлены ниже. С этими параметрами распознавание речи прекращается через 1-2 секунды тишины. Раскомментирование другого параметра не решает эту проблему. Точно так же попытка включения / выключения DICTATION_MODE не работает, и использование частичных результатов вкл / выкл также не решает проблему (так как распознавание все еще заканчивается). Изменение длин параметров MILLIS также пока не дало положительного результата.

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

Вот текущий код Cordova, взятый из одного из нескольких плагинов Cordova.

    private void startRecognition() {

        final Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
        intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
        intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,"voice.recognition.test");
        intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE,lang);
        intent.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS, "12000");
//        intent.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_POSSIBLY_COMPLETE_SILENCE_LENGTH_MILLIS, "12000");
        intent.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_MINIMUM_LENGTH_MILLIS, "12000");
        intent.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_MINIMUM_LENGTH_MILLIS, "12000");
        intent.putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS, false);
        intent.putExtra("android.speech.extra.DICTATION_MODE", true);

        intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS,5);

        Handler loopHandler = new Handler(Looper.getMainLooper());
        loopHandler.post(new Runnable() {

            @Override
            public void run() {
                recognizer.startListening(intent);
            }

        });

        PluginResult res = new PluginResult(PluginResult.Status.NO_RESULT);
        res.setKeepCallback(true);
        this.speechRecognizerCallbackContext.sendPluginResult(res);
    }
...