示例#1
0
        public void RecogniseIntent(Action <IntentRecognitionResult> handler)
        {
            var result = recognizer.RecognizeOnceAsync().Result;

            switch (result.Reason)
            {
            case ResultReason.RecognizedIntent:

                Logger.OnIntentRecognised(result);

                handler(result);

                break;

            case ResultReason.RecognizedSpeech:

                Logger.OnSpeechRecognised(result);

                break;

            case ResultReason.NoMatch:
                Logger.OnSpeechUnrecognised();

                var d = NoMatchDetails.FromResult(result);

                Console.WriteLine(d.Reason);

                break;

            default:
                Logger.OnSpeechUnrecognised();

                break;
            }
        }
示例#2
0
        private async Task <LuisResult> RecognizeSpeechWithIntentRecognizerAsync(string speechFile)
        {
            var speechConfig = SpeechConfig.FromEndpoint(this.LuisConfiguration.SpeechEndpoint, this.LuisConfiguration.EndpointKey);

            using (var audioInput = AudioConfig.FromWavFileInput(speechFile))
                using (var recognizer = new IntentRecognizer(speechConfig, audioInput))
                {
                    // Add intents to intent recognizer
                    var model = LanguageUnderstandingModel.FromAppId(this.LuisConfiguration.AppId);
                    recognizer.AddIntent(model, "None", "None");
                    var result = await recognizer.RecognizeOnceAsync().ConfigureAwait(false);

                    // Checks result.
                    // For some reason RecognizeOnceAsync always return ResultReason.RecognizedSpeech
                    // when intent is recognized. It's because we don't add all possible intents (note that this IS intentional)
                    // in code via AddIntent method.
                    if (result.Reason == ResultReason.RecognizedSpeech || result.Reason == ResultReason.RecognizedIntent)
                    {
                        var content = result.Properties.GetProperty(PropertyId.LanguageUnderstandingServiceResponse_JsonResult);
                        return(JsonConvert.DeserializeObject <LuisResult>(content));
                    }
                    else if (result.Reason == ResultReason.NoMatch)
                    {
                        Logger.LogWarning("Received 'NoMatch' result from Cognitive Services.");
                        return(null);
                    }
                    else
                    {
                        throw new InvalidOperationException($"Failed to get speech recognition result. Reason = '{result.Reason}'");
                    }
                }
        }
        // Intent recognition using microphone.
        public static async Task RecognitionWithMicrophoneAsync()
        {
            // <intentRecognitionWithMicrophone>
            // Creates an instance of a speech config with specified subscription key
            // and service region. Note that in contrast to other services supported by
            // the Cognitive Services Speech SDK, the Language Understanding service
            // requires a specific subscription key from https://www.luis.ai/.
            // The Language Understanding service calls the required key 'endpoint key'.
            // Once you've obtained it, replace with below with your own Language Understanding subscription key
            // and service region (e.g., "westus").
            // The default language is "en-us".
            var config = SpeechConfig.FromSubscription("YourLanguageUnderstandingSubscriptionKey", "YourLanguageUnderstandingServiceRegion");

            // Creates an intent recognizer using microphone as audio input.
            using (var recognizer = new IntentRecognizer(config))
            {
                // Creates a Language Understanding model using the app id, and adds specific intents from your model
                var model = LanguageUnderstandingModel.FromAppId("YourLanguageUnderstandingAppId");
                recognizer.AddIntent(model, "YourLanguageUnderstandingIntentName1", "id1");
                recognizer.AddIntent(model, "YourLanguageUnderstandingIntentName2", "id2");
                recognizer.AddIntent(model, "YourLanguageUnderstandingIntentName3", "any-IntentId-here");

                // Starts recognizing.
                Console.WriteLine("Say something...");

                // Performs recognition. RecognizeOnceAsync() returns when the first utterance has been recognized,
                // so it is suitable only for single shot recognition like command or query. For long-running
                // recognition, use StartContinuousRecognitionAsync() instead.
                var result = await recognizer.RecognizeOnceAsync().ConfigureAwait(false);

                // Checks result.
                if (result.Reason == ResultReason.RecognizedIntent)
                {
                    Console.WriteLine($"RECOGNIZED: Text={result.Text}");
                    Console.WriteLine($"    Intent Id: {result.IntentId}.");
                    Console.WriteLine($"    Language Understanding JSON: {result.Properties.GetProperty(PropertyId.LanguageUnderstandingServiceResponse_JsonResult)}.");
                }
                else if (result.Reason == ResultReason.RecognizedSpeech)
                {
                    Console.WriteLine($"RECOGNIZED: Text={result.Text}");
                    Console.WriteLine($"    Intent not recognized.");
                }
                else if (result.Reason == ResultReason.NoMatch)
                {
                    Console.WriteLine($"NOMATCH: Speech could not be recognized.");
                }
                else if (result.Reason == ResultReason.Canceled)
                {
                    var cancellation = CancellationDetails.FromResult(result);
                    Console.WriteLine($"CANCELED: Reason={cancellation.Reason}");

                    if (cancellation.Reason == CancellationReason.Error)
                    {
                        Console.WriteLine($"CANCELED: ErrorDetails={cancellation.ErrorDetails}");
                        Console.WriteLine($"CANCELED: Did you update the subscription info?");
                    }
                }
            }
            // </intentRecognitionWithMicrophone>
        }
示例#4
0
        private static async Task <string> awaitCommand(IntentRecognizer intentRecognizer, SpeechSynthesizer synth)
        {
            await SayAsync(synth, "Yes sir?");

            var r = await intentRecognizer.RecognizeOnceAsync().ConfigureAwait(false);

            switch (r.Reason)
            {
            case ResultReason.RecognizedIntent:
                return(r.Properties.GetProperty(PropertyId.LanguageUnderstandingServiceResponse_JsonResult));

            default:
                return(null);
            }
        }
