Esempio n. 1
0
        // Método chamado quando o Form for carregado
        private void Form1_Load(object sender, EventArgs e)
        {
            AIML.ConfigAIMLFiles();

            Thread.CurrentThread.Priority = ThreadPriority.Highest; // setamos o nível de prioridade da thread atual
            // isso manda o Sistema ajudar essa bagaça
            askRules.Add("o que é");
            askRules.Add("quem é");
            askRules.Add("quem foi");
            askRules.Add("defina");
            askRules.Add("o que são");
            askRules.Add("fale sobre");
            askRules.Add("definição de");
            askRules.Add("definição da");
            askRules.Add("busca");
            askRules.Add("artigo sobre");

            // trackBar
            trackBar1.Maximum = 20;
            trackBar1.Value   = 10;
            Speaker.SetVolume(100);

            // detalhes do computador
            //lblInfo.Text += SystemInfo.GetUserNameString() + "\n";
            //lblInfo.Text += SystemInfo.GetOSArchString() + "\n";

            // Aqui vamos cuidar dos elementos visuais
            progressBar1.Maximum        = 100;   // valor máximo da progressBar
            pictureBox1.Visible         = false; // não vai mostrar a pictureBox1, a que vai ser usada para mostrar o status
            progressBarCPUUsage.Maximum = 100;

            SetVoice();              // chamar o método para setar a voz

            LoadSpeechRecognition(); // chamar o método que vai fazer o reconhecimento

            LoadUserSettings();      // carregar info do usuário

            // Saudação
            InitializingProgram.Start();

            //loadingSystem = new LoadingSystem();
            //loadingSystem.ShowDialog(); // mostrat diálogo
            //Speaker.Speak("olá senhor, em que posso ajudar?"); // falar algo

            timer2.Tick += timer2_Tick; // timer do evento das progressBar's 1,5 segundos de intervalo
        }
