Skocz do zawartości
Programista3

Rozpoznawanie mowy oraz odtwarzanie nagrań z microSD

Pomocna odpowiedź

Witam. O dłuższego czasu chodzi mi po głowie zrobienie urządzenia które miało by rozpoznawać komendy głosowe i w zależności od rozpoznanej komendy odtworzyć odpowiednie nagranie z karty SD/microSD (później mógłbym rozwinąć projekt o różne inne funkcje). Od niedawna interesuję się elektroniką. Myślałem żeby spróbować zrobić to na Arduino. Co do rozpoznawania mowy to znalazłem to. Komendy miałyby być w języku Polskim lub Angielskim (wolałbym Polski ale nie ma to dla mnie większego znaczenia).

Wstępnie znalazłem podzespoły i postanowiłem zapytać Was czy to ma prawo się udać i te czy inne części wybrać 🙂 .

Oto co wybrałem: Arduino Uno Rev3 , Mikrofon elektretowy z wzmacniaczem , DFPlayer (odtwarzanie nagrań), Głośnik + zasilacz do Arduino, kable itp.

Programowanie nie stanowi dla mnie problemu, siedzę w tym ponad 3 lata 😃. Co o tym sądzicie?

Udostępnij ten post


Link to post
Share on other sites

Na pewno zdajesz sobie sprawę, że mowa jest bardzo skomplikowanym sygnałem. Bardzo. Na jej analizie łamią sobie zęby naprawdę duże i szybkie komputery. Piszę to tylko po to, byś się nie zawiódł. Sprzęt który wybrałeś będzie do siebie pasował. Na pewno mikrofonik ze wzmacniaczem podłączysz do Arduino i będzie to wciągać sygnał audio. Z drugiej strony odtwarzaczka plików z karty da się wysterować przez UART więc tu "wszystko gra". Małym zgrzytem jest to, że Arduino Uno ma tylko jeden sprzętowy port szeregowy więc trzeba będzie jakoś go przełączać, ale i tak największym ograniczeniem jest sam komputerek i jego oprogramowanie. Mając tak słabiutką maszynę i tak duże wyzwanie jak sygnał mowy, trzeba iść na wiele kompromisów. O ile wiem autor tej biblioteki zrobił to tak prosto jak się tylko dało. To oznacza, że to nie jest żaden system "rozpoznawania mowy" w sensie jej rozumienia a jedynie prosty klasyfikator dźwięków. Od tego ile cech sygnału jest analizowanych zależy jakość pracy całości. Tutaj zdaje się odróżniane są zaledwie spółgłoski szczelinowe od dźwięcznych a te od samogłosek. Coś takiego powoduje, że rzecz jest raczej zabawką, która potrafi z takim sobie prawdopodobieństwem odróżnić trzy-cztery dobrze dobrane słowa od siebie. Jeżeli chcesz to rozwijać to raczej poszerzanie słownika nie wchodzi w grę. Urządzenie nie dość że będzie coraz gorzej odróżniać "znane" słowa od siebie to jeszcze mnóstwo innych "obcych" słów uznawać za "swoje". To jest cena prostoty metody wymuszonej przez ograniczenia sprzętowe (wolny procesor i mało pamięci). Doczytaj dokładnie na czym polega klasyfikacja głosek w systemie Arjo i zastanów się jakie słowa w języku polskim były sensownie odróżniane tym algorytmem. Pomyśl, że to jest wszystko na co stać ten procesor więc jeśli plany masz rozległe, może to być jedynie dobrym wstępem i wyczuciem sprawy, bo za chwilę obijesz się o sufit.

Udostępnij ten post


Link to post
Share on other sites

Dzięki. Nie zamierzam porzucać projektu, zwłaszcza że mam ciekawe pomysły na jego rozwinięcie. Arduino wybrałem na początek ponieważ nie mam zbyt dużego doświadczenia z elektroniką. W przyszłości zamierzam przenieść to na coś lepszego. Na początek nie chciałem brać czegoś bardzo zaawansowanego i drogiego gdzie być może nie potrafiłbym złożyć wszystkiego w całość jeśli w ogóle mógłbym sobie pozwolić na kupno wszystkich części.

