Chcę przetwarzać mowę na Raspberry Pi, aby wykrywać określone osoby (coś w rodzaju unikalnej identyfikacji).
Wolę do tego używać wyłącznie procesora pokładowego, można założyć, że internet nie jest dostępny.
Jakie są ograniczenia związane z przetwarzaniem mowy przez Raspberry Pi? Jeśli chcę użyć tego jako automatycznej frekwencji, jak mam postępować?
audio
home-automation
input-device
speech-recognition
speech-synthesis
Ruthvik Vaila
źródło
źródło
Odpowiedzi:
To jest główny projekt, nad którym teraz zajmuje się Raspberry Pi, więc myślę, że mogę dodać dwa centy. Pamiętaj, że ten projekt jest wciąż w toku.
Wybrałem język programowania C do tego projektu wyłącznie w systemie operacyjnym Raspbian, co mogło mieć wpływ na niektóre moje decyzje i instrukcje. Wymienię tylko bezpłatne i otwarte oprogramowanie , ponieważ to wszystko, czego używam.
W przypadku instrukcji instalacji założę, że masz w pełni aktualny system .
Rozpoznawanie mowy
Oto kilka opcji dla mechanizmów rozpoznawania mowy :
Pocketsphinx - wersja Sphinx, której można używać w systemach wbudowanych (np. Opartych na procesorze ARM).
Plusy : W trakcie aktywnego rozwoju i zawiera takie funkcje, jak arytmetyka stałoprzecinkowa i wydajne algorytmy do obliczeń GMM . Całe przetwarzanie odbywa się na Raspberry Pi, więc można go używać offline. Obsługuje rozpoznawanie mowy w czasie rzeczywistym
Minusy : konfiguracja i zrozumienie dla początkujących jest skomplikowane. Dla mnie było to zbyt niedokładne dla mojej aplikacji. Całe przetwarzanie odbywa się na Raspberry Pi, co czyni go nieco wolniejszym.
Instrukcje instalacji :
Pobierz najnowsze stabilne wersje Sphinxbase i Pocketsphinx :
Wyodrębnij pobrane pliki:
Aby skompilować te pakiety, musisz zainstalować bison i nagłówki programistyczne ALSA.
UWAGA : Ważne jest, aby nagłówki ALSA zostały zainstalowane przed zbudowaniem Sphinxbase. W przeciwnym razie Sphinxbase nie będzie używać ALSA. Wygląda również na to, że ALSA nie będzie używane, jeśli zainstalowano PulseAudio (zła rzecz dla programistów takich jak ja).
cd
w katalogu Sphinxbase i wpisz następujące polecenia:cd
w katalogu Pocketsphinx i wpisz następujące polecenia:Przetestuj Pocketsphinx, uruchamiając:
Jeśli chcesz go ulepszyć, polecam przeczytać kilka informacji na Wiki CMUSphinx .
libsprec - biblioteka rozpoznawania mowy opracowana przez H2CO3 (z niewielkim wkładem własnym, głównie z poprawkami błędów).
Plusy : wykorzystuje interfejs API Google Speech , dzięki czemu jest bardziej dokładny. Kod jest łatwiejszy do zrozumienia (moim zdaniem).
Minusy : Ma zależności od innych bibliotek opracowanych przez H2CO3 (takich jak libjsonz ). Rozwój jest nierówny. Korzysta z Google Speech API, co oznacza, że przetwarzanie nie odbywa się na samym Raspberry Pi i wymaga połączenia z Internetem. Wymaga jednej małej modyfikacji kodu źródłowego przed kompilacją, aby działała poprawnie na Raspberry Pi.
Instrukcje instalacji :
Zainstaluj libflac , libogg i libcurl :
Pobierz najnowszą wersję libsprec
Rozpakuj pobrany pakiet:
Powinieneś teraz mieć folder o nazwie
libsprec-master
w bieżącym katalogu.Pobierz najnowszą wersję libjsonz :
Rozpakuj pobrany pakiet:
Powinieneś teraz mieć folder o nazwie
libjsonz-master
w bieżącym katalogu.cd
dolibjsonz-master
katalogu, skompiluj i zainstaluj:cd
zlibjsonz-master
katalogu dolibsprec-master/src
katalogu. Edytuj wiersz 227:Musimy to powiedzieć:
Dzieje się tak, aby program używał ALSA do wskazywania mikrofonu USB.
Skompiluj i zainstaluj:
Możesz teraz korzystać z biblioteki we własnych aplikacjach. Poszukaj przykładów w folderze
libsprec-master
przykładów.Julius - wysokowydajne, dwuprzebiegowe oprogramowanie dekodera dociągłego rozpoznawania mowy ( LVCSR ) dla badaczy i programistów związanych z mową.
Plusy : potrafi wykonać rozpoznawanie mowy niemal w czasie rzeczywistym na samym Raspberry Pi. Standardowe formaty modeli mowy są przystosowane do obsługi innych bezpłatnych zestawów narzędzi do modelowania.
Minusy : rozwój Spotty, a jego ostatnia aktualizacja była ponad rok temu. Jego rozpoznanie jest również zbyt niedokładne i wolne dla mojego użycia. Długi czas instalacji
Instrukcje instalacji :
Istnieje kilka pakietów, które musimy zainstalować, aby system działał poprawnie:
Pobierz Juliusa ze źródła CVS:
Ustaw flagi kompilatora według zmiennych środowiskowych:
cd
w folderzejulius4
i wpisz następujące poleceniaJulius potrzebuje zmiennej środowiskowej,
ALSADEV
aby wywołać informację, którego urządzenia użyć do mikrofonu:Pobierz bezpłatny model akustyczny dla Juliusa. Po pobraniu
cd
do katalogu i uruchom:Następnie powinieneś być w stanie rozpocząć wprowadzanie mowy.
Rzuć własną bibliotekę - w moim konkretnym projekcie postanowiłem zbudować własną bibliotekę rozpoznawania mowy, która nagrywa dźwięk z mikrofonu USB za pomocą ALSA za pośrednictwem PortAudio , przechowuje go w pliku FLAC za pośrednictwem libsndfile i wysyła do Google w celu przetworzenia to. Następnie wysyłają mi ładnie spakowany plik JSON , który następnie przetwarzam, aby uzyskać to, co powiedziałem mojemu Raspberry Pi.
Plusy : Kontroluję wszystko (co lubię). Dużo się uczę (co lubię).
Minusy : To dużo pracy. Ponadto niektórzy mogą argumentować, że tak naprawdę nie przetwarzam na Raspberry Pi tej biblioteki rozpoznawania mowy. Wiem, że . Google może przetwarzać moje dane znacznie dokładniej niż teraz. Pracuję nad zbudowaniem dokładnej opcji rozpoznawania mowy offline.
Synteza mowy
Oto kilka opcji dla silników syntezy mowy :
tryt - bezpłatny, wysokiej jakości silnik do syntezy mowy napisany całkowicie w C (i naprawdę opracowany przez Ciebie).
Plusy: Niezwykle przenośny (bez zależności oprócz CMake do zbudowania), wyjątkowo mały (najmniejszy, jaki mogłem znaleźć), łatwy do zbudowania.
Minusy: sam przekaz mowy może być czasami niedokładny. Brakuje wsparcia dla wielu różnych języków, ponieważ jestem teraz jedynym programistą, który ma niewiele wolnego czasu, ale jest to jeden z przyszłych celów projektu. Ponadto, na chwilę obecną tylko biblioteka jest generowana po skompilowaniu i nie ma możliwości użycia / testowania pliku wykonywalnego.
eSpeak - Kompaktowy programowy syntezator mowy dla systemu Linux, Windows i innych platform.
Plusy : Wykorzystuje metodę syntezy formantów , zapewniając wiele języków mówionych w małym rozmiarze. Jest również bardzo dokładny i łatwy do zrozumienia. Pierwotnie użyłem tego w moim projekcie, ale z powodu wad musiałem przejść na inny silnik syntezy mowy.
Minusy : Ma dziwne zależności od X11 , co powoduje, że czasem się zacina. Biblioteka jest również znacznie duża w porównaniu do innych.
Instrukcje instalacji :
Zainstaluj oprogramowanie eSpeak:
Aby powiedzieć, co chcesz w eSpeak:
Aby odczytać z pliku w eSpeak:
Festiwal - Ogólny wielojęzyczny system syntezy mowy.
Plusy : Jest przeznaczony do obsługi wielu języków mówionych. Może korzystać z projektu Festvox, który ma na celu uczynienie budowania nowych głosów syntetycznych bardziej systematycznymi i lepiej udokumentowanymi, umożliwiając każdemu zbudowanie nowego głosu.
Minusy : Jest napisany w C ++ (w szczególności dla mnie oszustem). Ma również większą bazę kodu, więc trudno byłoby mi zrozumieć i przenieść kod.
Instrukcje instalacji :
Zainstaluj oprogramowanie Festiwalu:
Aby uruchomić Festival, umieść w potoku tekst lub plik, który chcesz przeczytać:
Flite - Mały silnik syntezy mowy w czasie wykonywania, wywodzący się z Festiwalu i projektu Festvox.
Plusy : W ciągłym rozwoju na Carnegie Mellon University. Bardzo mały silnik w porównaniu do innych. Ma również mniejszą bazę kodu, więc łatwiej jest przejść. Nie ma prawie żadnych zależności (dla mnie ogromny profesjonalista i kolejny powód, dla którego zdecydowałem się użyć tego silnika w moim projekcie).
Minusy : sam przekaz mowy nie zawsze jest dokładny. Mowa ma bardzo metaliczny, nieludzki dźwięk (bardziej niż inne silniki). Nie obsługuje bardzo wielu języków.
Instrukcje instalacji :
Zainstaluj oprogramowanie Flite:
Aby uruchomić Flite:
Odpowiedzi na twoje konkretne pytania :
Programiści nie mają ograniczeń.
:P
Mówiąc poważniej, Raspberry Pi ma wiele zasobów do obsługi przetwarzania mowy. Tak długo, jak osoba wykonująca przetwarzanie mowy wie, co robi, Raspberry Pi powinien być w stanie sobie z tym poradzić.
Żadna z tych opcji są wystarczająco dokładne, aby odróżnić poszczególnych ludzi jeszcze . To jest coś, nad czym pracuję w moim projekcie (i prawdopodobnie będzie to przez jakiś czas). Jeśli szukasz lepszej opcji automatycznego uczestnictwa, przyjrzałbym się rozpoznawaniu twarzy . Raspberry Pi ma jednak więcej ograniczeń w rozpoznawaniu twarzy, więc miej to na uwadze.
źródło
Poszedłem z pocketsphinx_continuous i kartą dźwiękową za 4 USD .
Aby poradzić sobie z faktem, że musi on przestać słuchać podczas korzystania z syntezatora mowy, użyłem amixera do obsługi głośności wejściowej do mikrofonu (było to zalecane przez CMU najlepszą praktykę, ponieważ zatrzymanie silnika spowoduje gorsze rozpoznawanie)
Z pasującym poleceniem, aby wyciszyć słuchanie podczas odtwarzania syntezatora mowy
Aby obliczyć właściwy czas wyciszenia, po prostu uruchamiam soxi przez lua, a następnie ustaw unmute.sh (na odwrót od mute.sh), aby uruchamiał „x” sekund od uruchomienia. Nie ma wątpliwości, że istnieje wiele sposobów, aby sobie z tym poradzić. Cieszę się z wyników tej metody.
LUA SNIPPET:
Aby właściwie złapać głos na pi, używam:
Znów są inne sposoby, ale w ten sposób podoba mi się mój wynik.
W przypadku syntezatora użyłem raczkującego rozwiązania pi Cepstrals, ale nie jest on dostępny online, musisz skontaktować się z nim bezpośrednio, aby umówić się na jego zakup, a jego zakup kosztuje około 30 USD. Wyniki są akceptowalne, jednak mowa powoduje paskudne kliknięcia i trzaski, firma odpowiedziała, że nie ma już RaspPi i nie chce ulepszać produktu. YMMV
Rozpoznawanie głosu znajduje się na poziomie około 12% CPU, gdy jest „bezczynne”, i na krótko zwiększa się, gdy wykonuje fragment rozpoznawania.
Podczas renderowania generowanie głosu wzrasta o około 50–80%.
Gra / sox waży dość mocno, ale podczas renderowania głosów stosuję efekty w czasie rzeczywistym;)
Pi jest mocno zredukowane za pomocą każdego przewodnika, jaki udało mi się znaleźć, aby zatrzymać niepotrzebne usługi i działa w pełnym trybie CLI. 800 MHz przetaktowany (najmniejszy).
scaling_governor ustawiony na: performance
Po pełnym uruchomieniu: działa w temperaturze około 50ºC w bezpośrednim świetle słonecznym i 38ºC w cieniu. Mam zamontowane radiatory.
Ostatnia kwestia: właściwie cały ten sprzęt wypuszczam na sztuczną inteligencję sterowaną przez Internet jako niezły dodatek.
Pi radzi sobie z tym wszystkim płynnie i odtwarza dźwięk sieciowy w czasie rzeczywistym oraz w pełni zapętlony dźwięk do dowolnego innego urządzenia z systemem Unix. itp.
aby poradzić sobie z dużym obciążeniem procesora mowy, wdrożyłem system buforowania oparty na md5sum, więc te same wypowiedzi nie są renderowane dwukrotnie. (około 1000 plików @ 220 mb łącznie pokrywa 70% wypowiedzi, które generalnie otrzymuję z AI), to naprawdę pomaga obniżyć całkowite obciążenie procesora.
Na wstępie wszystko to jest całkowicie wykonalne. jednak rozpoznawanie głosu będzie tylko tak dobre, jak jakość mikrofonów, model językowy, jak konkretnie głosy uczestników są zbliżone do pierwotnie zamierzonej publiczności (używam modelu en_US u dzieci en_UK, a nie doskonałe) i inne szczegóły że z trudem możesz obniżyć do przyzwoitego wyniku.
A dla przypomnienia, zrobiłem to wszystko już raz na rozpałce (i to też działało z cmu sfinksem i flite). Mam nadzieję że to pomoże.
źródło
Tak. użyj PocketSphinx do rozpoznawania mowy, Festvox do zamiany tekstu na mowę (TTS) i trochę dźwięku USB z wejściem liniowym (lub stara obsługiwana kamera internetowa, która również ma wejście liniowe).
Wyszukiwania Google tych pakietów oprogramowania i „Raspberry Pi” zawierają wiele przykładów i samouczków, aby to skonfigurować.
źródło
Jak zauważył Lenik, będziesz musiał jakoś nagrać dźwięk lub ewentualnie wysłać pliki audio do Raspberry Pi, aby jakoś je zdekodować.
źródło
Raspberry Pi nie ma wbudowanego ADC ani wejścia mikrofonowego. O ile nie planujesz używać zewnętrznego mikrofonu USB, zasadniczo nie ma sposobu na przesłanie strumienia audio do urządzenia. Poza tym nie ma poważnych ograniczeń, procesor jest wystarczająco mocny do przetwarzania dźwięku, które możesz spróbować zaimplementować.
źródło
Po pierwsze, powinieneś wybrać zestaw słów do procesu klasyfikacji. Następnie należy zebrać dane od użytkowników / podmiotów. Będzie to sygnał niestacjonarny. Musisz zmniejszyć swoje dane, aby obniżyć koszty obliczeniowe / poprawić wskaźnik sukcesu metodami wyodrębniania cech, dlatego powinieneś poszukać odpowiednich metod wyodrębniania cech dla swojej aplikacji. W wyniku tych metod można uzyskać wektor cech (średnia wartość bezwzględna, RMS, długość fali, przejście przez zero, zintegrowana wartość bezwzględna, współczynniki AR, częstotliwość środkowa, częstotliwość średnia itp.). Następnie powinieneś użyć metody klasyfikacji, takiej jak knn, sieci neuronowe itp., Aby sklasyfikować swoje dane. Na koniec musisz sprawdzić jego dokładność. Podsumowując:
Widziałem projekty przetwarzania wideo z RPi w Internecie, aby mógł dokonać tej klasyfikacji.
Możesz użyć NI 6009 USB DAQ (który obsługuje RPi) do zbierania dowolnych danych analogowych, ale są one trochę drogie.
źródło
Może to być przydatne do rozpoznawania mówcy:
https://code.google.com/p/voiceid/
źródło