Simei Posted February 28, 2020 at 11:46 AM Report Share #617444 Posted February 28, 2020 at 11:46 AM Estou a desenvolver um programa de reconhecimento de voz que liga e desliga luzes por voz. Estou com dificuldades no reconhecimento de voz no momento em que ele entra no while abaixo e deixa de reconhecer voz. Agradeço qualquer tipo de ajuda. public void Sre_Reconhecimento(object sender, SpeechRecognizedEventArgs e) { string frase = e.Result.Text; bool ouvir; ouvir = false; MessageBox.Show(frase); if (frase.Equals("Doctor house")) { ouvir = true; } while (ouvir == true) { if (frase.Equals("Ligar luz da sala")) { MessageBox.Show("Luz ligada"); serialPort1.Open(); serialPort1.WriteLine("on3"); serialPort1.Close(); Thread.Sleep(700); resposta.Speak("Luzes ligadas"); luz = true; ouvir = false; } if (frase.Equals("Desligar luz da sala")) { serialPort1.Open(); serialPort1.WriteLine("off3"); serialPort1.Close(); Thread.Sleep(700); resposta.Speak("Luzes des ligadas"); luz = true; } if (frase.Equals("Ligar luz do quarto")) { serialPort1.Open(); serialPort1.WriteLine("on4"); serialPort1.Close(); Thread.Sleep(700); resposta.Speak("Luzes ligadas"); luz = true; } if (frase.Equals("Desligar luz do quarto")) { serialPort1.Open(); serialPort1.WriteLine("off4"); serialPort1.Close(); Thread.Sleep(700); resposta.Speak("Luzes des ligadas"); luz = true; } if (frase.Equals("Ligar luz da garagem")) { serialPort1.Open(); serialPort1.WriteLine("on5"); serialPort1.Close(); Thread.Sleep(700); resposta.Speak("Luzes ligadas"); luz = true; } if (frase.Equals("Desligar luz da garagem")) { serialPort1.Open(); serialPort1.WriteLine("off5"); serialPort1.Close(); Thread.Sleep(700); resposta.Speak("Luzes des ligadas"); luz = true; } if (frase.Equals("Ligar luz da casa de banho")) { serialPort1.Open(); serialPort1.WriteLine("on6"); serialPort1.Close(); Thread.Sleep(700); resposta.Speak("Luzes ligadas"); luz = true; } if (frase.Equals("Desligar luz da casa de banho")) { serialPort1.Open(); serialPort1.WriteLine("off6"); serialPort1.Close(); Thread.Sleep(700); resposta.Speak("Luzes des ligadas"); luz = true; } if (frase.Equals("Ligar luz da cozinha")) { serialPort1.Open(); serialPort1.WriteLine("on7"); serialPort1.Close(); Thread.Sleep(700); resposta.Speak("Luzes ligadas"); luz = true; } if (frase.Equals("Desligar luz da cozinha")) { serialPort1.Open(); serialPort1.WriteLine("off7"); serialPort1.Close(); Thread.Sleep(700); resposta.Speak("Luzes des ligadas"); luz = false; } if (frase.Equals("Ligar luz do escritorio")) { serialPort1.Open(); serialPort1.WriteLine("on8"); serialPort1.Close(); Thread.Sleep(700); resposta.Speak("Luzes ligadas"); luz = true; } if (frase.Equals("Desligar luz do escritorio")) { serialPort1.Open(); serialPort1.WriteLine("off8"); serialPort1.Close(); Thread.Sleep(700); resposta.Speak("Luzes des ligadas"); luz = true; } if (frase.Equals("Ligar luz do corredor")) { serialPort1.Open(); serialPort1.WriteLine("on9"); serialPort1.Close(); Thread.Sleep(700); resposta.Speak("Luzes ligadas"); luz = true; } if (frase.Equals("Desligar luz do corredor")) { serialPort1.Open(); serialPort1.WriteLine("off9"); serialPort1.Close(); Thread.Sleep(700); resposta.Speak("Luzes des ligadas"); luz = true; } if (frase.Equals("Ligar luz da rua")) { serialPort1.Open(); serialPort1.WriteLine("on10"); serialPort1.Close(); Thread.Sleep(700); resposta.Speak("Luzes ligadas"); luz = true; } if (frase.Equals("Desligar luz da rua")) { serialPort1.Open(); serialPort1.WriteLine("off10"); serialPort1.Close(); Thread.Sleep(700); resposta.Speak("Luzes des ligadas"); luz = true; } } MessageBox.Show("Estou fora"); } using System.Collections.Generic; using System; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Microsoft.Speech.Recognition; using System.Speech.Synthesis; using System.Globalization; using System.Threading; using System.Diagnostics; using System.IO.Ports; namespace Reconhecimento_de_Voz { public partial class Form1 : Form { bool luz = false; static CultureInfo ci = new CultureInfo("pt-BR"); static SpeechRecognitionEngine reconhecedor; SpeechSynthesizer resposta = new SpeechSynthesizer(); public string[] ListaPalavras = { "Ligar luz da cozinha", "Desligar luz da cozinha", "Doctor house ligar luz da sala", "Ligar luz do escritorio", "Desligar luz do escritorio", "Ligar luz da sala", "Desligar luz da sala", "Ligar luz da casa de banho", "Desligar luz da casa de banho", "Ligar luz do quarto", "Desligar luz do quarto", "Ligar luz do corredor", "Desligar luz do corredor", "Ligar luz da rua", "Desligar luz da rua", "Ligar luz da garagem", "Desligar luz da garagem","Doctor house", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "20", "30", "40", "50", "60"}; public Form1() { InitializeComponent(); init(); //Data Atual var x = DateTime.Now; var date = DateTime.Now; int h = date.Hour; int m = date.Minute; //23 Setembro a 20 de Março das 7:30 ás 18:00 var inv1 = new DateTime(DateTime.Now.Year, 09, 22); var inv2 = new DateTime(DateTime.Now.Year + 1, 03, 20); bool inverno = ((x > inv1) && (x < inv2)); //21 de Março a 22 Setembro das 6:00 da manhã ás 20:30 var verao1 = new DateTime(DateTime.Now.Year, 03, 21); var verao2 = new DateTime(DateTime.Now.Year + 1, 09, 22); bool verao = ((x > verao1) && (x < verao2)); if (verao) { if (h == 6 && m == 00) { serialPort1.Open(); serialPort1.WriteLine("off"); serialPort1.Close(); Thread.Sleep(700); resposta.Speak("Luzes ligadas"); luz = true; } if (h == 20 && m == 30) { serialPort1.Open(); serialPort1.WriteLine("on"); serialPort1.Close(); Thread.Sleep(700); resposta.Speak("Luzes des ligadas"); luz = false; } } if (inverno) { if (h == 7 && m == 30) { serialPort1.Open(); serialPort1.WriteLine("off"); serialPort1.Close(); Thread.Sleep(700); resposta.Speak("Luzes ligadas"); luz = true; } if (h == 18 && m == 00) { serialPort1.Open(); serialPort1.WriteLine("on"); serialPort1.Close(); Thread.Sleep(700); resposta.Speak("Luzes des ligadas"); luz = false; } } try { PortBox.Items.AddRange(SerialPort.GetPortNames()); PortBox.SelectedIndex = 0; serialPort1.BaudRate = (9600); serialPort1.ReadTimeout = (2000); serialPort1.WriteTimeout = (2000); } catch (Exception ex) { MessageBox.Show(ex.Message); } } public void Gramatica() { try { reconhecedor = new SpeechRecognitionEngine(ci); } catch (Exception ex) { MessageBox.Show("Erro ao integrar a lingua escolhida: " + ex.Message); } var gramatica = new Choices(); gramatica.Add(ListaPalavras); var gb = new GrammarBuilder(); gb.Append(gramatica); try { var g = new Grammar(gb); try { reconhecedor.RequestRecognizerUpdate(); reconhecedor.LoadGrammarAsync(g); reconhecedor.SpeechRecognized += Sre_Reconhecimento; reconhecedor.SetInputToDefaultAudioDevice(); resposta.SetOutputToDefaultAudioDevice(); reconhecedor.RecognizeAsync(RecognizeMode.Multiple); } catch(Exception ex) { MessageBox.Show("Microfone não encontrado: " + ex.Message); } } catch(Exception ex) { MessageBox.Show("Erro ao criar gramática: " + ex.Message); } } public void tempo() { } public void init() { resposta.Volume = 100; resposta.Rate = 3; Gramatica(); } public void Sre_Reconhecimento(object sender, SpeechRecognizedEventArgs e) { string frase = e.Result.Text; bool ouvir; ouvir = false; MessageBox.Show(frase); if (frase.Equals("Doctor house")) { ouvir = true; } while (ouvir == true) { if (frase.Equals("Ligar luz da sala")) { MessageBox.Show("Luz ligada"); serialPort1.Open(); serialPort1.WriteLine("on3"); serialPort1.Close(); Thread.Sleep(700); resposta.Speak("Luzes ligadas"); luz = true; ouvir = false; } if (frase.Equals("Desligar luz da sala")) { serialPort1.Open(); serialPort1.WriteLine("off3"); serialPort1.Close(); Thread.Sleep(700); resposta.Speak("Luzes des ligadas"); luz = true; } if (frase.Equals("Ligar luz do quarto")) { serialPort1.Open(); serialPort1.WriteLine("on4"); serialPort1.Close(); Thread.Sleep(700); resposta.Speak("Luzes ligadas"); luz = true; } if (frase.Equals("Desligar luz do quarto")) { serialPort1.Open(); serialPort1.WriteLine("off4"); serialPort1.Close(); Thread.Sleep(700); resposta.Speak("Luzes des ligadas"); luz = true; } if (frase.Equals("Ligar luz da garagem")) { serialPort1.Open(); serialPort1.WriteLine("on5"); serialPort1.Close(); Thread.Sleep(700); resposta.Speak("Luzes ligadas"); luz = true; } if (frase.Equals("Desligar luz da garagem")) { serialPort1.Open(); serialPort1.WriteLine("off5"); serialPort1.Close(); Thread.Sleep(700); resposta.Speak("Luzes des ligadas"); luz = true; } if (frase.Equals("Ligar luz da casa de banho")) { serialPort1.Open(); serialPort1.WriteLine("on6"); serialPort1.Close(); Thread.Sleep(700); resposta.Speak("Luzes ligadas"); luz = true; } if (frase.Equals("Desligar luz da casa de banho")) { serialPort1.Open(); serialPort1.WriteLine("off6"); serialPort1.Close(); Thread.Sleep(700); resposta.Speak("Luzes des ligadas"); luz = true; } if (frase.Equals("Ligar luz da cozinha")) { serialPort1.Open(); serialPort1.WriteLine("on7"); serialPort1.Close(); Thread.Sleep(700); resposta.Speak("Luzes ligadas"); luz = true; } if (frase.Equals("Desligar luz da cozinha")) { serialPort1.Open(); serialPort1.WriteLine("off7"); serialPort1.Close(); Thread.Sleep(700); resposta.Speak("Luzes des ligadas"); luz = false; } if (frase.Equals("Ligar luz do escritorio")) { serialPort1.Open(); serialPort1.WriteLine("on8"); serialPort1.Close(); Thread.Sleep(700); resposta.Speak("Luzes ligadas"); luz = true; } if (frase.Equals("Desligar luz do escritorio")) { serialPort1.Open(); serialPort1.WriteLine("off8"); serialPort1.Close(); Thread.Sleep(700); resposta.Speak("Luzes des ligadas"); luz = true; } if (frase.Equals("Ligar luz do corredor")) { serialPort1.Open(); serialPort1.WriteLine("on9"); serialPort1.Close(); Thread.Sleep(700); resposta.Speak("Luzes ligadas"); luz = true; } if (frase.Equals("Desligar luz do corredor")) { serialPort1.Open(); serialPort1.WriteLine("off9"); serialPort1.Close(); Thread.Sleep(700); resposta.Speak("Luzes des ligadas"); luz = true; } if (frase.Equals("Ligar luz da rua")) { serialPort1.Open(); serialPort1.WriteLine("on10"); serialPort1.Close(); Thread.Sleep(700); resposta.Speak("Luzes ligadas"); luz = true; } if (frase.Equals("Desligar luz da rua")) { serialPort1.Open(); serialPort1.WriteLine("off10"); serialPort1.Close(); Thread.Sleep(700); resposta.Speak("Luzes des ligadas"); luz = true; } } MessageBox.Show("Estou fora"); } private void Form1_Load(object sender, EventArgs e) { } private void PortBox_SelectedIndexChanged(object sender, EventArgs e) { serialPort1.PortName = PortBox.Text; } } } Link to comment Share on other sites More sharing options...
M6 Posted February 28, 2020 at 12:22 PM Report Share #617446 Posted February 28, 2020 at 12:22 PM Antes de mais, isso não é reconhecimento de voz, é reconhecimento de fala, são coisas totalmente distintas. Quanto à tua questão, creio que será porque esse código não é assíncrono. 10 REM Generation 48K! 20 INPUT "URL:", A$ 30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50 40 PRINT "404 Not Found" 50 PRINT "./M6 @ Portugal a Programar." Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now