Esempio n. 2
0
        // Método do evento do reconhecimento
        private void reconhecido(object s, SpeechRecognizedEventArgs e) // passamos a classe EventArgs SpeechRecognized
        {
            string speech     = e.Result.Text;                          // criamos uma variável que contêm a palavra ou frase reconhecida
            double confidence = e.Result.Confidence;                    // criamos uma variável para a confiança

            if (confidence > 0.4)                                       // pegar o resultado da confiança, se for maior que 35% faz algo
            {
                label1.Text = "Reconhecido:\n" + speech;                // mostrar o que foi reconhecido


                switch (e.Result.Grammar.Name)            // vamos usar o nome da gramática para executar as ações
                {
                case "Chats":                             // caso for uma conversa
                    Conversation.SaySomethingFor(speech); // vamos usar a classe que faz algo sobre
                    break;

                case "Dumme":
                    if (DummeIn.InStartingConversation.Any(x => x == speech))
                    {
                        int randIndex = rnd.Next(0, DummeOut.OutStartingConversation.Count);
                        Speaker.Speak(DummeOut.OutStartingConversation[randIndex]);
                    }
                    else if (DummeIn.InQuestionForDumme.Any(x => x == speech))
                    {
                        int randIndex = rnd.Next(0, DummeOut.OutQuestionForDumme.Count);
                        Speaker.Speak(DummeOut.OutQuestionForDumme[randIndex]);
                    }
                    else if (DummeIn.InDoWork.Any(x => x == speech))
                    {
                        int randIndex = rnd.Next(0, DummeOut.OutDoWork.Count);
                        Speaker.Speak(DummeOut.OutDoWork[randIndex]);
                    }
                    else if (DummeIn.InDummeStatus.Any(x => x == speech))
                    {
                        int randIndex = rnd.Next(0, DummeOut.OutDummeStatus.Count);
                        Speaker.Speak(DummeOut.OutDummeStatus[randIndex]);
                    }
                    else if (DummeIn.InJarvis.Any(x => x == speech))
                    {
                        int randIndex = rnd.Next(0, DummeOut.OutJarvis.Count);
                        Speaker.Speak(DummeOut.OutJarvis[randIndex]);
                    }
                    break;

                case "Commands":
                    switch (speech)
                    {
                    case "quais são as notícias":
                        newsFromG1 = G1FeedNews.GetNews();
                        Speaker.Speak("Já carreguei as notícias");
                        break;

                    case "próxima notícia":
                        Speaker.Speak("Título da notícia.. " + newsFromG1[newsIndex].Title
                                      + " .. " + newsFromG1[newsIndex].Text);
                        newsIndex++;
                        break;
                    }
                    if (speech == "até mais jarvis")
                    {
                        ExitNow();     // chama oo método
                    }
                    else if (speech == "minimizar a janela principal")
                    {
                        MinimizeWindow();     // minimizar
                    }
                    else if (speech == "mostrar janela principal")
                    {
                        BackWindowToNormal();     // mostrar janela principal
                    }
                    else
                    {
                        Commands.Execute(speech);
                    }
                    break;

                case "Jokes":
                    break;

                case "Calculations":
                    Calculations.DoCalculation(speech);
                    break;

                case "Process":
                    ProcessControl.OpenOrClose(speech);
                    break;

                case "Sites":     // caso sites
                    string[] replaces = { "abrir", "iniciar", "carregar", "ir para o" };
                    string   site     = "";
                    for (int i = 0; i < replaces.Length; i++)
                    {
                        if (speech.StartsWith(replaces[i]))     // verifica se string começa com um destes, se sim remove ele.
                        {
                            site = speech.Replace(replaces[i], "");
                        }
                    }
                    site = site.Trim();
                    foreach (KeyValuePair <string, string> entry in dictCmdSites)
                    {
                        if (entry.Key == site)
                        {
                            Speaker.SpeakOpenningProcess(site);
                            Process.Start(entry.Value);
                        }
                    }
                    break;

                case "Control":
                    motionDetection = new MotionDetection();
                    motionDetection.Show();
                    break;

                case "Search":
                    string[] parts = speech.Split(' ');
                    string   text  = "";
                    for (int k = 0; k < parts.Length; k++)
                    {
                        if (System.Text.RegularExpressions.Regex.IsMatch(parts[k], "[A-Z]"))
                        {
                            text += parts[k] + " ";
                        }
                    }
                    if (speech.ToLower().EndsWith("youtube"))
                    {
                        if (speech.Contains(" "))
                        {
                            speech = speech.Replace(" ", "+");
                        }
                        Speaker.SpeakRand("certo pesquisando " + text + " no youtube", "tudo bem", "okei, buscando por " + text);
                        loadPage();
                        webLoader.Start("https://www.youtube.com/results?search_query=" + text);
                    }
                    else if (speech.ToLower().EndsWith("google"))
                    {
                        if (speech.Contains(" "))
                        {
                            speech = speech.Replace(" ", "+");
                        }
                        Speaker.SpeakRand("certo pesquisando " + text + " no google", "tudo bem", "okei, buscando por " + text,
                                          "okei, buscando por " + text + " no google");
                        loadPage();
                        webLoader.Start("http://images.google.com/images?q=" + text + "&start=900&filter=1");
                    }
                    break;

                case "QA":
                    foreach (var t in commandsForQA)
                    {
                        if (speech.StartsWith(t))
                        {
                            speech = speech.Replace(t, "");
                        }
                    }
                    Speaker.Speak(AIML.GetOutputChat(speech));
                    break;

                default:                                       // caso padrão
                    Speaker.Speak(AIML.GetOutputChat(speech)); // pegar resposta
                    break;
                }
            }
        }
