• Domingo 22 de Diciembre de 2024, 08:05

Autor Tema:  Asistente virtual en C#  (Leído 7722 veces)

Langtil

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Asistente virtual en C#
« en: Martes 27 de Septiembre de 2016, 15:05 »
0
Saludos

Hace un tiempo vi por ahí varios asistentes personales que usaban el reconocimiento de voz. Me pareció una buena idea, pero sea como sea los que la hacían aparcaron la idea y no la retomaron. De hecho hay varios asistentes virtuales por ahí, unos que usan macros de Speech Recognizer (para el reconocimiento de voz de Windows), y otros que lo implementan en C# en entorno VS. Es éste último el que más me atrajo, porque puede personalizarse bastante, sobre todo contando al aspecto gráfico en el Blend. Yo soy un usuario sin apenas conocimientos, la verdad, no sé casi nada de programación pero me gusta 'pegarme' con el código porque voy entendiendo su lógica. Aunque obviamente debido a la falta de conocimientos no tengo opción a buscar soluciones por mí mismo

Mi pregunta es si alguien del foro estaría interesado en ayudarme con este asistente, virtual pero muy personal, ya que mi intención es usarlo de manera privada exclusivamente. Por eso no hay ventanas para introducir datos ni nada parecido, sólo una única ventana con el asistente ya creado. Y que si quiero cambiar algo, lo hago a través de código

Ahora mismo quería modificar el código para varias cosas, pero como he dicho soy incapaz porque no sé hacerlo. He buscado tutoriales por internet, pero se refieren siempre a ello de manera genérica y casi siempre dando por sentado gran parte del código, así que no sirve para mi caso particular. Una de ellas es saber si pueden usarse varias frases para el mismo fin (si digo 'Abre Google' o 'Abre el buscador', que ejecute el mismo 'case', otro código para que compruebe online si hay algún correo nuevo en hotmail, y otro para que ejecute acciones tipo minimizar, maximizar, y otros comandos de algunos programas tipo VLC, Winamp y demás

Os paso el código que hice siguiendo los pasos (no es mío) de uno de estos chicos que digo que hicieron tutoriales para crear el asistente. Lo he modificado para que esté a mi gusto, claro

Código: [Seleccionar]
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;
using System.Speech.Synthesis;
using System.IO;

namespace Viernes
{
    /// <summary>
    /// Lógica de interacción para MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        SpeechRecognitionEngine Reconocedor = new SpeechRecognitionEngine();
        SpeechSynthesizer IAViernes = new SpeechSynthesizer();
        string Speech;
        bool HabilitarReconocimiento = true;

        public MainWindow()
        {
            InitializeComponent();
            IAViernes.SpeakAsync("Viernes operativa");
        }

        private void windows_Loaded(object sender, RoutedEventArgs e)
        {
            CargarComandos();
        }

        void CargarComandos()
        {
            Reconocedor.LoadGrammarAsync(new Grammar(new GrammarBuilder(new Choices(File.ReadAllLines(@"Comandos.txt")))));

            Choices Buscadores = new Choices(new string[] { "Gugel", "Yutub" });
            GrammarBuilder Buscar = new GrammarBuilder("Busca en");
            Buscar.Append(Buscadores);
            Buscar.AppendDictation();

            Grammar GramaticaBuscadores = new Grammar(Buscar);
            Reconocedor.LoadGrammar(GramaticaBuscadores);

            //   Reconocedor.LoadGrammarAsync(new DictationGrammar());
            Reconocedor.RequestRecognizerUpdate();
            Reconocedor.SpeechRecognized += Reconocedor_SpeechRecognized;

            IAViernes.SpeakStarted += IAViernes_SpeakStarted;
            IAViernes.SpeakCompleted += IAViernes_SpeakCompleted;

            Reconocedor.AudioLevelUpdated += Reconocedor_AudioLevelUpdated;
            Reconocedor.SetInputToDefaultAudioDevice();
            Reconocedor.RecognizeAsync(RecognizeMode.Multiple);
        }

        void Reconocedor_AudioLevelUpdated(object sender, AudioLevelUpdatedEventArgs e)
        {
            int audiolevel = e.AudioLevel;
            BarraVoz.Value = audiolevel;
        }

        void IAViernes_SpeakCompleted(object sender, SpeakCompletedEventArgs e)
        {
            HabilitarReconocimiento = true;
        }

        void IAViernes_SpeakStarted(object sender, SpeakStartedEventArgs e)
        {
            HabilitarReconocimiento = false;
        }

        void Reconocedor_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
        {
                Speech = e.Result.Text;
         
            if (HabilitarReconocimiento == true)
            {

            switch (Speech)
            {
                case "Viernes":
                    IAViernes.SpeakAsync("¿Sí señor?" + ". . .");
                    LblReconocimiento.Content = "";
                    LblReconocimiento.Content = Speech;
                    break;
                case "Abre Gugel":
                    IAViernes.SpeakAsync("Abriendo el buscador" + ". . .");
                    System.Diagnostics.Process.Start("https://www.google.es/");
                    LblReconocimiento.Content = "";
                    LblReconocimiento.Content = Speech;
                    break;
                case "Abrir visor de imágenes":
                    IAViernes.SpeakAsync("Visor listo señor" + ". . .");
                    System.Diagnostics.Process.Start("C:\\Program Files (x86)\\FastStone MaxView\\MaxView.exe");
                    LblReconocimiento.Content = "";
                    LblReconocimiento.Content = Speech;
                    break;
                case "Apágate":
                    IAViernes.Speak("Cerrando programa" + ". . .");
                    App.Current.Shutdown();
                    // Close();
                    break;

                    default:
                    break;
            }

            }

        }

        private void window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            DragMove();
        }
    }
}


¿A alguien le apetece ayudarme con este asunto? ¡Un saludo!