none
No detecta la opción elegida RRS feed

  • Pregunta

  • Hola, mi nombre es Alejandro. Para colocarlos en contexto, estoy desarrollando un proyecto acerca de un asistente virtual en C# WPF. El asistente por ahora va bien y cumple con todo lo que quiero al momento, pero hay un error. Una de las cosas que le quiero agregar es la opción de elegir un idioma en el que el asistente hable y detecte. Es decir, dependiendo el usuario, podrá hablar en inglés y en Español. Esto lo decidií hacer por ahora, con dos RadioButton. El problema es que no me detecta el ingles, mientras que el español va perfecto, pero al marcar la opción de inglés, no detecta el español, pero tampoco los comando en inglés. Pido disculpas si hay errores muy grandes, apenas estoy aprendiendo C#

    Aquí le dejo el código:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    using System.Speech.Recognition; //Reconocimiento de voz
    using System.Speech.Synthesis; // Voz de VIASCO
    using System.IO;
    
    namespace VIASCO
    {
        /// <summary>
        /// Helix/Flux/Fluk/Pixel/Bit/Max/Hex
        /// Lógica de interacción para MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            SpeechRecognitionEngine reconocedor = new SpeechRecognitionEngine(); // Inicio de reconocimiento
            SpeechSynthesizer viasco = new SpeechSynthesizer(); // Inicio de VIASCO
            bool enable_recognize;
            string speech;
            bool idioma_ing;
            
    
            public MainWindow()
            {
                InitializeComponent();
                InicioDeGramaticas();
            }
    
            void InicioDeGramaticas()
            {
                if (idioma_ing == true)
                {
                    reconocedor.LoadGrammarAsync(new Grammar(new GrammarBuilder(new Choices(File.ReadAllLines(@"C:\Users\Santiago\source\repos\VIASCO\VIASCO\Comandos\ComandosTexto.txt"))))); //Leer y cargar comandos
                }
                else if (idioma_ing == false)
                {
                    idioma_ing = false;
                    reconocedor.LoadGrammarAsync(new Grammar(new GrammarBuilder(new Choices(File.ReadAllLines(@"C:\Users\Santiago\source\repos\VIASCO\VIASCO\Comandos\ComandosEsp.txt"))))); //Leer y cargar comandos                
                }
                reconocedor.RequestRecognizerUpdate(); // Actualizar el microfono
                reconocedor.SpeechRecognized += Reconocedor_SpeechRecognized; // Respuesta al hablar
                viasco.SpeakStarted += Viasco_SpeakStarted; // Respuesta al reconocer el comando
                viasco.SpeakCompleted += Viasco_SpeakCompleted; // Respuesta al reconocer comando
                reconocedor.AudioLevelUpdated += Reconocedor_AudioLevelUpdated; // Recibe el nivel de audio
                reconocedor.SetInputToDefaultAudioDevice(); // Selecciona los dispositivos de audio predeterminados
                reconocedor.RecognizeAsync(RecognizeMode.Multiple); // Microfono siempre activo
    
            }
    
    
            private void Reconocedor_AudioLevelUpdated(object sender, AudioLevelUpdatedEventArgs e)
            {
                int lvlAudio = e.AudioLevel;
                pb_Audio.Value = lvlAudio;
            }
    
            private void Viasco_SpeakCompleted(object sender, SpeakCompletedEventArgs e)
            {
                enable_recognize = true;
            }
    
            private void Viasco_SpeakStarted(object sender, SpeakStartedEventArgs e)
            {
                enable_recognize = false;
            }
    
            private void Reconocedor_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
            {
                speech = e.Result.Text;
                if (e.Result.Confidence > 0.5)
                {
                    if (idioma_ing == true)
                    {
                        if (speech == "Hello")
                        {
                            viasco.SpeakAsync("Hi Santi!");
                            lbl_Salida.Content = "Hi Santi";
                        }
                        if (speech == "How are you?")
                        {
                            viasco.SpeakAsync("I'm fine, thank you");
                            lbl_Salida.Content = "I´m fine";
                        }
                        if (speech == "Where are you from?")
                        {
                            viasco.SpeakAsync("I was developed in Argentina");
                            lbl_Salida.Content = "Argentina";
                        }
                        if (speech == "Who are you?")
                        {
                            viasco.SpeakAsync("Mi name is Helix, your artificial intelligence virtual assistant");
                            lbl_Salida.Content = "My name is Helix";
                        }
                        if (speech == "What can you do?")
                        {
                            viasco.SpeakAsync("I can do whatever you want, Santi");
                            lbl_Salida.Content = "Whatever you want";
                        }
                        if (speech == "Open Google")
                        {
                            viasco.SpeakAsync("Okay Santi. Opening Google");
                            lbl_Salida.Content = "Opening";
                            System.Diagnostics.Process.Start("firefox.exe", "www.google.com");
                        }
                        if (speech == "Thanks")
                        {
                            viasco.SpeakAsync("You´re welcome Santi. Whenever you want");
                            lbl_Salida.Content = "You are welcome";
                        }
                        if (speech == "Open the file explorer")
                        {
                            viasco.SpeakAsync("Okay. Opening file explorer");
                            lbl_Salida.Content = "Opening";
                            System.Diagnostics.Process.Start("explorer.exe");
                        }
                    }
                    else if (idioma_ing == false)
                    {
                        if (speech == "Hola")
                        {
                            viasco.SpeakAsync("Hola");
                            lbl_Salida.Content = "Hola";
                        }
                        if (speech == "¿Como andas?")
                        {
                            viasco.SpeakAsync("Estoy bien, gracias");
                            lbl_Salida.Content = "Me encuentro bien";
                        }
                        if (speech == "¿Quien sos?")
                        {
                            viasco.SpeakAsync("Yo soy Helix, su asistente virtual de inteligencia artificial");
                            lbl_Salida.Content = "Argentina";
                        }
                        if (speech == "Abre el explorador de archivos")
                        {
                            viasco.SpeakAsync("De acuerdo. Abriendo el explorador de archivos");
                            lbl_Salida.Content = "Abriendo";
                            System.Diagnostics.Process.Start("explorer.exe");
                        }
                        if (speech == "Gracias")
                        {
                            viasco.SpeakAsync("No hay de que Santi, cuando quiera");
                            lbl_Salida.Content = "Cuando quiera";
                        }
                    }
                    
                }
            }
    
            private void btn_Ingles_Checked(object sender, RoutedEventArgs e)
            {
                idioma_ing = true;
            }
    
            private void btn_Espanol_Checked(object sender, RoutedEventArgs e)
            {
                idioma_ing = false;
            }
        }
    }


    • Editado AleSantana domingo, 3 de mayo de 2020 21:09
    domingo, 3 de mayo de 2020 21:07

Todas las respuestas

  • Buenos días.

    Cosas que se me ocurren que te pueden estar pasando.

    El fichero de texto que llamas ni contiene nada.

    El método iniciodegramaticas solo es invocado al principio, cuando cambias los radibuton no lo llamas.

    Tu pronunciación en inglés es muy malas y no reconoce los comandos, seguro que a mí me pasaría.

    Pon un punto de interrupción y asegúrate que el programa se ejecuta por donde se tiene que ejecutar en casa momento, revisa que el fichero txt, contiene lo que se espera. Revisa que en el momento de cambiar la selección se carga el nuevo idioma elegido. Y lo de la pronunciación era una broma, pero quizás simplemente sea que no te entiende, cambia el if para que cuando elijas inglés ejecute el español y háblale en español a ver qué pasa.

    Un saludo


    Es de buena educación dar las gracias cuando te ayudan, si alguna respuesta te ha sido de utilidad agradécelo marcándola como útil.
    Blog

    lunes, 4 de mayo de 2020 7:58