.Net: Wykorzystanie System.Speech w celu transkrypcji nagrania do tekstu

DotNet wraz z przestrzenią nazw System.Speech

dostarcza łatwą w wykorzystaniu bibliotekę pozwalającą na zaimplementowanie systemu rozpoznawania mowy – niestety nie w języku polskim. Możemy przy pomocy tego narzędzia szybko napisać program przygotowujący transkrypcję tekst -> audio, oraz audio -> tekst. Dzisiaj pokażę tą drugą opcję.

Pierwszą rzeczą jaką należy zrobić to w swoim projekcie dodać referencję do System.Speech. Następnie musimy upewnić się, że mamy zainstalowany odpowiedni (w naszym wypadku angielski) language pack. W tym celu należy w panelu sterowania znaleźć opcję związane z ustawieniami regionalnymi i językiem, ale możemy też zrobić to z poziomu kodu:

W przypadku gdy powyższa linia nie zwróci nam pożądanego obiektu, musimy zainstalować language pack a także speech recognition dla języka angielskiego.

Za mechanizm rozpoznawania mowy odpowiada klasa SpeechRecognitionEngine i to od utworzenia jej instancji zaczniemy, wykorzystując obiekt typu RecognizerInfo.

Następnie trzeba przygotować instancję klasy Grammar – reprezentuje ona gramatykę rozpoznawania mowy. Gramatyka jako nauka zajmuje się badaniem reguł rządzących generowaniem wyrazów i zdań (za Wikipedią). Podobnie jest z tą klasą – pozwala ona na załadowanie nowych reguł z pliku XML. W tym wpisie skupimy się jednak na samym rozpoznawaniu mowy i wybierzemy gotowe zasady gramatyki wykorzystując klasę dziedziczącą po Grammar – DictationGrammar. Posiada ona reguły pozwalające na rozpoznanie mowy, ale są one bezkontekstowe, to znaczy że im bardziej specyficzny temat wypowiedzi, tym większy problem może mieć w poprawnym rozpoznaniu. Nie mniej na tę chwilę jest to dla nas wystarczające.

Ostatnia część inicjalizacji mechanizmu polega na podpięciu odpowiednich delegatów do wybranych zdarzeń, których SpeechRecognitionInfo udostępnia całą paletę. Jako, że nas interesuje transkrypcja, uznałem że jedynym potrzebnym zdarzeniem jest speechRecognitionEngine.RecognizeCompleted, które jest aktywne w momencie zakończenia transkrypcji. Jego implementacja, na cele przykładu, mogłaby wyglądać w taki sposób:

Teraz pozostało już tylko zacząć nasłuchiwać co ktoś ma do powiedzenia

Najpierw określamy co ma być źródłem dźwięku, a następnie uruchamiamy rozpoznawanie mowy. Do wyboru mamy stream audio, mikrofon i plik *.wav. Ja skorzystam z ostatniej opcji.

Na koniec

możemy opakować użycia typów z System.Speech w jakąś zgrabną klasę. Niech będzie to klasa fasada, której odpowiedzialnością jest umożliwienie wykonania transkrypcji z plików *.wav, do tekstu. Bardzo prosta jej implementacja mogłaby wyglądać mniej więcej tak:

 

Jedna myśl na temat “.Net: Wykorzystanie System.Speech w celu transkrypcji nagrania do tekstu

  1. Całkiem całkiem, ale fajnie by było usłyszeć i zobaczyć jakiś efekt. No i alternatywę z dostępnym językiem polskim 🙂

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *