// 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 }
// 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; } } }
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 }
// 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; } } }