Co lepszego poleciłbyś do tego celu? Może bym spróbował ogarnąć coś lepszego.

Udostępnij ten post


Link to post
Share on other sites

Programista3, jeżeli chcesz coś lepszego, ale niestety 4x droższego to masz Intel Edison. Na pewno jest to mocniejszy układ i co ważne możesz pokombinować i na usb głośniki podłączyć, a złącze na kartę SD masz już gotowe. Rozważ opcje oferowaną od Intela. Ale jak chcesz to poszukaj sobie coś od Atmela z odpowiednimi parametrami i do tego programator.

PS: Możesz programować w arduino ide Intela.

Udostępnij ten post


Link to post
Share on other sites

Nie wiem co planujesz. Rozpoznawanie mowy to dość elitarna dziedzina. Jeśli nie chcesz wnikać w to zbyt głęboko bo interesuje Cię raczej gotowy produkt którego jedną z wielu funkcji będzie sterowanie głosem, to szukaj modułów sprzętowych oferujących taką analizę lub bibliotek programowych.

Moduły sprzętowe są zamkniętą całością i nie trzeba wiele wiedzieć by ich używać. Są małe, zawierają zwykle jakiś procesor DSP i gotowe oprogramowanie. Z uwagi na znacznie większą moc obliczeniową i odpowiednie zasoby pamięciowe, można tam sobie pozwolić na wykrywanie wielu cech dystynktywnych i zrobienie algorytmu np. uczącego się słownika na podstawie wielokrotnie wypowiadanych słów. Taka "czarna skrzynka" może poprawnie rozróżniać kilkanaście a nawet i kilkadziesiąt komend - w oczywiście w zależności od ceny.. Poszukaj hasła "voice recognition module" a dostaniesz trochę przykładów. Najprostsze - dedykowane właśnie do nieśmiertelnego Arduino zaczynają się od 25USD. Mają już wejście mikrofonowe i jak zwykle są sterowane przez UART.

Moim zdaniem to najlepszy punkt startowy do Twojej zabawy, oferujący przyzwoitej wielkości słownik i niezłą rozpoznawalność komend.

https://kamami.pl/rozpoznawanie-mowy/557953-easyvr-shield-30-voice-recognition-shield.html

http://www.gotronik.pl/modul-rozpoznawania-mowy-ld3320-asr-p-2404.html

http://www.instructables.com/id/Arduino-voice-control/

Z drugiej strony masz już poważniejsze biblioteki programowe przeznaczone na większe maszyny. Tam mogą działać już algorytmy potrzebujące GB RAMu, ale za to umiejące robić "speech-to-text" co jest zupełnie nową klasą problemów. Myślę, że nawet na Malinę - która nie jest jakimś wielkim komputerem znajdziesz już takie rzeczy jako open-source. Tu już można mówić o rzeczywistym rozpoznawaniu mowy. Może jako programista spróbuj tego? Można zacząć od PC - to chyba najbardziej uniwersalne narzędzie, żeby poznać możliwości i wyczuć granice albo właśnie od jakiejś małej, linuxowej maszynki klasy embedded.

Pytanie co jeszcze ma to urządzenie robić. Jeżeli chodzi Ci po głowie np. łączność przez LAN, konfiguracja przez internet, składowanie dużych ilości danych lub ładna prezentacja wyników/stanu na LCD to Arduino jest strzałem kulą w płot. Ono tego nie pociągnie, albo zrobi to w absurdalnej cenie mnóstwa dodatków. Wtedy komputerek lunuxowy będzie idealny

https://en.wikipedia.org/wiki/Speech_recognition_software_for_Linux

Udostępnij ten post


Link to post
Share on other sites

