Не удается использовать длинные входы в Android для распознавания речи, ошибка при инициализации? - PullRequest
0 голосов
/ 03 сентября 2018

Я пытаюсь использовать Google Speech Recognition внутри моего приложения (лаунчер). Когда я пытаюсь использовать его для коротких команд, таких как Вызов X или произнесение короткого номера, такого как 123456789 , все работает нормально, но как только я пытаюсь дать более длинный ввод (который требует больше времени, чтобы сказать) На экране висит действие по распознаванию речи, и оно ничего не делает.

Мне не удалось найти ничего полезного в журналах, и я не знаю, делаю ли я что-то не так при инициализации распознавания речи.

Вот когда я его инициализирую:

var intent = new Intent(RecognizerIntent.ActionRecognizeSpeech);

intent.PutExtra(RecognizerIntent.ExtraLanguageModel, RecognizerIntent.LanguageModelFreeForm);
StartActivityForResult(intent, SpeechResult);

И вот где я использую результат

protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
        {
            base.OnActivityResult(requestCode, resultCode, data);


            if (requestCode == SpeechResult && data != null)
            {

                var text = data.GetStringArrayListExtra(RecognizerIntent.ExtraResults);


                getterForNumber = text[0];
                getterForNumber = getterForNumber.Replace(" ", String.Empty);

                bool inInt = getterForNumber.All(char.IsDigit);

                if (!inInt)
                {
                    var activity2 = new Intent(this, typeof(fittizioAct));
                    activity2.PutExtra("fittizioData", "Cannot Recognise the Number");
                    activity2.PutExtra("direzione", "vocale");
                    StartActivity(activity2);
                    Finish();
                }
                else
                {
                    var passNameAndNumberRubr = new Intent(this, typeof(VocalSavedAct));
                    passNameAndNumberRubr.PutExtra("saveNumberRubr", getterForNumber);
                    passNameAndNumberRubr.PutExtra("saveNameRubr", getterForName);

                    //sqldbRubrica.AddRecord(getterForName, getterForNumber);

                    StartActivity(passNameAndNumberRubr);
                    Finish();
                }




            }
            else if (requestCode == SpeechResult && data == null)
            {
                AudioManager vol = (AudioManager)this.GetSystemService(Context.AudioService);
                int volume = vol.GetStreamVolume(Android.Media.Stream.Music);
                CrossTextToSpeech.Current.Speak("Voice Command Canceled",
                pitch: 1,
                speakRate: speed,
                volume: (float)volume,
                crossLocale: locale);
            }
}

P.S. Код написан на C #, потому что я использую Xamarin.

1 Ответ

0 голосов
/ 03 сентября 2018

Попробуйте изменить инициат, как это

var voiceIntent = new Intent(RecognizerIntent.ActionRecognizeSpeech);
            voiceIntent.PutExtra(RecognizerIntent.ExtraLanguageModel, RecognizerIntent.LanguageModelFreeForm);


            voiceIntent.PutExtra(RecognizerIntent.ExtraPrompt, "Speak now");

            voiceIntent.PutExtra(RecognizerIntent.ExtraSpeechInputCompleteSilenceLengthMillis, 1500);
            voiceIntent.PutExtra(RecognizerIntent.ExtraSpeechInputPossiblyCompleteSilenceLengthMillis, 1500);
            voiceIntent.PutExtra(RecognizerIntent.ExtraSpeechInputMinimumLengthMillis, 15000);
            voiceIntent.PutExtra(RecognizerIntent.ExtraMaxResults, 1);
            voiceIntent.PutExtra(RecognizerIntent.ExtraLanguage, Java.Util.Locale.Default);
...