【问题标题】:Cannot use long inputs in Android Speech Recognition, error while initializing?无法在 Android 语音识别中使用长输入,初始化时出错?
【发布时间】:2018-09-03 22:05:59
【问题描述】:

我正在尝试在我的应用程序(启动器)中使用 Google 语音识别。当我尝试将它用于 Call to 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);
            }
}

附:代码在 C# 中,因为我使用的是 Xamarin。

【问题讨论】:

    标签: android xamarin.android speech-recognition google-speech-api


    【解决方案1】:

    尝试像这样修改初始化

    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);
    

    【讨论】:

    • 现在无法测试,但您能解释一下为什么这个解决方案应该有效吗?谢谢
    • 只是盲目测试了这个方案,并没有解决问题
    • @BenDelGreco 那是我工作代码的片段。它工作得非常好。你从哪个线程调用这个?你有稳定的互联网连接吗?
    • 你也可以在 onActivity 结果中放置一个断点,看看它是否命中了那个方法,然后应用程序挂起或者它是什么不同的东西?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多