Przetwarzanie mowy na Raspberry Pi

43

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ć?

Ruthvik Vaila
źródło
4
O jakim „przetwarzaniu mowy” mówisz: rozpoznawanie wcześniej nagranych próbek mowy (wtedy możesz użyć pewnego rodzaju indeksu podobieństwa między oryginalnym, tj. Nagranym i testowym plikiem mowy) lub „prawdziwym” rozpoznawaniem mowy (może być bardzo trudne Intensywny procesor w czasie rzeczywistym, szczególnie w przypadku niektórych języków i dobry współczynnik rozpoznawania)
TomiL,

Odpowiedzi:

61

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 :

  1. 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 :

      1. Pobierz najnowsze stabilne wersje Sphinxbase i Pocketsphinx :

        $ wget http://sourceforge.net/projects/cmusphinx/files/sphinxbase/0.8/sphinxbase-0.8.tar.gz
        $ wget http://sourceforge.net/projects/cmusphinx/files/pocketsphinx/0.8/pocketsphinx-0.8.tar.gz
        
      2. Wyodrębnij pobrane pliki:

        $ tar -zxvf pocketsphinx-0.8.tar.gz; rm -rf pocketsphinx-0.8.tar.gz
        $ tar -zxvf sphinxbase-0.8.tar.gz; rm -rf sphinxbase-0.8.tar.gz
        
      3. 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).

        $ sudo apt-get install bison libasound2-dev
        
      4. cd w katalogu Sphinxbase i wpisz następujące polecenia:

        $ ./configure --enable-fixed
        $ sudo make
        $ sudo make install
        
      5. cd w katalogu Pocketsphinx i wpisz następujące polecenia:

        $ ./configure
        $ sudo make
        $ sudo make install
        
      6. Przetestuj Pocketsphinx, uruchamiając:

        $ src/programs/pocketsphinx_continuous -samprate 48000 
        

        Jeśli chcesz go ulepszyć, polecam przeczytać kilka informacji na Wiki CMUSphinx .

  2. 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 :

      1. Zainstaluj libflac , libogg i libcurl :

        $ sudo apt-get install libcurl4-openssl-dev libogg-dev libflac-dev
        
      2. Pobierz najnowszą wersję libsprec

        $ wget https://github.com/H2CO3/libsprec/archive/master.zip
        
      3. Rozpakuj pobrany pakiet:

        $ unzip master.zip; rm -rf master.zip
        

        Powinieneś teraz mieć folder o nazwie libsprec-masterw bieżącym katalogu.

      4. Pobierz najnowszą wersję libjsonz :

        $ wget https://github.com/H2CO3/libjsonz/archive/master.zip
        
      5. Rozpakuj pobrany pakiet:

        $ unzip master.zip; rm -rf master.zip
        

        Powinieneś teraz mieć folder o nazwie libjsonz-masterw bieżącym katalogu.

      6. cddo libjsonz-masterkatalogu, skompiluj i zainstaluj:

        $ cd libjsonz-master
        $ mv Makefile.linux Makefile
        $ make
        $ sudo make install
        
      7. cdz libjsonz-masterkatalogu do libsprec-master/srckatalogu. Edytuj wiersz 227:

        $ err = snd_pcm_open(&handle, "pulse", SND_PCM_STREAM_CAPTURE, 0);
        

        Musimy to powiedzieć:

        $ err = snd_pcm_open(&handle, "plughw:1,0", SND_PCM_STREAM_CAPTURE, 0);
        

        Dzieje się tak, aby program używał ALSA do wskazywania mikrofonu USB.

      8. Skompiluj i zainstaluj:

        $ mv Makefile.linux Makefile
        $ make
        $ sudo make install
        
      9. Możesz teraz korzystać z biblioteki we własnych aplikacjach. Poszukaj przykładów w folderze libsprec-masterprzykładów.

  3. 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 :

      1. Istnieje kilka pakietów, które musimy zainstalować, aby system działał poprawnie:

        $ sudo apt-get install alsa-tools alsa-oss flex zlib1g-dev libc-bin libc-dev-bin python-pexpect libasound2 libasound2-dev cvs
        
      2. Pobierz Juliusa ze źródła CVS:

        $ cvs -z3 -d:pserver:[email protected]:/cvsroot/julius co julius4
        
      3. Ustaw flagi kompilatora według zmiennych środowiskowych:

        $ export CFLAGS="-O2 -mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard -pipe -fomit-frame-pointer"
        
      4. cdw folderze julius4i wpisz następujące polecenia

        $ ./configure --with-mictype=alsa
        $ sudo make
        $ sudo make install
        
      5. Julius potrzebuje zmiennej środowiskowej, ALSADEVaby wywołać informację, którego urządzenia użyć do mikrofonu:

        $ export ALSADEV="plughw:1,0"
        
      6. Pobierz bezpłatny model akustyczny dla Juliusa. Po pobraniu cddo katalogu i uruchom:

        $ julius -input mic -C julius.jconf
        

        Następnie powinieneś być w stanie rozpocząć wprowadzanie mowy.

  4. 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 :

  1. 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.

  2. 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 :

      1. Zainstaluj oprogramowanie eSpeak:

        $ sudo apt-get install espaek
        
      2. Aby powiedzieć, co chcesz w eSpeak:

        $ espeak "Hello world"
        

        Aby odczytać z pliku w eSpeak:

        $ espeak -f <file>
        
  3. 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 :

      1. Zainstaluj oprogramowanie Festiwalu:

        $ sudo apt-get install festival festival-freebsoft-utils
        
      2. Aby uruchomić Festival, umieść w potoku tekst lub plik, który chcesz przeczytać:

        $ echo  "Hello world" | festival --tts
        
  4. 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 :

      1. Zainstaluj oprogramowanie Flite:

        $ sudo apt-get install flite
        
      2. Aby uruchomić Flite:

        $ flite -t "text that you want flite to say"
        