示例#5
0
        private async Task <SpeechLuisResult> RecognizeSpeechWithIntentRecognizerAsync(string speechFile)
        {
            if (this.LuisConfiguration.IsStaging)
            {
                throw new NotSupportedException("Testing LUIS from speech with the Speech SDK does not currently support the LUIS staging endpoint.");
            }

            var speechConfig = SpeechConfig.FromSubscription(this.LuisConfiguration.SpeechKey, this.LuisConfiguration.SpeechRegion);

            using (var audioInput = AudioConfig.FromWavFileInput(speechFile))
                using (var recognizer = new IntentRecognizer(speechConfig, audioInput))
                {
                    // Add intents to intent recognizer
                    var model = LanguageUnderstandingModel.FromAppId(this.LuisConfiguration.AppId);
                    recognizer.AddIntent(model, "None", "None");
                    var result = await recognizer.RecognizeOnceAsync().ConfigureAwait(false);

                    // Checks result.
                    // For some reason RecognizeOnceAsync always return ResultReason.RecognizedSpeech
                    // when intent is recognized. It's because we don't add all possible intents (note that this IS intentional)
                    // in code via AddIntent method.
                    if (result.Reason == ResultReason.RecognizedSpeech || result.Reason == ResultReason.RecognizedIntent)
                    {
                        var content           = result.Properties.GetProperty(PropertyId.LanguageUnderstandingServiceResponse_JsonResult);
                        var luisResult        = JsonConvert.DeserializeObject <LuisResult>(content);
                        var speechContent     = result.Properties.GetProperty(PropertyId.SpeechServiceResponse_JsonResult);
                        var speechContentJson = JObject.Parse(speechContent);
                        var textScore         = speechContentJson["NBest"]?.Max(t => t.Value <double?>("Confidence"));
                        return(new SpeechLuisResult(luisResult, textScore));
                    }
                    else if (result.Reason == ResultReason.NoMatch)
                    {
                        Logger.LogWarning("Received 'NoMatch' result from Cognitive Services.");
                        return(null);
                    }
                    else
                    {
                        throw new InvalidOperationException($"Failed to get speech recognition result. Reason = '{result.Reason}'");
                    }
                }
        }
        public async Task <Result <LuisResult> > Recognize(string filePath)
        {
            // Credenciais do LUIS
            var config = SpeechConfig.FromSubscription("YourSubscriptionKey", "YourRegion");

            config.SpeechRecognitionLanguage = "pt-br";

            using (var audioInput = AudioConfig.FromWavFileInput(filePath))
            {
                using (var recognizer = new IntentRecognizer(config, audioInput))
                {
                    var model = LanguageUnderstandingModel.FromAppId("YourLuisAppId");
                    recognizer.AddIntent(model, "intent.iot.device_off", "device_off");
                    recognizer.AddIntent(model, "intent.iot.device_on", "device_on");

                    var result = await recognizer.RecognizeOnceAsync().ConfigureAwait(false);

                    if (result.Reason == ResultReason.RecognizedIntent)
                    {
                        var js = new DataContractJsonSerializer(typeof(LuisResult));
                        var ms = new MemoryStream(Encoding.UTF8.GetBytes(result.Properties.GetProperty(PropertyId.LanguageUnderstandingServiceResponse_JsonResult)));
                        return(new Result <LuisResult>((js.ReadObject(ms) as LuisResult)));
                    }
                    else if (result.Reason == ResultReason.NoMatch)
                    {
                        return(new Result <LuisResult>(null, false, "Falha no reconhecimento do áudio!"));
                    }
                    else if (result.Reason == ResultReason.Canceled)
                    {
                        var cancellation = CancellationDetails.FromResult(result);
                        if (cancellation.Reason == CancellationReason.Error)
                        {
                            return(new Result <LuisResult>(null, false, $"Motivo: {cancellation.Reason}. Detalhes: {cancellation.ErrorDetails}"));
                        }
                        return(new Result <LuisResult>(null, false, $"Motivo: {cancellation.Reason}."));
                    }
                }
            }
            return(new Result <LuisResult>(null, false, "Erro desconhecido!"));
        }
示例#7
0
        static async Task RecognizeIntentAsync()
        {
            //simple speech recognition with intent
            var config = SpeechConfig.FromSubscription(luisKey, luisRegion);

            using (var recognizer = new IntentRecognizer(config))
            {
                var model = LanguageUnderstandingModel.FromAppId(luisAppId);

                //add LUIS intents, you have the option to add only selected intents
                recognizer.AddAllIntents(model);

                Console.WriteLine("Say something...");

                var result = await recognizer.RecognizeOnceAsync().ConfigureAwait(false);

                if (result.Reason == ResultReason.RecognizedIntent)
                {
                    Console.WriteLine($"Recognized: Text = {result.Text}");
                    Console.WriteLine($"Language Understanding JSON: {result.Properties.GetProperty(PropertyId.LanguageUnderstandingServiceResponse_JsonResult)}");
                }
                else if (result.Reason == ResultReason.RecognizedSpeech)
                {
                    Console.WriteLine($"Recognized: Text = {result.Text}");
                    Console.WriteLine("Intent not recognized.");
                }
                else if (result.Reason == ResultReason.NoMatch)
                {
                    Console.WriteLine("Speech could not be recognized.");
                }
                else if (result.Reason == ResultReason.Canceled)
                {
                    var cancellation = CancellationDetails.FromResult(result);
                    Console.WriteLine($"Canceled. Reason = {cancellation.Reason}");
                }
            }
        }
示例#8
0
 public IntentRecognitionResult RecognizeOnce()
 {
     return(recognizer.RecognizeOnceAsync().Result);
 }