marek1707 Nie chodzi mi o gotowy produkt i nie mam nic przeciwko wnikaniu w temat (no może do pewnego stopnia). Ciekawią mnie tematy związane ze sztuczną inteligencją m.in. rozpoznawaniem mowy. Dobrze wiem że są to bardzo skomplikowane tematy.

Jeśli chodzi o elektronikę to chodzi mi o to żeby móc wybrać części i poskładać samemu (nie gotowy produkt ale też nie budować wszystkiego od zera) a co do informatyki (programowanie tego itp.) to najlepiej żebym mógł zobaczyć oraz modyfikować kod biblioteki/algorytmu rozpoznawania mowy. Programowanie np. komend nie stanowi dla mnie problemu, język programowania jest mi obojętny, nauczenie nowego nie jest dla mnie żadną trudnością.

Pisząc "Co lepszego poleciłbyś do tego celu?" chodziło mi raczej o coś lepszego od Arduino a nie o moduły do niego ale te linki może również się przydadzą.

Co do Raspberry Pi to przeleciało mi to przez myśl chociaż bardzo mało o tym wiem. Mógłbyś rozwinąć ten temat?

Co urządzenie ma jeszcze robić to sam nie wiem. Aktualnie przechodzą mi przez myśli funkcje gdzie nawet nie zastanawiam się czy są one w ogóle możliwe do wykonania. Na razie nie zbudowałem nawet pierwotnej wersji rozpoznającej mowę i odtwarzającej nagrania więc nie ma mowy o jakimkolwiek rozwoju projektu. Wszystko zależy od czasu i pieniędzy jakie będę mógł przeznaczyć na ten cel. Z takich szalonych funkcji które gdzieś, kiedyś przemknęły mi przez myśli to np. obsługa karty sim (zamiast mikrofonu i głośnika to rozmowa człowiek(telefon) - urządzenie), robienie zdjęcia po wykrycie ruchu osoby w danym miejscu i próba identyfikacji z pomocą bazy danych (kolejny temat związany ze sztuczną inteligencją - rozpoznawanie twarzy 🙂 )

Udostępnij ten post


Link to post
Share on other sites

Chciałem zauważyć, że algorytmy rozpoznawania mowy, które jesteś w stanie zastosować na Arduino raczej niewiele mają wspólnego ze sztuczną inteligencją (uczeniem się, sieciami neuronowymi, etc.) a więcej z wiedzą na temat tego jak działa ludzki aparat mowy i ze sztuczkami z przetwarzaniem sygnału.

Udostępnij ten post


Link to post
Share on other sites

Może zainteresuj sie Bing Speech API + Raspberry? Samego kodu źródłowego rozpoznawania mowy nie po modyfikujesz, ale jest szansa że zdziałasz coś działającego.

Udostępnij ten post


Link to post
Share on other sites

Ok, chyba rozumiem, jesteś programistą: posiadłeś umiejętność wyrażania algorytmów w kilku językach programowania. Niestety, to najniższy stopień wtajemniczenia. Zabierasz się za tematy które - każdy z nich - jest potężną dziedziną wiedzy. W ciągu kilku postów zdążyłeś zahaczyć o:

- cyfrowe przetwarzanie sygnałów (Digital Signal Processing) czyli coś, co leży u podstaw każdego nietrywialnego interfejsu cyfrowych komputerów z naszym analogowym światem, wszystko jedno czy w obszarze dźwięków, obrazów, prędkości wiatru czy dynamiki robota

- analizę/rozpoznawanie mowy (speech processing/recognition) czyli bazującą na DSP naukę o grzebaniu w paskudnie wyglądającym sygnale mowy,
- syntezę mowy - to samo ale w drugą stronę - może wydawałoby się prostsze, ale wymagania są wywindowane ostro w górę bo już dużo umiemy. Acha, odtwarzanie plików z karty to nie jest synteza mowy i z rozmową z komputerem nie ma nic wspólnego. Równie dobrze mógłbyś zapalać lampki tak/nie/nie wiem lub sto innych.