Esempio n. 3
0
        private void LoadSpeechRecognition()                                                  // fazer o que é preciso para o reconhecimento de voz
        {
            sre = new SpeechRecognitionEngine(new System.Globalization.CultureInfo("pt-BR")); // instanciando  o reconhecedor passando a cultura da engine
            sre.SetInputToDefaultAudioDevice();                                               // definindo o microfone como entrada de aúdio

            commandsForQA = new List <string>();
            commandsForQA.Add("o que é");
            commandsForQA.Add("qual é");
            commandsForQA.Add("defina");
            commandsForQA.Add("definição de");

            // vamos processar o AIML aqui
            Choices cAIML = new Choices(AIML.GetWordsOrSentences()); // obtendo frases e palavras

            // Vamos ler o arquivo dos comandos
            string[] cmds = File.ReadAllText("comandos.txt", Encoding.UTF8).Split('$'); // lendo ele e dividindo em linhas

            Choices cControls = new Choices();

            cControls.Add("detecção de movimento");

            // Alarme
            Choices cAlarm = new Choices();

            for (int i = 1; i <= 12; i++)
            {
                cAlarm.Add(i.ToString());
            }

            // Criação das Gramáticas, Choices
            Choices cChats = new Choices(); // palavras ou frases de conversa

            cChats.Add("bom dia");
            cChats.Add("boa tarde");
            cChats.Add("boa noite");
            cChats.Add("jarvis você está ai?");
            cChats.Add("ainda acordado jarvis?");
            cChats.Add("alguma ideia jarvis?");
            cChats.Add("obrigado jarvis");


            Choices cDummes = new Choices(); // conversa mais desenrolada

            cDummes.Add(DummeIn.InStartingConversation.ToArray());
            cDummes.Add(DummeIn.InQuestionForDumme.ToArray());
            cDummes.Add(DummeIn.InDoWork.ToArray());
            cDummes.Add(DummeIn.InDummeStatus.ToArray());
            cDummes.Add(DummeIn.InJarvis.ToArray());

            Choices cCommands = new Choices(); // palavras ou frases que são comandos

            // informações de hora e data
            cCommands.Add("que horas são");
            cCommands.Add("que dia é hoje");
            cCommands.Add("data de hoje");
            cCommands.Add("em que mês estamos");
            cCommands.Add("em que ano estamos");
            cCommands.Add("minimizar a janela principal");
            cCommands.Add("mostrar janela principal");


            // Comandos do programa
            cCommands.Add("exibir lista de comandos");

            // status do usuário
            cCommands.Add("estou com sono");
            cCommands.Add("estou indo dormir");

            // sair do JARVIS
            cCommands.Add("até mais jarvis");

            // configurar o sintetizador
            cCommands.Add("pare de falar");

            // notícias
            cCommands.Add("quais são as notícias");
            cCommands.Add("próxima notícia");

            // media player
            cCommands.Add("media player");
            cCommands.Add("selecionar arquivo para o media player");
            cCommands.Add("pausar");
            cCommands.Add("continuar");
            cCommands.Add("parar");
            cCommands.Add("fechar media player");
            cCommands.Add("abrir diretório para reproduzir");
            cCommands.Add("próximo");
            cCommands.Add("anterior");
            cCommands.Add("aumentar volume do media player");
            cCommands.Add("diminuir volume do media player");
            cCommands.Add("media player sem som");
            cCommands.Add("media player com som");
            cCommands.Add("media player em tela cheia");
            cCommands.Add("que arquivo está tocando");

            // informações do sistema
            cCommands.Add("em quanto estar o uso do processador?");
            cCommands.Add("quanta memória ram estar sendo usada?");
            cCommands.Add("quanta mamória ram ainda há livre?");
            cCommands.Add("quanta memória ram há no total?");

            // Comandos, adicionar
            cCommands.Add("adicionar novo comando");
            // processos
            cCommands.Add("detalhes dos processos");
            // processList
            cCommands.Add("lista de processos");
            cCommands.Add("fechar o processo selecionado");
            // jarvis
            cCommands.Add("introdução ao assistente jarvis");

            cCommands.Add("desligar computador");
            cCommands.Add("reiniciar computador");
            cCommands.Add("cancelar desligamento");
            cCommands.Add("cancelar reinicialização");

            // Youtube
            cCommands.Add("tocar algo do youtube");
            cCommands.Add("adicionar link para o youube");
            cCommands.Add("previsão do tempo");

            // controle de janelas
            cCommands.Add("alterar de janela");
            cCommands.Add("fechar janela");

            // comandos de teclas
            cCommands.Add("copiar texto selecionado");
            cCommands.Add("colar texto selecionado");
            cCommands.Add("salvar este arquivo");
            cCommands.Add("selecionar tudo");
            cCommands.Add("nova linha");

            // Comandos do canal Código Logo
            cCommands.Add("reproduza um vídeo do canal");


            //Choices cNumbers = new Choices(File.ReadAllLines("n.txt")); // números

            Choices cProcess = new Choices(); // lista de comandos

            cProcess.Add("bloco de notas");
            cProcess.Add("windows media player");
            cProcess.Add("prompt de comando");
            cProcess.Add("gerenciador de tarefas");
            cProcess.Add("minhas pastas");
            cProcess.Add("calculadora");
            cProcess.Add("mapa de caracteres");
            cProcess.Add("limpeza de disco");
            cProcess.Add("gerenciamento de cores");
            cProcess.Add("serviços de componente");
            cProcess.Add("gerenciamento de computador");
            cProcess.Add("definir programas padrão");
            cProcess.Add("painel de controle");
            cProcess.Add("otimizador de texto");
            cProcess.Add("calibragem de cores");
            cProcess.Add("desfragmentador de disco");
            cProcess.Add("adicionar um novo dispositivo");
            cProcess.Add("gerenciador de dispositivos");
            cProcess.Add("discagem telefônica");
            cProcess.Add("gerenciamento de disco");

            Choices cCustomSites = new Choices(); // lista de comandos do usuário

            Choices      webSearch = new Choices();
            StreamReader srWords   = new StreamReader("words.txt", Encoding.UTF8);

            while (srWords.Peek() >= 0)
            {
                try
                {
                    webSearch.Add(srWords.ReadLine());
                }
                catch { }
            }
            srWords.Close();

            // vamos processar o comandos.txt
            for (int i = 0; i < cmds.Length; i++)
            {
                try
                {
                    if (cmds[i].StartsWith("site#"))
                    {
                        cmds[i] = cmds[i].Replace("site#", "");
                        string[] temp = cmds[i].Split('#');
                        cCustomSites.Add(temp[0]); // adicionamos a palavra na gramática
                        dictCmdSites.Add(temp[0], temp[1]);
                    }
                }
                catch { }
            }

            // Gramática do alarme
            GrammarBuilder gbAlarm = new GrammarBuilder();

            gbAlarm.Append(new Choices("defina alarme", "alarme às", "despertador às"));
            gbAlarm.Append(cAlarm);
            gbAlarm.Append(new Choices("horas da manhã", "horas da tarde", "horas da noite"));

            // GrammarsBuilders
            GrammarBuilder gbChats = new GrammarBuilder(); // vamos criar um grammaBuilder para as conversas

            gbChats.Append(cChats);                        // já foi feito

            GrammarBuilder gbDumme = new GrammarBuilder(); // conversa solta

            gbDumme.Append(cDummes);

            GrammarBuilder gbCommands = new GrammarBuilder(); //para a lista de comandos

            gbCommands.Append(cCommands);                     // feito

            GrammarBuilder gbControls = new GrammarBuilder();

            gbControls.Append(cControls);

            /*
             * GrammarBuilder gbCalculations = new GrammarBuilder(); // gramática que vai fazer cálculos
             * gbCalculations.Append("quanto é"); // primeira parte
             * gbCalculations.Append(cNumbers); // números
             * gbCalculations.Append(new Choices("mais", "menos", "dividido por", "vezes", "porcento de"));
             * gbCalculations.Append(cNumbers); // números novamente
             * // essa gramática pode fazer por exemplo "quanto é 65 vezes 42", "quanto é 14 porcento de 500"
             */

            GrammarBuilder gbProcess = new GrammarBuilder();

            gbProcess.Append(new Choices("abrir", "fechar"));                               // comando
            gbProcess.Append(cProcess);                                                     // adicionar lista de processos

            GrammarBuilder gbCustomSites = new GrammarBuilder();                            // sites e páginas

            gbCustomSites.Append(new Choices("abrir", "iniciar", "carregar", "ir para o")); // parametros
            gbCustomSites.Append(cCustomSites);

            GrammarBuilder gbWebSearch = new GrammarBuilder();

            gbWebSearch.Append(new Choices("pesquisar", "buscar", "procurar", "buscar por", "pesquisar vídeo de", "imagem de",
                                           "imagens de", "pesquisar imagem de", "pesquisar por"));
            gbWebSearch.Append(webSearch);
            gbWebSearch.Append(new Choices("no youtube", "no google"));


            GrammarBuilder gbQA = new GrammarBuilder(); // gramática para responder perguntas

            gbQA.Append(new Choices(commandsForQA.ToArray()));
            gbQA.Append(cAIML);

            // Grammars

            Grammar gQA = new Grammar(gbQA);

            gQA.Name = "QA";

            Grammar gChats = new Grammar(gbChats); // gramática das conversas

            gChats.Name = "Chats";                 // damos um nome para a gramática, pois vamos usa isso mais adiante

            Grammar gDumme = new Grammar(gbDumme);

            gDumme.Name = "Dumme";                             // nome

            Grammar gCommands = new Grammar(gbCommands);       // gramática dos comandos

            gCommands.Name = "Commands";                       // nome

            Grammar gCustomSites = new Grammar(gbCustomSites); // gramáticas dos sites

            gCustomSites.Name = "Sites";


            Grammar gAIML = new Grammar(new GrammarBuilder(cAIML));

            gAIML.Name = "AIML";

            /*
             * Grammar gCalculations = new Grammar(gbCalculations);
             * gCalculations.Name = "Calculations"; */

            Grammar gProcess = new Grammar(gbProcess);

            gProcess.Name = "Process";
            // Agora vamos carregar as gramáticas

            Grammar gWebSearch = new Grammar(gbWebSearch);

            gWebSearch.Name = "Search";


            Grammar gControls = new Grammar(gbControls);

            gControls.Name = "Control";

            // podemos fazer de várias maneiras, por enquanto vou fazer o seguinte
            // Lista de gramáticas
            List <Grammar> grammars = new List <Grammar>();

            grammars.Add(gQA);
            grammars.Add(gChats);
            grammars.Add(gDumme);
            grammars.Add(gCommands); // comandos
            grammars.Add(gAIML);
            grammars.Add(gWebSearch);
            grammars.Add(gControls);
            //grammars.Add(gCalculations);
            grammars.Add(gProcess);
            grammars.Add(gCustomSites);

            ParallelOptions op = new ParallelOptions()
            {
                MaxDegreeOfParallelism = 4
            };

            Parallel.For(0, grammars.Count, op, i => // loop paralelo
            {
                sre.LoadGrammar(grammars[i]);        // carregar gramática
            });

            speechRecognitionActived       = true;                                                             // reconhecimento de voz ativo!
            sre.SpeechRecognized          += new EventHandler <SpeechRecognizedEventArgs>(reconhecido);        // evento do reconhecimento
            sre.AudioLevelUpdated         += new EventHandler <AudioLevelUpdatedEventArgs>(audioElevou);       // quando o aúdio é elevadosre
            sre.SpeechRecognitionRejected += new EventHandler <SpeechRecognitionRejectedEventArgs>(rejeitado); // quando o reconhecimento de voz falhou
            sre.SpeechDetected            += new EventHandler <SpeechDetectedEventArgs>(vozDetectada);         // alguma voz foi detectada
            sre.LoadGrammarCompleted      += new EventHandler <LoadGrammarCompletedEventArgs>(loaded);         // gramática carregada
            sre.RecognizeAsync(RecognizeMode.Multiple);                                                        // iniciar o reconhecimento async e múltiplo
        }