示例#9
0
        public static async Task RecognizeIntentAsync()
        {
            if (solicitacao == 0)
            {
                Resposta("Pois não!").Wait();
                solicitacao = 1;
            }

            Console.WriteLine("Escutando...");

            // Starts recognizing.
            // Starts intent recognition, and returns after a single utterance is recognized. The end of a
            // single utterance is determined by listening for silence at the end or until a maximum of 15
            // seconds of audio is processed.  The task returns the recognition text as result.
            // Note: Since RecognizeOnceAsync() returns only a single utterance, it is suitable only for single
            // shot recognition like command or query.
            // For long-running multi-utterance recognition, use StartContinuousRecognitionAsync() instead.

            var result = await recognizer.RecognizeOnceAsync().ConfigureAwait(false);

            //SALVANDO O JSON DOS RESULTADOS EM UM ARQUIVO
            var json = result.Properties.GetProperty(PropertyId.LanguageUnderstandingServiceResponse_JsonResult);

            Console.WriteLine(json);

            string       dados  = result.Properties.GetProperty(PropertyId.LanguageUnderstandingServiceResponse_JsonResult);
            StreamWriter salvar = new StreamWriter(@"dados-json.json");

            salvar.WriteLine(dados);
            salvar.Close();

            //LENDO O JSON PARA RECUPERAR O SCORE DA INTENT
            var arquivo2     = File.ReadAllText(@"dados-json.json");
            var arquivoLido2 = JsonConvert.DeserializeObject <Intents>(arquivo2);

            scoreIntent = arquivoLido2.topScoringIntent.score;
            valorScore  = float.Parse(scoreIntent, CultureInfo.InvariantCulture.NumberFormat);

            Console.WriteLine("Score da intent = " + valorScore);

            // Checks result.
            if (result.Reason == ResultReason.RecognizedIntent && valorScore > 0.6)
            {
                //LENDO O JSON PARA RECUPERAR VALOR E TIPO DA ENTIDADE
                var arquivo     = File.ReadAllText(@"dados-json.json");
                var arquivoLido = JsonConvert.DeserializeObject <Entidades>(arquivo);

                foreach (EntidadeUnica entidade in arquivoLido.entities)
                {
                    valorEntidadeReconhecida = entidade.entity;
                    tipoEntidadeReconhecida  = entidade.type;
                }

                if (interacao_morador == 0)
                {
                    switch (estado)
                    {
                    case 0:     //ESTADO = 0 - INICIO DA INTERAÇÃO

                        switch (result.IntentId)
                        {
                        case "cumprimento":
                            if (processador.Compila(tipoEntidadeReconhecida, leitorXML.regras.estado_0.case_cumprimento.se.regra_se))
                            {
                                Resposta(leitorXML.regras.estado_0.case_cumprimento.se.frase).Wait();
                                estado = leitorXML.regras.estado_0.case_cumprimento.se.prox_estado;
                            }
                            else
                            {
                                resposta_final = string.Format(leitorXML.regras.estado_0.case_cumprimento.frase, valorEntidadeReconhecida);
                                Resposta(resposta_final).Wait();
                                estado = leitorXML.regras.estado_0.case_cumprimento.prox_estado;
                            }
                            break;

                        case "entregar":
                            if (processador.Compila(tipoEntidadeReconhecida, leitorXML.regras.estado_0.case_entrega.se.regra_se))
                            {
                                Resposta(leitorXML.regras.estado_0.case_entrega.se.frase).Wait();
                                estado = leitorXML.regras.estado_0.case_entrega.se.prox_estado;
                            }
                            else
                            {
                                if (processador.Compila(tipoEntidadeReconhecida, leitorXML.regras.estado_0.case_entrega.senao.regra_se))
                                {
                                    resposta_final = string.Format(leitorXML.regras.estado_0.case_entrega.senao.frase_se, valorEntidadeReconhecida);
                                    Resposta(resposta_final).Wait();
                                    estado = leitorXML.regras.estado_0.case_entrega.senao.prox_estado_se;
                                }
                                else if (processador.Compila(tipoEntidadeReconhecida, leitorXML.regras.estado_0.case_entrega.senao.regra_senao))
                                {
                                    resposta_final = string.Format(leitorXML.regras.estado_0.case_entrega.senao.frase_senao, valorEntidadeReconhecida);
                                    Resposta(resposta_final).Wait();
                                    estado = leitorXML.regras.estado_0.case_entrega.senao.prox_estado_senao;
                                }
                            }
                            break;

                        case "visitar":
                            if (processador.Compila(tipoEntidadeReconhecida, leitorXML.regras.estado_0.case_visita.se.regra_se))
                            {
                                Resposta(leitorXML.regras.estado_0.case_visita.se.frase).Wait();
                                estado = leitorXML.regras.estado_0.case_visita.se.prox_estado;
                            }
                            else
                            {
                                if (processador.Compila(tipoEntidadeReconhecida, leitorXML.regras.estado_0.case_visita.senao.regra_se))
                                {
                                    resposta_final = string.Format(leitorXML.regras.estado_0.case_visita.senao.frase_se, valorEntidadeReconhecida);
                                    Resposta(resposta_final).Wait();
                                    estado = leitorXML.regras.estado_0.case_visita.senao.prox_estado_se;
                                }
                                else if (processador.Compila(tipoEntidadeReconhecida, leitorXML.regras.estado_0.case_visita.senao.regra_senao))
                                {
                                    resposta_final = string.Format(leitorXML.regras.estado_0.case_visita.senao.frase_senao, valorEntidadeReconhecida);
                                    Resposta(resposta_final).Wait();
                                    estado = leitorXML.regras.estado_0.case_visita.senao.prox_estado_senao;
                                }
                            }

                            break;

                        case "avisar_chegada":
                            if (processador.Compila(tipoEntidadeReconhecida, leitorXML.regras.estado_0.case_chegada.se.regra_se))
                            {
                                resposta_final = string.Format(leitorXML.regras.estado_0.case_chegada.se.frase, valorEntidadeReconhecida);
                                Resposta(resposta_final).Wait();
                                estado = leitorXML.regras.estado_0.case_chegada.se.prox_estado;
                            }
                            else
                            {
                                if (processador.Compila(tipoEntidadeReconhecida, leitorXML.regras.estado_0.case_chegada.senao.regra_se))
                                {
                                    resposta_final = string.Format(leitorXML.regras.estado_0.case_chegada.senao.frase_se, valorEntidadeReconhecida);
                                    Resposta(resposta_final).Wait();
                                    estado = leitorXML.regras.estado_0.case_chegada.senao.prox_estado_se;
                                }
                            }
                            break;

                        default:
                            Resposta(leitorXML.regras.estado_0.case_default.frase).Wait();
                            estado = leitorXML.regras.estado_0.case_default.prox_estado;
                            break;
                        }
                        break;

                    case 1:     //ESTADO = 1 - PESSOA CUMPRIMENTOU E JÁ FOI CUMPRIMENTADA

                        switch (result.IntentId)
                        {
                        case "cumprimento":
                            Resposta(leitorXML.regras.estado_1.case_cumprimento.frase).Wait();
                            estado = leitorXML.regras.estado_1.case_cumprimento.prox_estado;
                            break;

                        case "entregar":
                            if (processador.Compila(tipoEntidadeReconhecida, leitorXML.regras.estado_1.case_entrega.se.regra_se))
                            {
                                Resposta(leitorXML.regras.estado_1.case_entrega.se.frase).Wait();
                                estado = leitorXML.regras.estado_1.case_entrega.se.prox_estado;
                            }
                            else
                            {
                                if (processador.Compila(tipoEntidadeReconhecida, leitorXML.regras.estado_1.case_entrega.senao.regra_se))
                                {
                                    resposta_final = string.Format(leitorXML.regras.estado_1.case_entrega.senao.frase_se, valorEntidadeReconhecida);
                                    Resposta(resposta_final).Wait();
                                    estado = leitorXML.regras.estado_1.case_entrega.senao.prox_estado_se;
                                }
                                else
                                {
                                    if (processador.Compila(tipoEntidadeReconhecida, leitorXML.regras.estado_1.case_entrega.senao.regra_senao))
                                    {
                                        resposta_final = string.Format(leitorXML.regras.estado_1.case_entrega.senao.frase_senao, valorEntidadeReconhecida);
                                        Resposta(resposta_final).Wait();
                                        estado = leitorXML.regras.estado_1.case_entrega.senao.prox_estado_senao;
                                    }
                                }
                            }
                            break;

                        case "visitar":
                            if (processador.Compila(tipoEntidadeReconhecida, leitorXML.regras.estado_1.case_visita.se.regra_se))
                            {
                                Resposta(leitorXML.regras.estado_1.case_visita.se.frase).Wait();
                                estado = leitorXML.regras.estado_1.case_visita.se.prox_estado;
                            }
                            else
                            {
                                if (processador.Compila(tipoEntidadeReconhecida, leitorXML.regras.estado_1.case_visita.senao.regra_se))
                                {
                                    resposta_final = string.Format(leitorXML.regras.estado_1.case_visita.senao.frase_se, valorEntidadeReconhecida);
                                    Resposta(resposta_final).Wait();
                                    estado = leitorXML.regras.estado_1.case_visita.senao.prox_estado_se;
                                }
                                else if (processador.Compila(tipoEntidadeReconhecida, leitorXML.regras.estado_1.case_visita.senao.regra_senao))
                                {
                                    resposta_final = string.Format(leitorXML.regras.estado_1.case_visita.senao.frase_senao, valorEntidadeReconhecida);
                                    Resposta(resposta_final).Wait();
                                    estado = leitorXML.regras.estado_1.case_visita.senao.prox_estado_senao;
                                }
                            }
                            break;

                        case "avisar_chegada":
                            if (processador.Compila(tipoEntidadeReconhecida, leitorXML.regras.estado_1.case_chegada.se.regra_se))
                            {
                                resposta_final = string.Format(leitorXML.regras.estado_1.case_chegada.se.frase, valorEntidadeReconhecida);
                                Resposta(resposta_final).Wait();
                                estado = leitorXML.regras.estado_1.case_chegada.se.prox_estado;
                            }
                            else
                            {
                                if (processador.Compila(tipoEntidadeReconhecida, leitorXML.regras.estado_1.case_chegada.senao.regra_se))
                                {
                                    resposta_final = string.Format(leitorXML.regras.estado_1.case_chegada.senao.frase_se, valorEntidadeReconhecida);
                                    Resposta(resposta_final).Wait();
                                    estado = leitorXML.regras.estado_1.case_chegada.senao.prox_estado_se;
                                }
                            }
                            break;

                        case "despedida":
                            estado = leitorXML.regras.estado_1.case_despedida.prox_estado;
                            break;

                        default:
                            resposta_final = string.Format(leitorXML.regras.estado_1.case_default.frase, valorEntidadeReconhecida);
                            Resposta(resposta_final).Wait();
                            estado = leitorXML.regras.estado_1.case_default.prox_estado;
                            break;
                        }
                        break;

                    case 5:     //ESTADO = 5 - PESSOA JÁ FOI RESPONDIDA COM O CUMPRIMENTO PELA SEGUNDA VEZ

                        switch (result.IntentId)
                        {
                        case "cumprimento":
                            Resposta(leitorXML.regras.estado_5.case_cumprimento.frase).Wait();
                            estado = leitorXML.regras.estado_5.case_cumprimento.prox_estado;
                            break;

                        case "entregar":
                            if (processador.Compila(tipoEntidadeReconhecida, leitorXML.regras.estado_5.case_entrega.se.regra_se))
                            {
                                resposta_final = string.Format(leitorXML.regras.estado_5.case_entrega.se.frase, valorEntidadeReconhecida);
                                Resposta(resposta_final).Wait();
                                estado = leitorXML.regras.estado_5.case_entrega.se.prox_estado;
                            }
                            else
                            {
                                if (processador.Compila(tipoEntidadeReconhecida, leitorXML.regras.estado_5.case_entrega.senao.regra_se))
                                {
                                    resposta_final = string.Format(leitorXML.regras.estado_5.case_entrega.senao.frase_se, valorEntidadeReconhecida);
                                    Resposta(resposta_final).Wait();
                                    estado = leitorXML.regras.estado_5.case_entrega.senao.prox_estado_se;
                                }
                                else
                                {
                                    if (processador.Compila(tipoEntidadeReconhecida, leitorXML.regras.estado_5.case_entrega.senao.regra_senao))
                                    {
                                        resposta_final = string.Format(leitorXML.regras.estado_5.case_entrega.senao.frase_senao, valorEntidadeReconhecida);
                                        Resposta(resposta_final).Wait();
                                        estado = leitorXML.regras.estado_5.case_entrega.senao.prox_estado_senao;
                                    }
                                }
                            }
                            break;

                        case "visitar":
                            if (processador.Compila(tipoEntidadeReconhecida, leitorXML.regras.estado_5.case_visita.se.regra_se))
                            {
                                Resposta(leitorXML.regras.estado_5.case_visita.se.frase).Wait();
                                estado = leitorXML.regras.estado_5.case_visita.se.prox_estado;
                            }
                            else
                            {
                                if (processador.Compila(tipoEntidadeReconhecida, leitorXML.regras.estado_5.case_visita.senao.regra_se))
                                {
                                    resposta_final = string.Format(leitorXML.regras.estado_5.case_visita.senao.frase_se, valorEntidadeReconhecida);
                                    Resposta(resposta_final).Wait();
                                    estado = leitorXML.regras.estado_5.case_visita.senao.prox_estado_se;
                                }
                                else if (processador.Compila(tipoEntidadeReconhecida, leitorXML.regras.estado_5.case_visita.senao.regra_senao))
                                {
                                    resposta_final = string.Format(leitorXML.regras.estado_5.case_visita.senao.frase_senao, valorEntidadeReconhecida);
                                    Resposta(resposta_final).Wait();
                                    estado = leitorXML.regras.estado_5.case_visita.senao.prox_estado_senao;
                                }
                            }
                            break;

                        case "avisar_chegada":
                            if (processador.Compila(tipoEntidadeReconhecida, leitorXML.regras.estado_5.case_chegada.se.regra_se))
                            {
                                resposta_final = string.Format(leitorXML.regras.estado_5.case_chegada.se.frase, valorEntidadeReconhecida);
                                Resposta(resposta_final).Wait();
                                estado = leitorXML.regras.estado_5.case_chegada.se.prox_estado;
                            }
                            else
                            {
                                if (processador.Compila(tipoEntidadeReconhecida, leitorXML.regras.estado_5.case_chegada.senao.regra_se))
                                {
                                    resposta_final = string.Format(leitorXML.regras.estado_5.case_chegada.senao.frase_se, valorEntidadeReconhecida);
                                    Resposta(resposta_final).Wait();
                                    estado = leitorXML.regras.estado_5.case_chegada.senao.prox_estado_se;
                                }
                            }
                            break;

                        case "despedida":
                            estado = leitorXML.regras.estado_5.case_despedida.prox_estado;
                            break;

                        default:
                            Resposta(leitorXML.regras.estado_5.case_default.frase).Wait();
                            estado = leitorXML.regras.estado_5.case_default.prox_estado;
                            break;
                        }
                        break;

                    case 7:     //ESTADO = 7 - ENTREGADOR INFORMOU PARA QUEM É A ENTREGA

                        switch (result.IntentId)
                        {
                        case "destino":
                            if (processador.Compila(tipoEntidadeReconhecida, leitorXML.regras.estado_7.case_destino.se.regra_se))
                            {
                                Resposta(leitorXML.regras.estado_7.case_destino.se.frase).Wait();
                                estado = leitorXML.regras.estado_7.case_destino.se.prox_estado;
                            }
                            else
                            {
                                if (processador.Compila(tipoEntidadeReconhecida, leitorXML.regras.estado_7.case_destino.senao.regra_se))
                                {
                                    resposta_final = string.Format(leitorXML.regras.estado_7.case_destino.senao.frase_se, valorEntidadeReconhecida);
                                    Resposta(resposta_final).Wait();
                                    estado = leitorXML.regras.estado_7.case_destino.senao.prox_estado_se;
                                }
                                else
                                {
                                    if (processador.Compila(tipoEntidadeReconhecida, leitorXML.regras.estado_7.case_destino.senao.regra_senao))
                                    {
                                        resposta_final = string.Format(leitorXML.regras.estado_7.case_destino.senao.frase_senao, valorEntidadeReconhecida);
                                        Resposta(resposta_final).Wait();
                                        estado = leitorXML.regras.estado_7.case_destino.senao.prox_estado_senao;
                                    }
                                }
                            }
                            break;

                        case "entregar":
                        {
                            if (processador.Compila(tipoEntidadeReconhecida, leitorXML.regras.estado_7.case_solicitacao.se.regra_se))
                            {
                                resposta_final = string.Format(leitorXML.regras.estado_7.case_solicitacao.se.frase, valorEntidadeReconhecida);
                                Resposta(resposta_final).Wait();
                                estado = leitorXML.regras.estado_7.case_solicitacao.se.prox_estado;
                            }
                            else
                            {
                                if (processador.Compila(tipoEntidadeReconhecida, leitorXML.regras.estado_7.case_solicitacao.senao.regra_se))
                                {
                                    resposta_final = string.Format(leitorXML.regras.estado_7.case_solicitacao.senao.frase_se, valorEntidadeReconhecida);
                                    Resposta(resposta_final).Wait();
                                    estado = leitorXML.regras.estado_7.case_solicitacao.senao.prox_estado_se;
                                }
                            }
                        }
                        break;

                        default:
                            Resposta(leitorXML.regras.estado_7.case_default.frase).Wait();
                            estado = leitorXML.regras.estado_7.case_default.prox_estado;
                            break;
                        }
                        break;

                    case 8:     //ESTADO = 8 - VISITANTE SE IDENTIFICOU PARA FAZER UMA SOLICITAÇÃO DE AVISO DE CHEGADA

                        if (processador.Compila(tipoEntidadeReconhecida, leitorXML.regras.estado_8.se.regra_se))
                        {
                            Resposta(leitorXML.regras.estado_8.se.frase).Wait();
                            estado = leitorXML.regras.estado_8.se.prox_estado;
                        }
                        else
                        {
                            Resposta(leitorXML.regras.estado_8.frase).Wait();
                            estado = leitorXML.regras.estado_8.prox_estado;
                        }
                        break;

                    case 9:     //ESTADO = 9 - VISITANTE SE IDENTIFICOU PARA FAZER UMA SOLICITAÇÃO DE VISITA

                        if (processador.Compila(tipoEntidadeReconhecida, leitorXML.regras.estado_9.se.regra_se))
                        {
                            Resposta(leitorXML.regras.estado_9.se.frase).Wait();
                            estado = leitorXML.regras.estado_9.se.prox_estado;
                        }
                        else
                        {
                            Resposta(leitorXML.regras.estado_9.frase).Wait();
                            estado = leitorXML.regras.estado_9.prox_estado;
                        }
                        break;

                    case 10:     //ESTADO = 10 - PESSOA INFORMOU PARA QUEM É A VISITA

                        switch (result.IntentId)
                        {
                        case "destino":
                            if (processador.Compila(tipoEntidadeReconhecida, leitorXML.regras.estado_10.case_destino.se.regra_se))
                            {
                                Resposta(leitorXML.regras.estado_10.case_destino.se.frase).Wait();
                                estado = leitorXML.regras.estado_10.case_destino.se.prox_estado;
                            }
                            else
                            {
                                if (processador.Compila(tipoEntidadeReconhecida, leitorXML.regras.estado_10.case_destino.senao.regra_se))
                                {
                                    resposta_final = string.Format(leitorXML.regras.estado_10.case_destino.senao.frase_se, valorEntidadeReconhecida);
                                    Resposta(resposta_final).Wait();
                                    estado = leitorXML.regras.estado_10.case_destino.senao.prox_estado_se;
                                }
                                else
                                {
                                    if (processador.Compila(tipoEntidadeReconhecida, leitorXML.regras.estado_10.case_destino.senao.regra_senao))
                                    {
                                        resposta_final = string.Format(leitorXML.regras.estado_10.case_destino.senao.frase_senao, valorEntidadeReconhecida);
                                        Resposta(resposta_final).Wait();
                                        estado = leitorXML.regras.estado_10.case_destino.senao.prox_estado_senao;
                                    }
                                }
                            }
                            break;

                        case "visitar":
                            if (processador.Compila(tipoEntidadeReconhecida, leitorXML.regras.estado_10.case_solicitacao.se.regra_se))
                            {
                                resposta_final = string.Format(leitorXML.regras.estado_10.case_solicitacao.se.frase, valorEntidadeReconhecida);
                                Resposta(resposta_final).Wait();
                                estado = leitorXML.regras.estado_10.case_solicitacao.se.prox_estado;
                            }
                            else
                            {
                                if (processador.Compila(tipoEntidadeReconhecida, leitorXML.regras.estado_10.case_solicitacao.senao.regra_se))
                                {
                                    resposta_final = string.Format(leitorXML.regras.estado_10.case_solicitacao.senao.frase_se, valorEntidadeReconhecida);
                                    Resposta(resposta_final).Wait();
                                    estado = leitorXML.regras.estado_10.case_solicitacao.senao.prox_estado_se;
                                }
                            }
                            break;

                        default:
                            Resposta(leitorXML.regras.estado_10.case_default.frase).Wait();
                            estado = leitorXML.regras.estado_10.case_default.prox_estado;
                            break;
                        }
                        break;
                    }
                }
                else if (interacao_morador == 1) //INTERACAO COM O MORADOR
                {
                    switch (tipo_requisicao)
                    {
                    case 2:
                        switch (result.IntentId)
                        {
                        case "autorizado":
                            Resposta("Ok, então irei autorizar a subida do entregador. Obrigado").Wait();
                            autorizacao_morador = true;
                            break;

                        case "nao_autorizado":
                            Resposta("Ok, irei avisar o entregador que ele não está autorizado a subir. Obrigado").Wait();
                            autorizacao_morador = false;
                            break;

                        default:
                            Resposta("Desculpe, não entendi. Posso autorizar a subida do entregador?").Wait();
                            tipo_requisicao = 2;
                            break;
                        }
                        break;

                    case 3:
                        switch (result.IntentId)
                        {
                        case "autorizado":
                            Resposta("Ok, então irei autorizar a subida do visitante. Obrigado").Wait();
                            autorizacao_morador = true;
                            break;

                        case "nao_autorizado":
                            Resposta("Ok, irei avisar o visitante que ele não está autorizado a subir. Obrigado").Wait();
                            autorizacao_morador = false;
                            break;

                        default:
                            Resposta("Desculpe, não entendi. Posso autorizar a subida do visitante?").Wait();
                            tipo_requisicao = 3;
                            break;
                        }
                        break;

                    case 4:
                        switch (result.IntentId)
                        {
                        case "autorizado":
                            Resposta("Ok, então irei avisar o visitante que logo você estará descendo. Obrigado").Wait();
                            autorizacao_morador = true;
                            break;

                        case "nao_autorizado":
                            Resposta("Ok, irei avisar o visitante que você não irá descer agora. Obrigado").Wait();
                            autorizacao_morador = false;
                            break;

                        default:
                            Resposta("Desculpe, não entendi. Posso informar o visitante que você irá descer?").Wait();
                            tipo_requisicao = 4;
                            break;
                        }
                        break;
                    }
                }
            }
            else if (valorScore < 0.6 && controle_interacao == true)
            {
                Resposta("Desculpe, não entendi. Pode falar novamente?").Wait();
            }
            else if (result.Reason == ResultReason.RecognizedSpeech)
            {
                //MessageBox.Show($"RECOGNIZED: Text={result.Text}");
                //MessageBox.Show($"    Intent not recognized.");
                Resposta("Desculpe, não entendi. Pode falar novamente?").Wait();
            }
            else if (result.Reason == ResultReason.NoMatch)
            {
                //MessageBox.Show($"NOMATCH: Speech could not be recognized.");
                Resposta("Desculpe, não entendi. Pode falar novamente?").Wait();
            }
            else if (result.Reason == ResultReason.Canceled)
            {
                var cancellation = CancellationDetails.FromResult(result);
                //MessageBox.Show($"CANCELED: Reason={cancellation.Reason}");
                controle_interacao = false;

                if (cancellation.Reason == CancellationReason.Error)
                {
                    //MessageBox.Show($"CANCELED: ErrorCode={cancellation.ErrorCode}");
                    //MessageBox.Show($"CANCELED: ErrorDetails={cancellation.ErrorDetails}");
                    //MessageBox.Show($"CANCELED: Did you update the subscription info?");
                    controle_interacao = false;
                }
            }
        }
        /// <summary>
        /// Use pattern matching for intent recognition from your default microphone input
        /// </summary>
        public static async Task IntentPatternMatchingWithMicrophoneAsync()
        {
            // Creates an instance of a speech config with specified subscription key and service
            // region. Note that in contrast to the other samples this DOES NOT require a LUIS
            // application.
            // The default recognition language is "en-us".
            var config = SpeechConfig.FromSubscription("YourLanguageUnderstandingSubscriptionKey", "YourLanguageUnderstandingServiceRegion");

            // Creates an intent recognizer using microphone as audio input.
            using (var recognizer = new IntentRecognizer(config))
            {
                // Creates a Pattern Matching model and adds specific intents from your model. The
                // Id is used to identify this model from others in the collection.
                var model = new PatternMatchingModel("YourPatternMatchingModelId");

                // Creates a pattern that uses groups of optional words. "[Go | Take me]" will match either "Go", "Take me", or "".
                var patternWithOptionalWords = "[Go | Take me] to [floor|level] {floorName}";

                // Creates a pattern that uses an optional entity and group that could be used to tie commands together.
                var patternWithOptionalEntity = "Go to parking [{parkingLevel}]";

                // You can also have multiple entities of the same name in a single pattern by adding appending a unique identifier
                // to distinguish between the instances. For example:
                var patternWithTwoOfTheSameEntity = "Go to floor {floorName:1} [and then go to floor {floorName:2}]";
                // NOTE: Both floorName:1 and floorName:2 are tied to the same list of entries. The identifier can be a string
                //       and is separated from the entity name by a ':'

                // Adds some intents to look for specific patterns.
                model.Intents.Add(new PatternMatchingIntent("ChangeFloors", patternWithOptionalWords, patternWithOptionalEntity, patternWithTwoOfTheSameEntity));
                model.Intents.Add(new PatternMatchingIntent("DoorControl", "{action} the doors", "{action} doors", "{action} the door", "{action} door"));

                // Creates the "floorName" entity and set it to type list.
                // Adds acceptable values. NOTE the default entity type is Any and so we do not need
                // to declare the "action" entity.
                model.Entities.Add(PatternMatchingEntity.CreateListEntity("floorName", EntityMatchMode.Strict, "ground floor", "lobby", "1st", "first", "one", "1", "2nd", "second", "two", "2"));

                // Creates the "parkingLevel" entity as a pre-built integer
                model.Entities.Add(PatternMatchingEntity.CreateIntegerEntity("parkingLevel"));

                // Add the model to a new language model collection
                var modelCollection = new LanguageUnderstandingModelCollection();
                modelCollection.Add(model);

                // Apply the language model collection to the recognizer.
                recognizer.ApplyLanguageModels(modelCollection);

                Console.WriteLine("Say something...");

                // Starts intent recognition, and returns after a single utterance is recognized. The
                // end of a single utterance is determined by listening for silence at the end, or until
                // a maximum of 15 seconds of audio is processed. The task returns the recognition
                // text as result.
                // Note: Since RecognizeOnceAsync() returns only a single utterance, it is suitable only
                // for single shot recognition like command or query.
                // For long-running multi-utterance recognition, use StartContinuousRecognitionAsync()
                // instead.
                var result = await recognizer.RecognizeOnceAsync();

                // Checks result.
                if (result.Reason == ResultReason.RecognizedIntent)
                {
                    Console.WriteLine($"RECOGNIZED: Text={result.Text}");
                    Console.WriteLine($"       Intent Id={result.IntentId}.");

                    var entities = result.Entities;
                    switch (result.IntentId)
                    {
                    case "ChangeFloors":
                        if (entities.TryGetValue("floorName", out string floorName))
                        {
                            Console.WriteLine($"       FloorName={floorName}");
                        }

                        if (entities.TryGetValue("floorName:1", out floorName))
                        {
                            Console.WriteLine($"     FloorName:1={floorName}");
                        }

                        if (entities.TryGetValue("floorName:2", out floorName))
                        {
                            Console.WriteLine($"     FloorName:2={floorName}");
                        }

                        if (entities.TryGetValue("parkingLevel", out string parkingLevel))
                        {
                            Console.WriteLine($"    ParkingLevel={parkingLevel}");
                        }

                        break;

                    case "DoorControl":
                        if (entities.TryGetValue("action", out string action))
                        {
                            Console.WriteLine($"          Action={action}");
                        }
                        break;
                    }
                }
                else if (result.Reason == ResultReason.RecognizedSpeech)
                {
                    Console.WriteLine($"RECOGNIZED: Text={result.Text}");
                    Console.WriteLine($"    Intent not recognized.");
                }
                else if (result.Reason == ResultReason.NoMatch)
                {
                    Console.WriteLine($"NOMATCH: Speech could not be recognized.");
                }
                else if (result.Reason == ResultReason.Canceled)
                {
                    var cancellation = CancellationDetails.FromResult(result);
                    Console.WriteLine($"CANCELED: Reason={cancellation.Reason}");

                    if (cancellation.Reason == CancellationReason.Error)
                    {
                        Console.WriteLine($"CANCELED: ErrorCode={cancellation.ErrorCode}");
                        Console.WriteLine($"CANCELED: ErrorDetails={cancellation.ErrorDetails}");
                        Console.WriteLine($"CANCELED: Did you update the subscription info?");
                    }
                }
            }
        }
        static async Task RecognizeIntentAsync()
        {
            // Creates an instance of a speech config with specified subscription key
            // and service region. Note that in contrast to other services supported by
            // the Cognitive Services Speech SDK, the Language Understanding service
            // requires a specific subscription key from https://www.luis.ai/.
            // The Language Understanding service calls the required key 'endpoint key'.
            // Once you've obtained it, replace with below with your own Language Understanding subscription key
            // and service region (e.g., "westus").
            // The default language is "en-us".
            var config = SpeechConfig.FromSubscription("YourLanguageUnderstandingSubscriptionKey", "YourLanguageUnderstandingServiceRegion");

            // Creates an intent recognizer using microphone as audio input.
            using (var recognizer = new IntentRecognizer(config))
            {
                // Creates a Language Understanding model using the app id, and adds specific intents from your model
                var model = LanguageUnderstandingModel.FromAppId("YourLanguageUnderstandingAppId");
                recognizer.AddIntent(model, "HomeAutomation.TurnOff", "off");
                recognizer.AddIntent(model, "HomeAutomation.TurnOn", "on");

                // Starts recognizing.
                Console.WriteLine("Say something...");

                // Starts intent recognition, and returns after a single utterance is recognized. The end of a
                // single utterance is determined by listening for silence at the end or until a maximum of 15
                // seconds of audio is processed.  The task returns the recognition text as result.
                // Note: Since RecognizeOnceAsync() returns only a single utterance, it is suitable only for single
                // shot recognition like command or query.
                // For long-running multi-utterance recognition, use StartContinuousRecognitionAsync() instead.
                var result = await recognizer.RecognizeOnceAsync().ConfigureAwait(false);

                // Checks result.
                if (result.Reason == ResultReason.RecognizedIntent)
                {
                    Console.WriteLine($"RECOGNIZED: Text={result.Text}");
                    Console.WriteLine($"    Intent Id: {result.IntentId}.");
                    Console.WriteLine($"    Language Understanding JSON: {result.Properties.GetProperty(PropertyId.LanguageUnderstandingServiceResponse_JsonResult)}.");
                }
                else if (result.Reason == ResultReason.RecognizedSpeech)
                {
                    Console.WriteLine($"RECOGNIZED: Text={result.Text}");
                    Console.WriteLine($"    Intent not recognized.");
                }
                else if (result.Reason == ResultReason.NoMatch)
                {
                    Console.WriteLine($"NOMATCH: Speech could not be recognized.");
                }
                else if (result.Reason == ResultReason.Canceled)
                {
                    var cancellation = CancellationDetails.FromResult(result);
                    Console.WriteLine($"CANCELED: Reason={cancellation.Reason}");

                    if (cancellation.Reason == CancellationReason.Error)
                    {
                        Console.WriteLine($"CANCELED: ErrorCode={cancellation.ErrorCode}");
                        Console.WriteLine($"CANCELED: ErrorDetails={cancellation.ErrorDetails}");
                        Console.WriteLine($"CANCELED: Did you update the subscription info?");
                    }
                }
            }
        }
