Stránka 1 z 1

[C#] Rozpoznávání řeči jako služba

Odeslat příspěvekNapsal: 12. 5. 2016 21:36
od SigmaError
Zdravím,

chtěl jsem si vytvořit program, který by rozpoznal mluvená slova a následně po nich konal viz sample.

Kód: Vybrat vše
            sSynth = new SpeechSynthesizer();
            pBuilder = new PromptBuilder();
            sRecognize = new SpeechRecognitionEngine();

            Choices sList = new Choices();
            sList.Add(new string[] { "systemrestart", "systemshutdown", "lockdown"});
            Grammar gr = new Grammar(new GrammarBuilder(sList));
            try
            {
                sRecognize.RequestRecognizerUpdate();
                sRecognize.LoadGrammar(gr);
                sRecognize.SpeechRecognized += sRecognize_SpeechRecognized;
                sRecognize.SetInputToDefaultAudioDevice();
                sRecognize.RecognizeAsync(RecognizeMode.Multiple);
                sRecognize.Recognize();
            }
            catch (Exception ex) {

                using (StreamWriter sw = new StreamWriter("C:\\error.txt"))
                {
                    sw.WriteLine(ex.Message);
                    sw.Close();
                }

            }


K tomu nějaká ta metoda na reakci rozpoznávání.

Kód: Vybrat vše
        private void sRecognize_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
        {
            switch (e.Result.Text)
            {
                case "systemrestart":
                    Process.Start("shutdown", "-r");
                    break;

                case "systemshutdown": 
                    Process.Start("shutdown", "-s -t 0");
                    break;

                case "lockdown":
                    Process.Start("rundll32.exe", "user32.dll, LockWorkStation");
                    break;
            }
        }


To funguje krásně, jenže pokud to chci spustit jako službu, tak najednou na mikrofón program nereaguje a vykoná nic.

Službu jsem úspěšně přes InstallUtil nainstaloval do systému a "funguje" (čti je spuštěná a v eventlogu nejsou žádné chyby). Napadá někoho jak by se dal tento problém vyřešit?

Díky za hinty.

Re: [C#] Rozpoznávání řeči jako služba

Odeslat příspěvekNapsal: 13. 5. 2016 07:22
od Nargon
Napadá mě problém zde: sRecognize.SetInputToDefaultAudioDevice();
To by mělo snímat zvuk z "výchozího zařízení". Což se nejspíše liší pro každého uživatele a uživatel pod kterým je ta služba spuštěná nemá nastavený mikrofon jako výchozí zařízení pro záznam zvuku.

Re: [C#] Rozpoznávání řeči jako služba

Odeslat příspěvekNapsal: 13. 5. 2016 13:10
od SigmaError
Ok, tomu rozumím, tzn. že buď spustit službu jako aktuální uživatel, což by teoreticky šlo, ale zase služba by tak jako tak nefungovala korektně např. při Windows loginu, což byl jeden z mých záměrů.
Další možností tedy je nasměrování na stejný vstup i pro uživatele LocalSystem. Je vůbec tato možnost reálná? Jak by se dalo řešit. Pokud jsem hledal správně, tak jsem nic takového nenašel viz. Stackoverflow, kde někdo jiný řešil stejný problém, ale odpověď neměla efekt.

Re: [C#] Rozpoznávání řeči jako služba

Odeslat příspěvekNapsal: 13. 5. 2016 14:56
od piErcE
Založ v systému nového uživatele pro tuto službu .. a službu pak v ovlaádacím panelu nastav, aby běžěla pod tímto uživatelem.

služba pak samozrejmě poběží v kontextu daného uživatele, i když přihlášen bude někdo jiný (nebo nebud epřihlášen nikdo).

Re: [C#] Rozpoznávání řeči jako služba

Odeslat příspěvekNapsal: 14. 5. 2016 19:24
od SigmaError
No to není tak jednoduché, protože (opravte mě pokud se mýlím) jediný uživatel který běží pořád je ten systémový účet (NT AUTHORITY\SYSTEM), právě pod ním bych rád spustil tuto službu aby měla přístup k mikrofonu už při windows loginu.

Z dostupných zdrojů jsem se bohužel dočetl, že MS nemá žádné veřejné API ke správě výchozího zvukového zařízení, aby vše bylo v režii uživatele :/

Re: [C#] Rozpoznávání řeči jako služba

Odeslat příspěvekNapsal: 14. 5. 2016 19:46
od piErcE
Kdyz te servise v ovladacich paneluch nastavis uzivatele, pod kterym ma bezet, pobezi pod danym uzivatelem i kdyb byl prihlasen uplne nekdo jiny.

Vyzkousej to, pak mudruj.

Re: [C#] Rozpoznávání řeči jako služba

Odeslat příspěvekNapsal: 14. 5. 2016 20:12
od SigmaError
Ok sorry, už jsem to pochopil. Ačkoliv teď běží v kontextu aktuálního uživatele, hlas z mikrofonu to stejně nedetekuje. Nemá někdo nějaký další nápad?

Re: [C#] Rozpoznávání řeči jako služba

Odeslat příspěvekNapsal: 25. 5. 2016 12:09
od rudidlo
A C:\\error.txt je také prázdný?

Re: [C#] Rozpoznávání řeči jako služba

Odeslat příspěvekNapsal: 26. 5. 2016 11:12
od mracka michal
SigmaError píše:Ok sorry, už jsem to pochopil. Ačkoliv teď běží v kontextu aktuálního uživatele, hlas z mikrofonu to stejně nedetekuje. Nemá někdo nějaký další nápad?


Skus sa pod tym pouzivatelom raz prihlasit (aby sa vytvoril profil). Ked uz budes prihlaseny, rovno skontroluj nastavenie audio zariadenia.

Ak to ma bezat pod systemovym uctom - mas v nastaveniach sluzby povolenu interakciu s desktopom?