Odpowiedzi na twoje konkretne pytania :

Jakie są ograniczenia przetwarzania pi przez Pi?

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ć.

Chcę korzystać z tego automatycznego urządzenia do obsługi, jak mam postępować?

Ż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.

syb0rg
źródło
6
To niesamowita odpowiedź! Naprawdę wyciągnąłeś wszystkie sztuczki :)
Piotr Kula
+1 temu, ale zauważyłem, że H2CO3 już nie ma w SE. Twój link do jego profilu 404s.
Facet z
Czy potrafisz wysyłać dźwięki do Google tylko wtedy, gdy ktoś wcześniej wypowiedział wcześniej zapisane słowo jako słowo wyzwalające? (Mówię o części wpisu „Rzuć własną biblioteką”)
Robert
@Robert Jest, ale było to dość skomplikowane i wymagało ode mnie zintegrowania PocketSphinx, aby móc szkolić rozpoznawanie głosu w trybie offline. Mogę później zaktualizować post, podając więcej informacji na ten temat.
syb0rg
@ syb0rg, również czekam na Twój post dotyczący ścieżki offline słowa wyzwalającego i może później przetwarzać następne pełne zdanie w Google!
Ashish K
5

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)

echo "SETTING MIC IN TO 15 (94%)" >> ./audio.log
amixer -c 1 set Mic 15 unmute 2>&1 >/dev/null 

Z pasującym poleceniem, aby wyciszyć słuchanie podczas odtwarzania syntezatora mowy

FILE: mute.sh
#!/bin/sh

sleep $1;
amixer -c 1 set Mic 0 unmute >/dev/null 2>&1 ; 
echo  "** MIC OFF **" >> /home/pi/PIXIE/audio.log

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:

-- Begin parallel timing  
-- MUTE UNTIL THE SOUNDCARD FREES UP 
-- "filename" is a fully qualified path to a wav file 
-- outputted by voice synth in previous operation

-- GET THE LENGTH
local sample_length = io.popen('soxi -D '..filename);
local total_length  = sample_length:read("*a"); 
clean_length = string.gsub(total_length, "\n", "") +1;  
sample_length:close();

-- EXAMPLE LOGGING OUTPUT...
--os.execute( 'echo LENGTH WAS "'.. clean_length .. '" Seconds  >> ./audio.log');   



-- we are about to play something... 
-- MUTE, then schedule UNMUTE.sh in x seconds, then play synth output
-- (have unrolled mute.sh here for clarity)

os.execute( 'amixer -c 1 set Mic '..mic_level..' unmute 2>&1 >/dev/null ');
os.execute( 'echo "** MIC OFF **"  >> ./audio.log ');

-- EXAMPLE LOGGING OUTPUT...    
-- os.execute( 'echo PLAYING: "'.. filename..'" circa ' .. clean_length .. ' Seconds  >> ./audio.log ');