示例#12
0
        public static async Task RecognizeOnceSpeechAsync(SpeechTranslationConfig config)
        {
            var allCultures = CultureInfo.GetCultures(CultureTypes.AllCultures);

            // Creates a speech recognizer.
            using (var recognizer = new IntentRecognizer(config))
            {
                Console.WriteLine("Say something...");

                var model = LanguageUnderstandingModel.FromAppId(ConfigurationManager.AppSettings.Get("LUISId"));
                recognizer.AddAllIntents(model);

                var result = await recognizer.RecognizeOnceAsync();

                // Checks result.
                if (result.Reason == ResultReason.RecognizedIntent)
                {
                    Console.WriteLine($"RECOGNIZED: Text={result.Text}");
                    Console.WriteLine($"    Intent Id: {result.IntentId}.");
                    Console.WriteLine($"    Language Understanding JSON: {result.Properties.GetProperty(PropertyId.LanguageUnderstandingServiceResponse_JsonResult)}.");
                    if (result.IntentId == "Translate")
                    {
                        var    luisJson  = JObject.Parse(result.Properties.GetProperty(PropertyId.LanguageUnderstandingServiceResponse_JsonResult));
                        string targetLng = luisJson["entities"].First(x => x["type"].ToString() == "TargetLanguage")["entity"].ToString();
                        string text      = luisJson["entities"].First(x => x["type"].ToString() == "Text")["entity"].ToString();

                        var lng = allCultures.FirstOrDefault(c => c.DisplayName.ToLower() == targetLng.ToLower()) ??
                                  allCultures.FirstOrDefault(c => c.DisplayName.ToLower() == "english");
                        var translated = Translate.TranslateText("de-DE", text);

                        Console.WriteLine("Translation: " + translated);

                        var synth = new System.Speech.Synthesis.SpeechSynthesizer();

                        // Configure the audio output.
                        synth.SetOutputToDefaultAudioDevice();

                        // Speak a string.
                        synth.SelectVoice(synth.GetInstalledVoices().First(x => x.VoiceInfo.Culture.TwoLetterISOLanguageName == lng.TwoLetterISOLanguageName).VoiceInfo.Name);
                        synth.Speak(translated);
                    }
                }
                else if (result.Reason == ResultReason.RecognizedSpeech)
                {
                    Console.WriteLine($"RECOGNIZED: Text={result.Text}");
                    Console.WriteLine($"    Intent not recognized.");
                }
                else if (result.Reason == ResultReason.NoMatch)
                {
                    Console.WriteLine($"NOMATCH: Speech could not be recognized.");
                }
                else if (result.Reason == ResultReason.Canceled)
                {
                    var cancellation = CancellationDetails.FromResult(result);
                    Console.WriteLine($"CANCELED: Reason={cancellation.Reason}");

                    if (cancellation.Reason == CancellationReason.Error)
                    {
                        Console.WriteLine($"CANCELED: ErrorCode={cancellation.ErrorCode}");
                        Console.WriteLine($"CANCELED: ErrorDetails={cancellation.ErrorDetails}");
                        Console.WriteLine($"CANCELED: Did you update the subscription info?");
                    }
                }
            }
        }
