Jump to content

Reconhecimento de voz


Simei

Recommended Posts

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

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.