piątek, 25 kwietnia 2014

Speech - prosty program sterujący wybranymi funkcjami w PC

Witam!
 Ostatnio modne staję się sterowanie głosowe funkcjami w naszym PC-ie.
Poniekąd jest to bardzo wygodne, czasem nie chce nam się wpisywać cały czas
tej samej strony internetowej np: youtube w przeglądarce czy w windowsie 8 szukać
ukrytej opcji zamknięcia czy uśpienia komputera.
Dlatego też dla własnej wygody postanowiłem napisać prosty program, który ułatwi
mi to zadanie :).
Speech - jest to prosty programik, który ma zaimplementowane biblioteki speech z
.NET Frameworka, co z kolei umożliwia syntezę mowy.
Tutaj akurat trzeba podkreślić, że programiści Microsoftu potraktowali sprawę
po macoszemu i nie ma zaimplementowanych polskich słowników gramatycznych
- hmm generalnie jest tylko angielski (USA) przez co trzeba raczej wymawiać frazy
po angielsku. Nie mniej jednak program jest bardzo użyteczny. Modyfikując jedynie
kilka linijek kodu, każdy może program dostosować pod siebie :)


Przycisk "Start" uruchamia proces syntezy przechwytanego przez mikrofon głosu natomiast "Stopem" zatrzymujemy. Możemy również wydać komendę głosową "exit" co zaowocuje wyłączeniem programu.
W ramce obok wypisałem przykład komend, jakie wykorzystuje najczęściej:

- youtube - odpala stronę www.youtube.com
- google - odpala google :)
- antel -odpala forum atnel
- shutdown - powoduje zamknięcie systemu
- reboot - powoduje restart systemu
- sleep - usypianie PC
- hibernate - hibernacja PC
- exit - wyłączenie programu Speech

Czasem trzeba niektóre komendy powtórzyć wyraźnie i głośno nie mniej jednak zachęcam do rozbudowy
programu we własnym zakresie oraz testów:)

Kod:




using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Speech.Recognition;
using System.Speech.Synthesis;
using System.Globalization;
using System.Runtime.InteropServices;

namespace Speach_test
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
            Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
        }
        SpeechSynthesizer sSynth = new SpeechSynthesizer();
        PromptBuilder pBuilder = new PromptBuilder();
        SpeechRecognitionEngine sRecognize = new SpeechRecognitionEngine();

        
        private void Form1_Load(object sender, EventArgs e)
        {
            button2.Enabled = false;
        }
        
        private void button1_Click(object sender, EventArgs e)
        {
            button1.Enabled = false;
            button2.Enabled = true;
            Choices sList = new Choices();
            sList.Add(new string[] { "shutdown", "sleep", "hibernate", "reboot", "youtube", "google","atnel","exit"});
            Grammar gr = new Grammar(new GrammarBuilder(sList));

            try
            {
                sRecognize.RequestRecognizerUpdate();
                sRecognize.LoadGrammar(gr);
                sRecognize.SpeechRecognized += sRecognize_SpeechRecognized;
                sRecognize.SetInputToDefaultAudioDevice();
                sRecognize.RecognizeAsync(RecognizeMode.Multiple);
            }
            catch
            {
                return;
            }
        }

        void sRecognize_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
        {
            //MessageBox.Show("Mowa rozpoznana: " + e.Result.Text.ToString());
            switch (e.Result.Text)
            { 
                case "youtube":
                    System.Diagnostics.Process.Start("http://www.youtube.com");
                    break;
                case "sleep":
                    Application.SetSuspendState(PowerState.Suspend, true, true);// usypianie kompa
                    break;
                case "google":
                    System.Diagnostics.Process.Start("http://www.google.pl");
                    break;
                case "shutdown":
                    System.Diagnostics.Process.Start("ShutDown", "/s /t 0");
                    break;
                case "reboot":
                    System.Diagnostics.Process.Start("Reboot", "/r /t 0");
                    break;
                case "hibernate":
                    Application.SetSuspendState(PowerState.Hibernate, false, false);
                    break;
                case "atnel":
                    System.Diagnostics.Process.Start("http://www.forum.atnel.pl");
                    break;
            }
            if (e.Result.Text == "exit")
            {
                Application.Exit();
            }
            else
            {
                textBox1.Text = textBox1.Text +" "+ e.Result.Text.ToString();
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            button1.Enabled = true;
            button2.Enabled = false;
            sRecognize.RecognizeAsyncStop();
        }
        
    }
}


Brak komentarzy:

Prześlij komentarz