os.execute( './unmute.sh "'.. clean_length ..'" &');


-- THEN PLAY THE THING WHILE THE OTHER PROCESS IS SLEEPING  

os.execute( './sounds-uncached.sh '..filename..' 21000')

Aby właściwie złapać głos na pi, używam:

pocketsphinx_continuous -bestpath 0 -adcdev plughw:1  -samprate 20000  \
-nfft 512 -ds2 -topn2 -maxwpf 5 -kdtreefn 3000 -kdmaxdepth 7 -kdmaxbbi 15 \
-pl_window 10 -lm ./LANGUAGE/0892-min.lm -dict ./LANGUAGE/0892-min.dic 2>&1 \
| tee -i 2>/dev/null >( sed -u -n -e 's/^.\{9\}: //p' ) \
>( sed -u -n -e 's/^READY//p' \
-e 's/^Listening//p' -e 's/^FATAL_ERROR: \"continuous\.c\"\, //p') \
> /dev/null

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.

twobob
źródło
Odpowiedź, w której OP mówi „Wysyłam go do Google do przetworzenia”, chciałbym wiedzieć, gdzie dokładnie to wysłałeś.
twobob
1
Jestem tym OP. Możesz pingować mnie w tym czacie i powinienem być w stanie cię złapać w krótkim czasie. Możemy tam omówić więcej, a także mogę dodać elementy do mojej odpowiedzi.
syb0rg
3

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ć.

Dr.Avalanche
źródło
3
  • SiriProxy - używaj tego tylko, jeśli masz urządzenie, które korzysta z Siri - nie musisz niczego jailbreakować. Zasadniczo przechwytuje Siri w sieci, w której jest zainstalowany.
  • Speech2Text - Możesz użyć API Googles do dekodowania mowy na tekst, ale przykład zawiera także inne metody.
  • Julius - Dekoder rozpoznawania mowy.

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ć.

Piotr Kula
źródło
SiriProxy i Speech2Text nie przetwarzają mowy na Raspberry Pi, używają serwerów Apple / Google.
Dr.Avalanche
2
Tak. Powiedziałem to. Ale nadal są interesującym rozwiązaniem do rozpoznawania mowy. Poza tym PO nie nałożył żadnych ograniczeń. Dzięki za zdanie. grumble
Piotr Kula
„... ** na ** raspberry pi”, przesyłając go i przetwarzając na innych serwisach, nie spełniają kryteriów określonych w pytaniu. Interesujące jest również to, że narzekasz na opinie negatywne, biorąc pod uwagę twoją historię postów głosujących, które są niskiej jakości lub nie odpowiadają na pytanie.
Dr.Avalanche
2
Na Pi nie oznacza więcej niż używanie Pi. Pi jest w stanie połączyć się z Internetem, więc dałem opcję - nie powiedziano wprost: „Nie chcę korzystać z Internetu”. Lub nie ma możliwości korzystania z Internetu. Możliwe, że zaktualizuje swoją odpowiedź na pytanie, a moje stanie się nieistotne. Mam tylko historię postów głosujących, które tego potrzebowały. Nigdy nie odrzucam, chyba że widzę pole do poprawy. Jestem pewien, że poradziliśmy sobie z tym wcześniej.
Piotr Kula
1
Myślę, że ostatni komentarz brzmiał: „Proszę poprawić tę odpowiedź”, a następnie będę cię głosować. Odpowiedzi na często zadawane pytania dotyczące całej sieci są nieprzyjemne, gdy łączę się z zewnętrznymi przewodnikami. Chcę jedynie zaoferować dobrą radę - a mimo to nadal denerwujesz się na mnie. Wyraziłem swoją opinię na temat odlutowującego warkocza, poszedłeś balistycznie i wciąż miałeś pretensje. Ale nadal nie próbowałeś poprawić odpowiedzi. Oflagowałem go - może ktoś go usunie lub przekształci w komentarz, a opinia negatywna zostanie usunięta przeciwko tobie. Co prześladuje mnie i przegłosowuje, że udowodnię?
Piotr Kula,
2

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ć.

Lenik
źródło
1

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:

  1. Wybierz zestaw słów / zdań.
  2. Uzyskaj dane od ludzi.
  3. Wstępne przetwarzanie (być może sygnał wymaga filtrowania)
  4. Wyodrębnianie / przetwarzanie funkcji.
  5. Klasyfikacja.
  6. Testy

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.

Cagdas
źródło