Skocz do zawartości

Własny asystent głosowy - Prosty bot głosowy w pythonie


Ruby

Pomocna odpowiedź

@Inari

12 godzin temu, Inari napisał:

planujesz w przyszłości użyć bibliotek, które nie wymagają połączenia z internetem do przetwarzania mowy na tekst?

Nie sprawdzałem na razie czy są takie biblioteki, ale ze względu na oszczędność miejsca i ogólny dostęp do wi-fi nie planuje zmieniać tej biblioteki.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Przyznam, że inspirujący projekt. A masz jakieś doświadczenie z mikrofonami? Pytam o rozwiązanie, które można upchnąć w małym urządzeniu (typu Pi Zero) i wykorzystać do sterowania głosem. Ten mikrofon jakiś skomplikowany w instalacji, a to urządzenie ponoć słabo działa z Maliną. Czy lepiej pobawić się z jakąś przejściówką z USB na jacka?

Link do komentarza
Share on other sites

@Leander Cześć, dziękuję za miłe słowa.


Aktualnie Marian "żyje" na moim laptopie 😄 Niebawem go trochę zaktualizuję  ponieważ  wygrał nagrodę  pocieszenia w konkursie na Forbot 😄 więc można powiedzieć że sobie zapracował. W przyszłości (jakoś  w wakacje  bo aktualnie  prowadzę walkę z licencjatem) mam zamiar wsadzić go na malinę, i dać mu więcej możliwości jak na przykład "wzrok" i "pamięć".

Ostatnio zastanawiałem się nad  zakupem Pi Zero, ale  trochę odstraszyły mnie jego niskie parametry, i myślę że  Marian mógłby się trochę  krztusić  na nim. Aktualnie już ma małe problemy z wydajnością i po trzech komendach łapie lekką zawiechę ale to kwestia mojej słabej implementacji z tego co zauważyłem. 

Myślę że spokojnie można go na  malinkę  wpuścić  ale  dopiero po optymalizacji żeby działał płynnie. Wtedy to i może na Pi Zero będzie śmigał. Zależy też jaki zakres obowiązków miałby mieć. Podane przez Ciebie urządzenia nie są mi znane, chociaż  mikrofon, który uważasz za skomplikowany dla mnie się nie wydaje aż tak skomplikowany w  instalacji ale pewnie  wszystko wyszło by w praniu 😄 

Podsumowując, wszystko zależy od tego do czego chciałbyś mieć taki interfejs głosowy. Rozwiązań jest wiele, niektóre droższe  a niektóre tańsze, to które  wybrać zależy od celu do którego ma być przeznaczony taki interfejs 😄 Powiedz coś więcej o pomyśle Co chodzi Ci pogłowie a postaram się  pomóc. 

Link do komentarza
Share on other sites

Dnia 10.05.2021 o 01:28, Ruby napisał:

Aktualnie już ma małe problemy z wydajnością i po trzech komendach łapie lekką zawiechę ale to kwestia mojej słabej implementacji z tego co zauważyłem. 

A z czego to wynika? Pytanie laika, ale jeśli on stale oczekuje na komunikat głosowy, to cóż takiego po tych trzech wykonaniach może się stać? Mogę sobie wyobrazić potencjalnie jakieś "zapełnienie" po dużej liczbie, ale 3? Czy to kwestia przetwarzania samych danych głosowych (ale to przecież robi mechanizm na zewnątrz)?

Link do komentarza
Share on other sites

@Leander problem w samej implementacji, nasłuchuje w nieskończonej pętli co prawdopodobnie powoduje  te opóźnienia. Polecam pobrać kod z githuba i odpalić w spyderze (w pycharmie ma jakieś problemy, wersja 2.0 będzie na pycharma ale to dopiero w wakacje) i potestować samemu. 

Bardziej tez chodzi o fakt że  jak powie się jego imię to musi wykonać wszystko po kolei i mam wrażenie ze to tak spowalnia, chociaż głowy sobie  uciąć nie dam.
Planuje  wersje 2.0 ale to całkiem nowy Marian będzie i robiony pod konkretny cel.

  • Lubię! 1
Link do komentarza
Share on other sites

Tak sobie myślę (w oderwaniu od kodu), że w pętli, w której jest cały czas aktywny, wyłapuje wszystko w zasięgu słuchu i wszystko analizuje. Pewnie trudno to obejść, bo przecież żeby coś wykonał, to musi cały czas słuchać. A jakiś niegłosowy aktywator nasłuchu (typu przycisk czy cokolwiek) jest zaprzeczeniem asystenta głosowego. Mam nadzieję, że Marianem 2.0 podzielisz się na forum (niekoniecznie pełnym kodem).

Link do komentarza
Share on other sites

7 godzin temu, Leander napisał:

Pewnie trudno to obejść, bo przecież żeby coś wykonał, to musi cały czas słuchać

Nie, nie trudno.

Nagrywa się dźwięk w postaci ramek (tak mniej więcej od 10 do 100msec) i sprawdza się energię każdej ramki (a to trwa krótko). Dopiero jeśli na podstawie energii kolejnych ramek stwierdza się, że może być to polecenie - nagrany fragment wysyła się do silnika STT (w tym przypadku Google).

Dnia 10.05.2021 o 01:28, Ruby napisał:

zastanawiałem się nad  zakupem Pi Zero, ale  trochę odstraszyły mnie jego niskie parametry, i myślę że  Marian mógłby się trochę  krztusić  na nim.