示例#13
0
        public static async Task RecognizeIntentAsync()
        {
            // </skeleton_1>
            // Creates an instance of a speech config with specified subscription key
            // and service region. Note that in contrast to other services supported by
            // the Cognitive Services Speech SDK, the Language Understanding service
            // requires a specific subscription key from https://www.luis.ai/.
            // The Language Understanding service calls the required key 'endpoint key'.
            // Once you've obtained it, replace with below with your own Language Understanding subscription key
            // and service region (e.g., "westus").
            // The default language is "en-us".
            // <create_speech_configuration>
            var config = SpeechConfig.FromSubscription(
                "YourLanguageUnderstandingSubscriptionKey",
                "YourLanguageUnderstandingServiceRegion");

            // </create_speech_configuration>

            // <create_intent_recognizer_1>
            // Creates an intent recognizer using microphone as audio input.
            using (var recognizer = new IntentRecognizer(config))
            {
                // </create_intent_recognizer_1>

                // <add_intents>
                // Creates a Language Understanding model using the app id, and adds specific intents from your model
                var model = LanguageUnderstandingModel.FromAppId("YourLanguageUnderstandingAppId");
                recognizer.AddIntent(model, "YourLanguageUnderstandingIntentName1", "id1");
                recognizer.AddIntent(model, "YourLanguageUnderstandingIntentName2", "id2");
                recognizer.AddIntent(model, "YourLanguageUnderstandingIntentName3", "any-IntentId-here");
                // </add_intents>

                // To add all of the possible intents from a LUIS model to the recognizer, uncomment the line below:
                // recognizer.AddAllIntents(model);

                // <recognize_intent>
                // Starts recognizing.
                Console.WriteLine("Say something...");

                // Starts intent recognition, and returns after a single utterance is recognized. The end of a
                // single utterance is determined by listening for silence at the end or until a maximum of 15
                // seconds of audio is processed.  The task returns the recognition text as result.
                // Note: Since RecognizeOnceAsync() returns only a single utterance, it is suitable only for single
                // shot recognition like command or query.
                // For long-running multi-utterance recognition, use StartContinuousRecognitionAsync() instead.
                var result = await recognizer.RecognizeOnceAsync();

                // </recognize_intent>

                // <print_results>
                // Checks result.
                switch (result.Reason)
                {
                case ResultReason.RecognizedIntent:
                    Console.WriteLine($"RECOGNIZED: Text={result.Text}");
                    Console.WriteLine($"    Intent Id: {result.IntentId}.");
                    var json = result.Properties.GetProperty(PropertyId.LanguageUnderstandingServiceResponse_JsonResult);
                    Console.WriteLine($"    Language Understanding JSON: {json}.");
                    break;

                case ResultReason.RecognizedSpeech:
                    Console.WriteLine($"RECOGNIZED: Text={result.Text}");
                    Console.WriteLine($"    Intent not recognized.");
                    break;

                case ResultReason.NoMatch:
                    Console.WriteLine($"NOMATCH: Speech could not be recognized.");
                    break;

                case ResultReason.Canceled:
                    var cancellation = CancellationDetails.FromResult(result);
                    Console.WriteLine($"CANCELED: Reason={cancellation.Reason}");

                    if (cancellation.Reason == CancellationReason.Error)
                    {
                        Console.WriteLine($"CANCELED: ErrorCode={cancellation.ErrorCode}");
                        Console.WriteLine($"CANCELED: ErrorDetails={cancellation.ErrorDetails}");
                        Console.WriteLine($"CANCELED: Did you update the subscription info?");
                    }
                    break;
                }
                // </print_results>
                // <create_intent_recognizer_2>
            }
            // </create_intent_recognizer_2>
            // <skeleton_2>
        }