Esempio n. 4
0
        // Método do evento do reconhecimento
        private void reconhecido(object s, SpeechRecognizedEventArgs e) // passamos a classe EventArgs SpeechRecognized
        {
            string speech     = e.Result.Text;                          // criamos uma variável que contêm a palavra ou frase reconhecida
            double confidence = e.Result.Confidence;                    // criamos uma variável para a confiança

            if (confidence > 0.4)                                       // pegar o resultado da confiança, se for maior que 35% faz algo
            {
                label1.Text = "Reconhecido:\n" + speech;                // mostrar o que foi reconhecido


                switch (e.Result.Grammar.Name)            // vamos usar o nome da gramática para executar as ações
                {
                case "Chats":                             // caso for uma conversa
                    Conversation.SaySomethingFor(speech); // vamos usar a classe que faz algo sobre
                    break;

                case "Dumme":
                    if (DummeIn.InStartingConversation.Any(x => x == speech))
                    {
                        int randIndex = rnd.Next(0, DummeOut.OutStartingConversation.Count);
                        Speaker.Speak(DummeOut.OutStartingConversation[randIndex]);
                    }
                    else if (DummeIn.InQuestionForDumme.Any(x => x == speech))
                    {
                        int randIndex = rnd.Next(0, DummeOut.OutQuestionForDumme.Count);
                        Speaker.Speak(DummeOut.OutQuestionForDumme[randIndex]);
                    }
                    else if (DummeIn.InDoWork.Any(x => x == speech))
                    {
                        int randIndex = rnd.Next(0, DummeOut.OutDoWork.Count);
                        Speaker.Speak(DummeOut.OutDoWork[randIndex]);
                    }
                    else if (DummeIn.InDummeStatus.Any(x => x == speech))
                    {
                        int randIndex = rnd.Next(0, DummeOut.OutDummeStatus.Count);
                        Speaker.Speak(DummeOut.OutDummeStatus[randIndex]);
                    }
                    else if (DummeIn.InJarvis.Any(x => x == speech))
                    {
                        int randIndex = rnd.Next(0, DummeOut.OutJarvis.Count);
                        Speaker.Speak(DummeOut.OutJarvis[randIndex]);
                    }
                    break;

                case "Commands":
                    switch (speech)
                    {
                    case "quais são as notícias":
                        newsFromG1 = G1FeedNews.GetNews();
                        Speaker.Speak("Já carreguei as notícias");
                        break;

                    case "próxima notícia":
                        Speaker.Speak("Título da notícia.. " + newsFromG1[newsIndex].Title
                                      + " .. " + newsFromG1[newsIndex].Text);
                        newsIndex++;
                        break;
                    }
                    if (speech == "até mais jarvis")
                    {
                        ExitNow();     // chama oo método
                    }
                    else if (speech == "minimizar a janela principal")
                    {
                        MinimizeWindow();     // minimizar
                    }
                    else if (speech == "mostrar janela principal")
                    {
                        BackWindowToNormal();     // mostrar janela principal
                    }
                    else
                    {
                        Commands.Execute(speech);
                    }
                    break;

                case "Jokes":
                    break;

                case "Calculations":
                    Calculations.DoCalculation(speech);
                    break;

                case "Process":
                    ProcessControl.OpenOrClose(speech);
                    break;

                case "Control":
                    motionDetection = new MotionDetection();
                    motionDetection.Show();
                    break;

                default:                                       // caso padrão
                    Speaker.Speak(AIML.GetOutputChat(speech)); // pegar resposta
                    break;
                }
            }
        }