开发者

Problems with speech recognition

I am a starter who is stuck very badly on 开发者_Python百科this initially my main aim is to control robots using speech. Initially I started with making grammar for my speech with this code I was even successful my code is this I made this in windows form application:

using System.Speech.Recognition;
using System.Windows.Forms;
using System.Threading;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // Create a new SpeechRecognizer instance.
            sr = new SpeechRecognizer();

            // Create a simple grammar that recognizes "red", "green", or "blue".
            Choices colors = new Choices();
            colors.Add("red");
            colors.Add("green");
            colors.Add("blue");
            colors.Add("white");

            GrammarBuilder gb = new GrammarBuilder();
            gb.Append(colors);

            // Create the actual Grammar instance, and then load it into the speech recognizer.
            Grammar g = new Grammar(gb);
            sr.LoadGrammar(g);

            // Register a handler for the SpeechRecognized event.
            sr.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(sr_SpeechRecognized);
        }


        // Simple handler for the SpeechRecognized event.
        private void sr_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
        {
            MessageBox.Show(e.Result.Text);
        }    

        private SpeechRecognizer sr;
    }

Now from this code when I speak red , I get red in message box now I want to control motors therefore i need to communicate with my robots therefore i MADE ONE CONSOLE APPLICATION from help from internet FOR SENDING DATA TO MY SERVO CONTROLLER -SSC 32 THE CODE FOR ABOVE IS:

using System.IO.Ports;
using System.Threading;

namespace cConsoleAppMonitorServoCompletion
{
    class Program
    {
        static SerialPort _serialPort;

        static void Main(string[] args)
        {
            try
            {
                _serialPort = new SerialPort();
                _serialPort.PortName = "COM3";
                _serialPort.Open();
                _serialPort.Write("#27 P1600 S750\r");
                Console.WriteLine("#27 P1500 S750\r");
                string output;
                output = "";
                //Example: "Q <cr>" 
                //This will return a "." if the previous move is complete, or a "+" if it is still in progress. 
                while (!(output == ".")) //loop until you get back a period 
                {
                    _serialPort.Write("Q  \r");
                    output = _serialPort.ReadExisting();
                    Console.WriteLine(output);
                    Thread.Sleep(10);
                }
                _serialPort.Close();
            }
            catch (TimeoutException) { }
        }
    }
}

Now I want like when I speak red instead of giving a text box I want get serial command like _serialPort.Write("#27 P1600 S750\r");

Please help I have tried but I was not successful , it is my humble request please answer in more detailed manner , I am a just starter so it will be easy for me thanks in advance.


Controlling a robot using voice recognition... an ambitious project for a starter! There could be a million things going wrong here.

Just as important as the ability to write code is the ability to debug it. What can you tell us further - which parts work, which parts don't? Have you single-stepped through the code to see what happens and when, to diagnose where things start to go wrong?

You could also try some debugging output - Console.WriteLine for example - so we you can see the state of variables and flow of the code as it's running.


It looks like you need to use System.Diagnostics.Process.Start

This page has an example - how to execute console application from windows form?

// Simple handler for the SpeechRecognized event. private void sr_SpeechRecognized(object sender, SpeechRecognizedEventArgs e) { System.Diagnostics.Process.Start( @"cmd.exe", @"/k c:\path\my.exe" ); }

An ambitious starter project indeed!

Update

    private bool LaunchApp(String sAppPath, String sArg)
    {
        bool bSuccess = false;

        try
        {
            //create a new process
            Process myApp = new Process();
            myApp.StartInfo.FileName = sAppPath;
            myApp.StartInfo.Arguments = sArg;
            bSuccess = myApp.Start();
        }
        catch (Win32Exception e)
        {
            MessageBox.Show("Error Details: {0}", e.Message);
        }

        return bSuccess;
    }


if Now I want like when I speak red instead of giving a text box I want get serial command means - just to _serialPort.Write("#27 P1600 S750\r"); instead of showing messagebox (i.e. MessageBox.Show(e.Result.Text);) then task is really simple. just copy-paste that code. and add using System.IO.Ports; so that u can work with ports.

so prolly ur code will look like this:

private void sr_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
        {
            //MessageBox.Show(e.Result.Text);
            try
            {
                _serialPort = new SerialPort();
                _serialPort.PortName = "COM3";
                _serialPort.Open();
                _serialPort.Write("#27 P1600 S750\r");
                Console.WriteLine("#27 P1500 S750\r");
                string output;
                output = "";
                //Example: "Q <cr>" 
                //This will return a "." if the previous move is complete, or a "+" if it is still in progress. 
                while (!(output == ".")) //loop until you get back a period 
                {
                    _serialPort.Write("Q  \r");
                    output = _serialPort.ReadExisting();
                    Console.WriteLine(output);
                    Thread.Sleep(10);
                }
                _serialPort.Close();
            }
            catch (TimeoutException) { }

        }

p.s. if you don't understand how SerialPort Class works go to MSDN

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