Od zera do spikera - sterujemy komputerem za pomocą głosu cz. 2
Jak mówić do komputera, aby ten nas rozumiał? Najlepiej wykorzystać jakieś oprogramowanie, które wyszuka w naszej mowie wcześniej ustalone (zaprogramowane) komendy głosowe i podejmie właściwe dla tych poleceń działania. Aplikacją zdolną do podejmowania takich działań, obsługującą język polski, działającą szybko i sprawnie, jest Spikit. Ten tekst ma na celu pokazać, że utworzenie własnego asystenta głosowego może być bardzo proste i przyjemne.
Lekcja 2
W poprzedniej części przedstawiłem informacje przydatne podczas pierwszego kontaktu z programem i z mechanizmem Reguł głosowych odpowiedzialnym za zarządzanie listą dostępnych w nim poleceń. Dziś rozwiniemy nasze umiejętności i utrwalimy nowo zdobytą wiedzę.
Niech żyje wolność i swoboda
Podczas zwyczajnej rozmowy z inną osobą zwykle używamy wielu różnych słów, ale tylko nieliczne z nich dotyczą omawianego tematu i odgrywają decydującą rolę w procesie pojmowania sensu zdania. Reszta stanowi tylko uzupełnienie, które może (choć nie musi) podnieść jakość przekazu informacji lub w najgorszym wypadku wprowadzić element konfuzji ;) Jeśli więc mamy kiedykolwiek swobodnie rozmawiać z komputerem, wydawać mu rozkazy i oczekiwać wykonania ważnych dla nas czynności to musimy:
- darować sobie swobodę i wypowiadać komendy dokładnie tak jak życzy sobie tego jakiś producent systemu rozpoznawania mowy (co bywa niekiedy sztuczne)
albo
- stworzyć asystenta specjalnie dla siebie i znaleźć sposób na wyróżnianie tylko najważniejszych fragmentów poleceń, traktując wszystkie inne części jako neutralne/nieistotne dla zrozumienia kontekstu wypowiedzi
Chyba każdy z nas ceni sobie możliwość nieskrępowanego podejmowania wyborów. Pojęcie wolności możemy także przenieść w komputerowy świat zer i jedynek i odnieść do tych części programu komputerowego, od których zależy czego - za pomocą danej aplikacji - możemy faktycznie dokonać i jakimi środkami może się taki proces odbywać. A tu Spikit daje nam wiele swobody... jak na niezależną produkcję z gatunku "systemy rozpoznawania mowy" :)
Dowiedzieliśmy się już wcześniej, że za pomocą list reprezentowanych przez znaki specjalne ( ) oraz | możemy tworzyć proste Reguły głosowe zawierające jedną lub większą ilość komend głosowych:
Wiemy również, że tę samą akcję możemy powiązać z różnymi słowami, a wybrane z nich (lub nawet całe zdania) oznaczać jako wyrażenia opcjonalne, czyli takie, które wypowiemy lub pominiemy:
Dzięki poprzedniej lekcji potrafimy wyodrębnić wspólne słowa dla wielu poleceń i zapisywać je w skondensowanej formie:
Czego jeszcze nie omawialiśmy, a co zasugerowałem na samym końcu poprzedniej częsci kursu to, że możliwy jest zapis polecenia głosowego ze wskazaniem miejsca potencjalnych wtrąceń, zająknięć, czyli miejsc wystąpienia wyrazów, których nie spodziewaliśmy się wypowiedzieć lub wypowiedzianych w przypływie emocji... Aby wskazać takie miejsce, wystarczy wykorzystać znak specjalny *, mając świadomość tego, że nie możemy go zbytnio nadużywać i musimy to robić z głową. W przeciwnym razie komendy głosowe wykorzystujące taki dowolny ciąg słów reprezentowany przez gwiazdkę mogłyby kolidować z innymi istniejącymi poleceniami w naszej Regule głosowej. Rozważmy następujący przykład:
Co możemy w takim przypadku wypowiedzieć? W miejscu wystąpienia symbolu * pojawić się mogą inne wyrazy np. zamknij już ten program, zaznacz cały tekst, zaznacz ten długi dokument. Nie oznacza to, że musimy dodawać słowa na siłę. Nie musimy. Pamiętaj przy tym, że im dłuższa będzie część polecenia wymagająca wypowiedzenia, tym lepiej Spikit poradzi sobie z drobnym wtrąceniem, ale już nie odwrotnie! Ten sposób zapisu poleceń przynosi całkiem ciekawe rezultaty w połączeniu z mechanizmem odpowiedzi głosowych wbudowanym w Spikit, szczególnie wtedy, gdy w tym samym pomieszczeniu razem z nami znajdują się jeszcze postronne osoby. Komputer reagujący na komendy naznaczone naszymi własnymi emocjami - a to dopiero "cuda techniki"!
Reguły dodatkowe
Niezależnie od tego czy sami skonstruujemy Reguły głosowe, czy tylko skorzystamy z tego co jest domyślnie zapisane w programie, Spikit automatycznie utworzy dla nas kilka dodatkowych Reguł, które - jeśli wykorzystane w odpowiedni sposób - ułatwiają bardzo pracę z aplikacją. Spikit w wersji 1.5.1 daje nam możliwość wykorzystania następujących Reguł pomocniczych:
- ILOŚĆ_POWTÓRZEŃ
- NAZWY_KART
- MAGAZYN_SKRÓTÓW
- MAGAZYN_REGUŁ
- MAGAZYN_SŁOWNIKÓW
Reguły te działają dokładnie w taki sam sposób jak Reguły zapisane w poszczególnych kartach programu (Moje polecenia, Karta dynamiczna, Ustawienia). Ich nazwy zapisałem wielką literą, aby odróżnić je od pewnych typów akcji w programie, ale możesz wybrać inny sposób pisowni. Tak jak zwykłe Reguły, także i one zawierają listę poleceń, które niosą ze sobą jakąś wartość (przekazują pewną informację). Rozważmy następujący przykład:
Jeśli chciałbym kilkukrotnie nacisnąć klawisz Enter, to musiałbym wiele razy wypowiedzieć polecenie posiadające przypisaną akcję naciśnięcia tego klawisza. Aby ułatwić sobie pracę, mógłbym podążać linią najmniejszego oporu intelektualnego i po prostu utworzyć kilka dodatkowych poleceń usprawniających taką czynność:
Każde kolejne polecenie różniłoby się od poprzedniego wyłącznie zakończeniem określającym ilość powtórzeń i odpowiednio zmodyfikowaną akcją. Nie jest to eleganckie rozwiązanie. Spróbujmy zapisać to inaczej:
Powinien istnieć sposób umożliwiający szybkie tworzenie takich wersji komend głosowych. Sposób na doklejenie w odpowiednim miejscu w Regule głosowej innego zbioru poleceń np. (dwa | trzy | cztery | pięć | sześć). Z każdym z takich doklejonych poleceń powiązana byłaby informacja o liczbie jaką reprezentuje dane słowo (np. ze słowem "dwa" powiązana jest liczba 2). Oczywiście w Spikit istnieje takie rozwiązanie - możliwość doklejenia we wskazanym miejscu w Regule głosowej innej Reguły, która przekazuje dodatkową informację. To rozwiązanie nosi nazwę odniesienia do Reguły i wykorzystuje znak specjalny #. Spróbujmy utworzyć Regułę głosową wykorzystującą odniesienie do Reguły ILOŚĆ_POWTÓRZEŃ:
Z takiego zapisu wynikają polecenia "naciśnij klawisz jeden", "naciśnij klawisz dwa", "naciśnij klawisz trzy" itd. Zmodyfikujmy Regułę raz jeszcze dodając na końcu dodatkowe słowo oraz obejmując odniesienie do Reguły znakami sugerującymi opcjonalność:
W takim przypadku poprawnymi poleceniami rozpoznawanymi przez Spikit będą komendy "naciśnij klawisz", ale również "naciśnij klawisz jeden razy", "naciśnij klawisz dwa razy", "naciśnij klawisz trzy razy" itd. Mamy tutaj dużą dowolność jeżeli chodzi o miejsce wstawienia zarówno odniesienia do Reguły jak i ustalenia akcji (na początku, w środku, na końcu zdania). Niemniej informacja przekazana przez Regułę ILOŚĆ_POWTÓRZEŃ może być wykorzystana do powtórzenia tylko określonych typów akcji (akcji naciskania sekwencji klawiszy oraz wprowadzenia tekstu). Jako małe zadanie, spróbuj rozszyfrować schemat wypowiadania poleceń wynikający z następującej Reguły głosowej:
Jeśli już uporałeś się z zagadką, przywróć na chwilę domyślną Regułę w Karcie Dynamicznej i zobacz jak wykorzystane jest tam odniesienie do Reguły ILOŚĆ_POWTÓRZEŃ, aby uprościć czynność wprowadzania wiele razy tego samego znaku lub naciskania tej samej kombinacji klawiszy. Choć w programie dostępne są jeszcze inne Reguły dodatkowe, omówię je później. Korzysta się z nich dokładnie w taki sam sposób jak z Reguły ILOŚĆ_POWTÓRZEŃ. Reguły te nie mają jednak tak ogólnego zastosowania i są ściśle związane z pojedynczymi akcjami.
Jeśli chcesz być na bieżąco z niusami dotyczącymi programu lub zależy Tobie na dalszym rozwoju projektu (program ma w pełni funkcjonalną bezpłatną edycję) - polub Spikit na Facebooku :-)