示例#14
0
        static async Task RecognizeAsync()
        {
            string LUIS_assigned_endpoint_key = "<LUIS-assigned-resource-key>";
            string LUIS_endpoint_key_region   = "westus";
            string LUIS_app_ID = "<LUIS-app-ID>";

            // Creates an instance of a speech config with specified subscription key
            // and service region. Note that in contrast to other services supported by
            // the Cognitive Services Speech SDK, the Language Understanding service
            // requires a specific subscription key from https://www.luis.ai/.
            // The Language Understanding service calls the required key 'endpoint key'.
            // Once you've obtained it, replace with below with your own Language Understanding subscription key
            // and service region (e.g., "westus").
            // The default language is "en-us".
            var config = SpeechConfig.FromSubscription(LUIS_assigned_endpoint_key, LUIS_endpoint_key_region);

            // Creates an intent recognizer using microphone as audio input.
            using (var recognizer = new IntentRecognizer(config))
            {
                // Creates a Language Understanding model using the app id, and adds specific intents from your model
                var model = LanguageUnderstandingModel.FromAppId(LUIS_app_ID);

                // Add intents from HumanResources.json to your intent recognizer
                recognizer.AddIntent(model, "None", "None");
                recognizer.AddIntent(model, "FindForm", "FindForm");
                recognizer.AddIntent(model, "GetEmployeeBenefits", "GetEmployeeBenefits");
                recognizer.AddIntent(model, "GetEmployeeOrgChart", "GetEmployeeOrgChart");
                recognizer.AddIntent(model, "MoveAssetsOrPeople", "MoveAssetsOrPeople");

                // Starts recognizing.
                Console.WriteLine("Say something...");

                // Performs recognition. RecognizeOnceAsync() returns when the first utterance has been recognized,
                // so it is suitable only for single shot recognition like command or query. For long-running
                // recognition, use StartContinuousRecognitionAsync() instead.
                var result = await recognizer.RecognizeOnceAsync().ConfigureAwait(false);

                // Checks result.
                if (result.Reason == ResultReason.RecognizedIntent)
                {
                    Console.WriteLine($"RECOGNIZED: Text={result.Text}");
                    Console.WriteLine($"    Intent Id: {result.IntentId}.");
                    Console.WriteLine($"    Language Understanding JSON: {result.Properties.GetProperty(PropertyId.LanguageUnderstandingServiceResponse_JsonResult)}.");
                }
                else if (result.Reason == ResultReason.RecognizedSpeech)
                {
                    Console.WriteLine($"RECOGNIZED: Text={result.Text}");
                    Console.WriteLine($"    Intent not recognized.");
                }
                else if (result.Reason == ResultReason.NoMatch)
                {
                    Console.WriteLine($"NOMATCH: Speech could not be recognized.");
                }
                else if (result.Reason == ResultReason.Canceled)
                {
                    var cancellation = CancellationDetails.FromResult(result);
                    Console.WriteLine($"CANCELED: Reason={cancellation.Reason}");

                    if (cancellation.Reason == CancellationReason.Error)
                    {
                        Console.WriteLine($"CANCELED: ErrorDetails={cancellation.ErrorDetails}");
                        Console.WriteLine($"CANCELED: Did you update the subscription info?");
                    }
                }
            }
        }
