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; } }
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> }
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); } }
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!")); }
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}"); } } }
public IntentRecognitionResult RecognizeOnce() { return(recognizer.RecognizeOnceAsync().Result); }
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?"); } } } }
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?"); } } } }
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> }
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?"); } } } }
// 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); } }