- sztuczna inteligencja - mimo napisania kilku gier mających jakieś AI nie mam o tym pojęcia a sądząc z liczby prac naukowych w tej dziedzinie, wąski wycinek tego tematu zapewnia pracę na całe życie.

Ogarniając wszystko powyższe, brak jakiegokolwiek planu, zero doświadczenia i chyba jednak zero wiedzy teoretycznej robisz wrażenie przedszkolaka, który prosi o polecenie jakiegoś dobrego samochodu do wygrania rajdu Paryż-Dakar. A z resztą to on już sobie poradzi. To tak nie działa. Będąc na tym etapie wybierz cokolwiek. Nikt Ci nie wskaże optymalnego rozwiązania, bo nie ma postawionego żadnego problemu. Chcesz dużo wiedzieć? Żyj i ucz się, czytaj i eksperymentuj. Kupuj książki i pochłaniaj je. Ten przedszkolak musi najpierw zdobyć prawo jazdy a po drodze zrozumieć jak działają silniki, skrzynie biegów, systemy hamowania, chłodzenia, smarowania i zawieszenia. Dobrze byłoby też poznać siebie (fizjologia, odżywianie, kresy możliwości), psychologię sportu i stresu a także liznąć trochę zarządzania grupą ludzi, organizowania przedsięwzięć i sposobów pozyskiwania funduszy. U Ciebie jest podobnie. Masz ogrom wiedzy do nadrobienia i tak samo ogromne pole do popisu. Trochę z elektroniki (samo zrobienie dobrego toru audio jest już jakimś wyzwaniem), dużo z DSP (to podstawa wszelkich zabaw i sztuczek z sygnałami ciągłymi), może zahacz o sieci neuronowe (rozpoznawanie wzorców, uczenie), po drodze fizjologia narządów mowy i słuchu, teoria sygnałów (filtry, generatory, czwórniki, modulacje i matematyczne tego opisy). Jeżeli wolisz dryfować bardziej w stronę algorytmów, wiedza o szczegółach procesora w Arduino raczej Ci się nie przyda, choć możesz od tego zacząć żeby mieć pojęcie jak działają większe maszyny. To są lata. Naiwnością byłoby sądzić, że teraz - gdy praktycznie nic nie wiesz - podejmiesz jakieś sensowne decyzje albo że dostaniesz z internetu dobre wskazówki co robić. Sam musisz się zdecydować w chcesz wejść, bo wszystkiego na raz nie wciągniesz. To są lata pracy, doświadczeń, porażek i może kilka sukcesów. Cieszymy się, że umiesz programować w kilku językach, ale to tylko podstawowy warsztat pracy, nie obejmujący pewnie nawet języków używanych do opisu czy rozwoju AI lub sieci neuronowych. To jakbyś umiał wbić gwóźdź nie kalecząc się - fajnie, ale to nie robi z Ciebie mistrza stolarstwa. A porywasz się na budowę drewnianego mostu łukowego. To nie jest niemożliwe, ale to praca na wiele lat..

Raz po raz na Forum pojawiają się tak bardzo ogólne pytania początkujących i wtedy.. rozkładamy ręce. Można odpowiedzieć komuś gdzie zrobił błąd w prostej funkcji czy dlaczego jego generator z LEDem nie mruga, ale jak opisać dwudziestoletnią drogę zawodową inżyniera lub naukowca? Nie bądź naiwny, sam musisz do tego dojść. Nikt Ci niczego sensownego nie poradzi, bo każda odpowiedź będzie dobra i jednocześnie może zostać podważona. Tak to jest z rozmytymi problemami, trzeba rozpoznawać bojem. Do roboty.

Udostępnij ten post


Link to post
Share on other sites

marek1707 Dziękuję za kolejne cenne rady.