示例#15
0
        // Intent recognition in the specified language, using microphone.
        public async Task <String> RecognitionWithMicrophoneUsingLanguageAsync()
        {
            log.Info("ENTER - RecognitionWithMicrophoneUsingLanguageAsync");
            // Creates an instance of a speech config with specified subscription key
            // and service region. Note that in contrast to other services supported by
            // the Cognitive Services Speech SDK, the Language Understanding service
            // requires a specific subscription key from https://www.luis.ai/.
            // The Language Understanding service calls the required key 'endpoint key'.
            // Once you've obtained it, replace with below with your own Language Understanding subscription key
            // and service region (e.g., "westus").
            var config   = SpeechConfig.FromSubscription(subscriptionKey, serviceRegion);
            var language = "es-mx";

            config.SpeechRecognitionLanguage = language;

            // Creates an intent recognizer in the specified language using microphone as audio input.
            using (var recognizer = new IntentRecognizer(config))
            {
                // Creates a Language Understanding model using the app id, and adds specific intents from your model
                var model = LanguageUnderstandingModel.FromAppId(appId);
                recognizer.AddIntent(model, "Greetings", "Greetings");
                recognizer.AddIntent(model, "None", "None");
                recognizer.AddIntent(model, "Ubicacion", "Ubicacion");
                recognizer.AddIntent(model, "Despedida", "Despedida");
                recognizer.AddIntent(model, "Compras", "Compras");
                recognizer.AddIntent(model, "Descuento", "Descuento");



                // Starts recognizing.
                log.Debug("Say something in " + language + "...");

                // Starts speech recognition, and returns after a single utterance is recognized. The end of a
                // single utterance is determined by listening for silence at the end or until a maximum of 15
                // seconds of audio is processed.  The task returns the recognition text as result.
                // Note: Since RecognizeOnceAsync() returns only a single utterance, it is suitable only for single
                // shot recognition like command or query.
                // For long-running multi-utterance recognition, use StartContinuousRecognitionAsync() instead.
                var result = await recognizer.RecognizeOnceAsync().ConfigureAwait(false);

                // Checks result.
                if (result.Reason == ResultReason.RecognizedIntent)
                {
                    log.Debug($"RECOGNIZED: Text={result.Text}");
                    log.Debug($"    Intent Id: {result.IntentId}.");
                    log.Debug($"    Language Understanding JSON: {result.Properties.GetProperty(PropertyId.LanguageUnderstandingServiceResponse_JsonResult)}.");

                    //  Updating MessageArea
                    Demo_ChinaTown.MainWindow.AppWindow.MessageArea.Dispatcher.Invoke((Action) delegate
                    {
                        Demo_ChinaTown.MainWindow.AppWindow.MessageArea.Text += $"\nUsuario: {result.Text}";
                    });

                    return(result.IntentId);
                }
                else if (result.Reason == ResultReason.RecognizedSpeech)
                {
                    log.Debug($"RECOGNIZED: Text={result.Text}");
                    log.Debug($"    Intent not recognized.");
                    return("Intent not recognized.");
                }
                else if (result.Reason == ResultReason.NoMatch)
                {
                    log.Debug($"NOMATCH: Speech could not be recognized.");
                    return("Speech could not be recognized.");
                }
                else if (result.Reason == ResultReason.Canceled)
                {
                    var cancellation = CancellationDetails.FromResult(result);
                    log.Debug($"CANCELED: Reason={cancellation.Reason}");

                    if (cancellation.Reason == CancellationReason.Error)
                    {
                        log.Debug($"CANCELED: ErrorCode={cancellation.ErrorCode}");
                        log.Debug($"CANCELED: ErrorDetails={cancellation.ErrorDetails}");
                        log.Debug($"CANCELED: Did you update the subscription info?");
                    }
                }
                return(null);
            }
        }