C# Visual Studio 2015 + Microsoft.Speech.Recognition / Rozpoznawanie mowy

0

Witam,

Próbuję napisać program który będzie rozpoznawał moją mowę i coś mi nie idzie. Wrzucam tego posta bo może zauważycie jakiegoś babola.
Po uruchomieniu programu, włącza się konsola ale nie jest wyświetlane to co mówię. Czegoś mi brakuje ? VS nie zgłasza żadnych błędów.

Mój kod:

using System;
using Microsoft.Speech.Recognition;


namespace RMTEST_v12_08_2020
{

    class Program
    {


        static void Main(string[] args)
        {
            using (
            SpeechRecognitionEngine recognizer =
            new SpeechRecognitionEngine(
            new System.Globalization.CultureInfo("pl-PL")))

            {
                recognizer.SpeechRecognized +=
                new EventHandler<SpeechRecognizedEventArgs>(recognizer_SpeechRecognized);

                recognizer.SetInputToDefaultAudioDevice();


                while (true)
                {
                    Console.ReadLine();
                }
            }
        }

        static void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
        {
            Console.WriteLine("Recognized text: " + e.Result.Text);
        }
    }
}
0

Czytałem i widzę, że Polski znajduje się na liście.

https://docs.microsoft.com/pl-pl/azure/cognitive-services/speech-service/language-support

Angielskich słów też nie rozpoznaje.

0

No ale daleś link do Azure service, a windowsowy Speech.Recognition to raczej nie to samo. Przynajmniej tak mi się wydaje, bo kiedyś próbowałem się bawić.

Twój kod faktycznie nie działa. Ale w dokumentacji z mojego posta masz działający kod.

0

Ja używam Microsoft.Speech.Recognition a Ty dałeś link do System.Speech.Recognition.

Próbowałem używać to co Ty podesłałeś System.Speech.Recognition ale wtedy dostawałem komunikat: Nie znaleziono aparatu rozpoznawania o wymaganym identyfikatorze.\r\nNazwa parametru: culture"} System.ArgumentException

EDIT:

Coś się poprawiło. Teraz mój kod wygląda jak poniżej i rozpoznaje słowa "witaj", "cześć". Pytanie czy nie ma gotowego wbudowanego słownika słów ?

using System;
using Microsoft.Speech.Recognition;
//using System.Speech.Recognition;


namespace RM_v12_08_2020
{

    class Program
    {


        static void Main(string[] args)
        {
            using (
            SpeechRecognitionEngine
            recognizer = new SpeechRecognitionEngine(
            new System.Globalization.CultureInfo("pl-PL")))

            {
                //Konfiguracja wejścia mikrofonu
                recognizer.SetInputToDefaultAudioDevice();

                //Jeśli wykryje mowę to uruchamia wydarzenie
                recognizer.SpeechRecognized +=
                new EventHandler<SpeechRecognizedEventArgs>(recognizer_SpeechRecognized);

                //Słownik
                Choices slownik = new Choices();
                slownik.Add(new string[] { "witaj","cześć" });
                Grammar zestaw_slow = new Grammar(new GrammarBuilder(slownik));
                recognizer.LoadGrammar(zestaw_slow);
                
                recognizer.RecognizeAsync(RecognizeMode.Multiple);


                //Tylko do podtrzymania otwartej konsoli
                while (true)
                {
                    Console.WriteLine("Jestem w pętli while");
                    Console.ReadLine();                                
                }


            } 
           }

        static void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
        {
            Console.WriteLine("Rozpoznano tekst: " + e.Result.Text);
            if(e.Result.Text=="cześć" ^ e.Result.Text=="witaj")
            {
                Console.WriteLine("No siemanko ziomuś");
            }
        }
    }
}
0
DrZajkoo napisał(a):

Ja używam Microsoft.Speech.Recognition a Ty dałeś link do System.Speech.Recognition.

A faktycznie, nie zwróciłem uwagi, ehh.

0

Wygląda na to, że Microsoft.Speech.Recognition rozpoznaje tylko wcześniej zdefiniowane słowa. Dla mnie jest to i tak wystarczające. Dziękuję za chęć pomocy.

0

Jakbyś chciał rozpoznawać bardziej skomplikowane niezdefiniowane zwroty, to polecam Microsoft.CognitiveServices.Speech, to jest darmowe API, na tyle skuteczne, że radzi sobie lepiej niż ja.

0

Uzyskałem zadawalający mnie efekt rozpoznawania mowy. Dzięki właściwości "Confidence" mam pewność, że program zrobi dokładnie to co ma zrobić po rozpoznaniu danego słowa/zdania. Idąc dalej... Czy jestem w stanie tą biblioteką określić czy słowa wypowiedziane zostały przez mężczyznę lub kobietę ?
W dokumentacji nie widzę nic takiego. Czy spotkaliście się kiedyś z czymś podobnym ? Ogólnie teraz mam to na tapecie.

A kolejny krok to będzie filtrowanie na słowa wypowiedziane tylko przeze mnie oraz przez pozostałych mówców by program reagował tylko na moje komendy ale to już grubsza sprawa i nie na ten rok. (Tak mi się wydaje)

1 użytkowników online, w tym zalogowanych: 0, gości: 1