Co do tej rozmowy z urządzeniem chodziło mi zastosowanie tego systemu rozpoznawania mowy i odtwarzania nagrań w rozmowie telefonicznej a nie o dosłowną rozmowę z komputerem przy czym to był przykład moich fantazji nie koniecznie związanych z tym co będę chciał kiedyś zbudować. Synteza mowy jest akurat tematem w który nie mam zamiaru się zagłębiać a przynajmniej nie w najbliższych latach. Po prostu widząc obecny postęp w tej dziedzinie (jak wielka różnica jest między głosem ludzkim a tym z syntezatora) uważam że przy poświęceniu na to mnóstwa czasu i pracy (jakieś kilka lat) osiągnąłbym nie zadowalające mnie wyniki dlatego chcę użyć nagrań co na razie w zupełności wystarczy.

- sztuczna inteligencja - mimo napisania kilku gier mających jakieś AI nie mam o tym pojęcia a sądząc z liczby prac naukowych w tej dziedzinie, wąski wycinek tego tematu zapewnia pracę na całe życie.

To kolejny problem, cały temat jest tak skomplikowany że nie sposób ogarnąć go od początku do końca w ciągu całego życia. Również dla tego nie chcę wnikać np. w syntezę mowy, nie mogę zajmować się wszystkim zagadnieniami, a chcąc i tak powiedzmy pracować nad paroma z tych zagadnień nie mogę zagłębiać się w każde z nich za bardzo.

Mam 16 lat i patrząc po wieku może się wydawać że pewnie wymyśliłem sobie że zbuduję coś chociaż nie mam pojęcia jak to zrobić, sam projekt za chwilę rzucę w kąt bo coś mi nie wyjdzie a decyzję o tym co chcę robić/kim być wkrótce jeszcze zmienię, ale tak nie jest. Od dawna wiem co chcę robić i co mnie interesuje, potrafię się uprzeć i skończyć to co zacząłem praktycznie bez względu na cenę, zwłaszcza jeśli to dotyczy moich zainteresować i planów na przyszłość. Może źle sformułowałem w temacie czego oczekuję, nie szukam najlepszego rozwiązania, wskazania drogi na lata. Poszukuję czegoś na początek, jakiegoś zestawu na którym mógłbym eksperymentować, uczyć się. Nie potrafię przez rok czytać grubej książki z teorią np. czego używa się do rozpoznawania mowy, jakich algorytmów, sposobów itp. a po skończeniu przerabiania teorii i tak będę mało z niej pamiętał albo nie będę potrafił zastosować zdobytej wiedzy. Chcę praktyki, mogę pomagać sobie książką ale potrzebuję gotowej biblioteki gdzie mogę przeanalizować kod, zmodyfikować go, zobaczyć działanie, analiza całej biblioteki może mi zająć rok albo więcej ale w praktyce a nie tylko w teorii. Może szukam czegoś za bardzo skomplikowanego jak na początek ale chcę spróbować, nie uda się to spróbuję czegoś łatwiejszego, części i tak się prawdopodobnie kiedyś przydadzą.

Udostępnij ten post


Link to post
Share on other sites

Jeżeli miałbyś dostęp do Internetu, to istnieje opcja wykorzystania porządnych bibliotek od Google, a mianowicie cloud speech api. Traktujesz to jako czarną skrzynkę, do której wrzucasz dźwięk a zwracany jest wypowiedziany text. Wiadomo, że biblioteka działa lepiej dla języka angielskiego a nie polskiego. Haczyk jest taki, że bez połączenia z Internetem z niej nie skorzystasz.

Osobiście nie miałem z tym większej styczności. Miałem okazje natomiast oglądać projekt robota, który był sterowany (w bardzo prosty sposób) głosem. Telefon z Android OS wykorzystywał tą bibliotekę i reagował na proste komendy: "jedź", "przód", "tył", itp, a następnie wysyłał odpowiednie komunikaty do robota stosując Bluetooth. Działanie było oczywiście obarczone pewnym (<1s) opóźnieniem.

Udostępnij ten post


Link to post
Share on other sites

Google Speech API nie byłoby złym pomysłem, ale chyba bardziej dla rozwiązań opartych na Raspberry Pi, lub tak jak wspomniałeś - na smartfonie.

Może ESP8266 byłoby tez do wykorzystania?

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...