Znaczy co, będzie wolniej się z siecią łączył? I wolniej wysyłał dane do góglów? Bo przecież ten program nic innego nie robi... na dobrą sprawę na upartego Arduino by się z tym wyrobiło tylko pamięci ma za mało.

 

  • Lubię! 1
Link do komentarza
Share on other sites

3 godziny temu, ethanak napisał:

Nagrywa się dźwięk w postaci ramek

Czyli oszczędzamy czas na przetwarzanie każdego głosu, a przetwarzamy tylko ten, który na podstawie wstępnej analizy rokuje i tak nasłuchując wszystkiego? Przy takich krótkich samplach musimy pewnie trzymać w pamięci jakaś grupę tych próbek, żeby w razie czego zmontować z nich cała komendę do analizy. Dobrze rozumiem?

Link do komentarza
Share on other sites

2 godziny temu, Leander napisał:

Przy takich krótkich samplach musimy pewnie trzymać w pamięci jakaś grupę tych próbek

Oczywiście - ale tu wystarczy jakiś prosty ring buffer o pojemności np. dwóch-trzech sekund. Polecenie raczej nie będzie dłuższe, a jeśli nawet zakładamy że może być[1] - wtedy dalszą część możemy przesyłać na bieżąco (no, z niewielkim opóźnieniem wystarczającym do wykrycia końca polecenia). A na pewno wystarczy to do wykrycia słowa-klucza - zakładając normalne tempo mowy 6 sylab na sekundę i trzysylabowe polecenie możemy już w czasie wstępnej analizy odrzucić wszystko co nie może być kluczem tylko na podstawie oceny czasu.

Czyli dobrze rozumiesz.

---

[1] np. "Skocz do Żabki i kup parówki a jak będą jajka to kup dziesięć"

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Dnia 15.05.2021 o 23:32, Leander napisał:

Tak sobie myślę (w oderwaniu od kodu), że w pętli, w której jest cały czas aktywny, wyłapuje wszystko w zasięgu słuchu i wszystko analizuje. Pewnie trudno to obejść, bo przecież żeby coś wykonał, to musi cały czas słuchać. A jakiś niegłosowy aktywator nasłuchu (typu przycisk czy cokolwiek) jest zaprzeczeniem asystenta głosowego. Mam nadzieję, że Marianem 2.0 podzielisz się na forum (niekoniecznie pełnym kodem).

Zastanawiam się też nad tym by ignorował ciszę i analizował tylko jeśli usłyszy jakiś dźwięk ale też mam wrażenie że może to średnio zadziałać.

Co do Mariana  2.0 to pewnie 😄 założę nowy temat i zrobię porównanie co i w jaki sposób zmieniłem. Pewnie kod na github wrzucę 🙂 

Dnia 16.05.2021 o 06:56, ethanak napisał:

Nie, nie trudno.

Nagrywa się dźwięk w postaci ramek (tak mniej więcej od 10 do 100msec) i sprawdza się energię każdej ramki (a to trwa krótko). Dopiero jeśli na podstawie energii kolejnych ramek stwierdza się, że może być to polecenie - nagrany fragment wysyła się do silnika STT (w tym przypadku Google).

Znaczy co, będzie wolniej się z siecią łączył? I wolniej wysyłał dane do góglów? Bo przecież ten program nic innego nie robi... na dobrą sprawę na upartego Arduino by się z tym wyrobiło tylko pamięci ma za mało.

 

Co do ramek spoko pomysł.

Co do Raspberry  to chodzi mi o to że  aktualnie nic nie robi ale w innym przypadku Pi Zero może nie wystarczyć. 
Skoro Arduino nie da z nim rady to po co o nim wspominać?

 

Dnia 16.05.2021 o 13:38, ethanak napisał:

Oczywiście - ale tu wystarczy jakiś prosty ring buffer o pojemności np. dwóch-trzech sekund. Polecenie raczej nie będzie dłuższe, a jeśli nawet zakładamy że może być[1] - wtedy dalszą część możemy przesyłać na bieżąco (no, z niewielkim opóźnieniem wystarczającym do wykrycia końca polecenia). A na pewno wystarczy to do wykrycia słowa-klucza - zakładając normalne tempo mowy 6 sylab na sekundę i trzysylabowe polecenie możemy już w czasie wstępnej analizy odrzucić wszystko co nie może być kluczem tylko na podstawie oceny czasu.

Czyli dobrze rozumiesz.

---

[1] np. "Skocz do Żabki i kup parówki a jak będą jajka to kup dziesięć"

Myślałem nad podobnym rozwiązaniem, ale aktualnie nie miałem czasu nad tym przysiąść. 

Z poleceniami dłuższymi to jest  bardziej skomplikowana sprawa.  Bo musi ogarniać słowa kluczowe, dodatkowo potrzeba mu zaimplementować  pamięć jakąś bo w innym wypadku nie będzie pamiętał kontekstu rozmowy co też da słaby efekt. Bo np. zapytasz "Jaka jest najpopularniejsza książka z księgarni helion odnośnie programowania w pythonie" - jeśli przetrawi poprawnie to zdanie i odpowie np. "Python Wprowadzenie..."  a następnie wydasz polecenie "To kup jedną", wtedy  bot  powinien odpowiedzieć "Niestety nie rozumiem" jeśli nie miał by pamięci. 

Link do komentarza
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...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.