Skocz do zawartości

Robot "Nicolaus/Wizytówka"


Pomocna odpowiedź

@wn2001 Brawo za świetny projekt, możesz coś więcej napisać o rozpoznawaniu mowy? Właśnie zabieram się za poprawę i udoskonalenie projektu mojego modułu kontroli pieca CO. Chciałem zabudować czujnik ruchu, gdzie po jego wykryciu, urządzenie przy pomocy DFPlayera opowadało by mi o aktualnych odczytach. Jednak chyba ciekawiej by było gdyby urządzonko odpowiadało na moje pytania. Zależy mi na prostocie, @ethanak,@wn2001  da się połączyć esp8266, DFPlayera i takie rozpoznawanie mowy? 

Edytowano przez SOYER
  • Lubię! 1
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

1 minutę temu, SOYER napisał:

da się połączyć esp8266, DFPlayera i takie rozpoznawanie mowy

Dość karkołomne, szczególnie że esp8266 nie ma wejścia audio, a i z pojemnością pamięci u niego jakoś nietęgo. Na ESP32 w teorii da się, tylko trzeba podłączyć mikrofon przez I2S (np taki) i jakoś inteligentnie oprogramować DMA. Jeśli miałbym to robić to raczej na jakimś co najmniej RPi Zero W (ten mikrofon też będzie pasować, a w razie konieczności można użyć zwykłej karty dźwiękowej na USB). Rozwiązanie chyba najlepsze - bo różnicę w cenie RPI/ESP niweluje brak konieczności dfplayera i możliwość zastosowania normalnej syntezy mowy (niekoniecznie Mileny, możesz próbować z Googlem, ew. stosując Milenę jako fallback). Poza tym taki RPi może robić całą resztę roboty (np. sterować tym nieszczęsnym piecem), i na 100% zrobi to lepiej niż ESP.

 

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

Piec ma swój sterownik, jego zostawmy. Mój moduł ma tylko czytać kilka czujników temperatury i wysyłać je na serwer blynka, mowa to extra bajer. Może jest coś prostego w zastosowaniu, to by miało być tylko kilka pytań o podstawowe dane(max 10 szt).

Nie mam doświadczenia z RPi... 

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

@Treker Dziękuję, oczywiście w miarę możliwości będę udostępniał relacje z postępów 🙂

@ethanak Nie, "zwykły" espeak - korzystałem między innymi z tego artykułu: https://webinsider.pl/raspberry-pi-espeak-czyli-pi-do-nas-mowi/ Nie wiedziałem, że równolegle jest rozwijana gałąź espeak-ng, ale z opisu https://github.com/espeak-ng/espeak-ng/issues/141 wynika, że różnice są niewielkie. Znam "Milenę", obiecują ją przetestować, szczególnie, że espeak użyłem głównie po to, aby "na szybko" ocenić, czy przedstawione zadanie będzie realne w zakresie moich umiejętności 🙂 - a po "Kendrigernie" widzę Twój system, że działa znacznie lepiej

Ogólnie, ten programik wygląda mniej-więcej tak (początek):

#!/usr/bin/env python3

import speech_recognition as sr
import os
import time

r = sr.Recognizer()

while True:
    time.sleep(1)
    os.system('espeak -v pl "Naciśnij enter, abym Cię posłuchał"')
    x = input()
    os.system('espeak -v pl "Proszę mówić"')
   	 
    with sr.Microphone() as source:
   	 print("Słucham...")
   	 audio = r.listen(source)

    try:
   	 zdanie = r.recognize_google(audio, language='pl-PL')
   	 print("Powiedziałeś: " + zdanie)
   	 os.system('espeak -v pl "Powiedziałeś: ' + zdanie + '"')
   	 os.system('espeak -v pl "Odpowiadam"')
   	 
   	 if zdanie.find("rozszerzone")>-1:
   		 os.system('espeak -v pl "W technikum z wyjątkiem zawodu technik fotografii i multimediów przedmiotem rozszerzonym jest matematyka."')
   	 elif zdanie.find("godzin")>-1:
   		 os.system('espeak -v pl "Zdecydowana większość zajęć odbywa się od siódmej dwadzieścia do szesnastej trzydzieści. Zajęcia specjalistyczne mogą odbywać się w godzinach późniejszych. Pracujemy w systemie jednozmianowym."')

@SOYER Dziękuję za słowa uznania. Jak widzisz powyżej, rozpoznawanie mowy jest banalne i opiera się na gotowym interfejsie (niestety należy mieć stały dostęp do Internetu, ponadto - ale szczegółów nie znam - przy większych ilościach przetwarzanych komunikatów usługa jest już płatna). W pętli, gdy wcisnę enter, program "słucha" mikrofonu, a następnie wysyła próbkę do r.recognize_google - odpowiedzią jest string "zdanie", jeśli zawiera ona jakiś charakterystyczny wyraz (moja baza pytań jest niewielka), to ponownie wywołuję systemowo espeak z właściwą odpowiedzią. Dalej jest jeszcze obsługa wyjątku, jeśli moduł sobie nie poradzi, zgłaszany jest błąd

Co do pozostałej części pytania, to mój przedmówca omówił te kwestie - jeśli chcesz użyć DFPlayer, to Twoja baza odpowiedzi jest ograniczona - musisz nagrać osobny MP3 do każdej liczby, przy espeak (lub Milenie 🙂) wysyłasz nań zmienną, która zawiera odczytaną liczbę. Podobnie z rozpoznawaniem mowy, możesz zrobić to z gotowym modułem, tak jak ja tutaj: 

 - ale moduł tego typu ma wiele ograniczeń, np. rozpozna tylko Twój głos i to z niewielkiej odległości. Dlatego raczej musisz iść w stronę interfejsu np. od Google, a tu już RPi będzie niezbędne - chociaż możesz to zrobić np. tak, że mowę przetwarza telefon (nawet AppInventor ma dedykowany moduł), a właściwe polecenie już jako konkretne polecenie przesyłasz do właściwego sterownika bluetooth'em. Możliwości jest kilka 🙂

28 minut temu, ethanak napisał:

Poza tym taki RPi może robić całą resztę roboty (np. sterować tym nieszczęsnym piecem), i na 100% zrobi to lepiej niż ESP.

Pozwolę sobie tylko dopytać, czy nie lepiej jeśli sam proces regulacji prowadzi jakiś niskopoziomowy uC, a mini-komputer stanowi warstwę wyższą? Jeśli RPi się zawiesi, to regulacja temperatury nadal będzie działać, nie będzie tylko komunikatów głosowych 😉

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

8 minut temu, SOYER napisał:

Nie mam doświadczenia z RPi... 

Rozumiem, że masz doświadczenie z ESP8266, podłączaniem mikrofonu i dodatkowego RAM-u i komunikacją z jakimś silnikiem rozpoznawania mowy? 😉

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

15 minut temu, ethanak napisał:

Rozumiem, że masz doświadczenie z ESP8266, podłączaniem mikrofonu i dodatkowego RAM-u i komunikacją z jakimś silnikiem rozpoznawania mowy? 😉

słuszna uwaga @ethanak 😉

myślałem raczej nad czymś takim, tylko cena zabija... 

@wn2001 napisz proszę w  krótkich żołnierskich słowach jak by to wyglądało zrobić na RPi zero, żebym mógł wstępnie ocenić czy dam rade;) 

wprawdzie rpi3 mi sie kurzy w szufladzie ale po co taki kombajn... choć mógłbym wtedy własny serwer blynka postawić... 

Choć zero jest tanie i małe.... 

hmmm... 

 

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

@SOYER Nie jestem pewien, czy ten shield, do którego wysłałeś link, nie jest bardziej rozbudowaną wersją tego modułu, który wykorzystałem przy budowie robota kroczącego z odnośnika  powyżej - jeśli tak, nadal bazujesz na sprzętowym porównywaniu próbek sygnału dźwiękowego do zdefiniowanych przez Ciebie wzorca - czyli jesteś ograniczony zarówno dokładnością detekcji, jak i ilością komunikatów, które możesz rozpoznać (i faktycznie kosztuje 100zł więcej, niż płytka RPi 3B+ 🙂). Dlatego proponuję spróbować z interfejsem Google, krótko opiszę jakby to mogło wyglądać (zakładam, że sterowanie nadal opiera się na ESP8266 i skomunikowałeś je np. UART'em z RaspberryPi) - na początek polecam spróbować z 3B+, ewentualnie końcową wersję przenieść na tanie i lekkie RPi Zero:

  1. Kupujesz kartę dźwiękową USB - podłączasz ją do RPi, wykrywana jest automatycznie
  2. Podłączasz do karty mikrofon (chyba, że mikrofon był gotowy na USB), do wyjścia mini-jack głośniki
  3. Czytasz o: https://realpython.com/python-speech-recognition/ - czyli jak w Pythonie można rozpoznawać mowę
  4. Wykorzystujesz espeak lub Milenę: https://milena.polip.com/raspberry.shtml - do syntezy mowy
  5. Instalujesz pozostałe niezbędne biblioteki, np. PyAudio, z tym może być nieco szukania o błędach, ale ja dałem radę 😉
  6. Tworzysz program w pythonie, który pobiera sygnał audio z mikrofonu, a następnie na bazie instrukcji warunkowych wywołuje syntetyzator (jak widzisz u góry, wszystko jest oparte na gotowych, wysokopoziomowych instrukcjach)
  7. Jeśli punkt 7. działa, łączysz się z ESP8266, oczywiście wcześniej modyfikujesz jego program tak, że jeśli przez UART otrzyma polecenie, na przykład "temperatura", to w odpowiedzi odsyła ciąg tekstowy zawierający temperaturę
  8. Mając przystosowany również program ESP8266, możesz dodać np. do poszczególnych odpowiedzi głosowych Mileny informacje otrzymywane z ESP8266, np. o temperaturze

Ja bym to tak widział, oczywiście to wersja, że na Twój ESP8266 "nadbudowana" zostanie warstwa RaspberryPi odpowiedzialna za "bajery", a nie że np. RPi stanie się głównym sterownikiem 🙂

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

Kolejna aktualizacja - w skrócie, RPi może już wysłać sygnały do płytek z Arduino Nano na pokładzie, a te z kolei mogą wysterować diody WS2812B lub drukarkę termiczną - efekty widoczne na filmie 🙂

 

 

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

(edytowany)

Dopracowałem efekty świetlne - płytka sterująca trzema zestawami 12xWS2812B ma trzy transoptory (trzy bity), może zatem wysterować paski LED-owe na osiem różnych sposobów:

  1. Może nie robić nic
  2. Diody w pełnej gamie kolorów (demo "Rainbow" od Pololu)
  3. Diody tęczowo, ale każda ten sam kolor
  4. Efekt "zegarka"
  5. Silne białe światło celem doświetlenia kamer (jeśli te zostaną użyte)
  6. Drukarka termiczna na zielono + oczy migające "od czasu do czasu"
  7. Drukarka termiczna na czerwono + oczy wyświetlające losowe kolory
  8. Efekt "komety" + losowe piksele na pasku przy drukarce

Oprócz tego non-stop pracuje matryca 8x32, informująca o projekcie + losowe piksele + imitacja pulsu. Przepraszam za słaba jakość filmu, niestety telefon mocno przekłamał kolory, "na żywo" nie są aż tak silne i "nie oślepiają" 🙂 Tym samym kolejne elementy są przygotowane do spięcia z RPi 😉

Edytowano przez wn2001
Link do komentarza
Share on other sites

Kolejna aktualizacja - robot może odpowiedzieć na pytanie "która godzina?" oraz "widoczny kolor" - to drugie polega na wykonaniu zdjęcia, obliczeniu jego składowych R,G,B oraz wybraniu największej z nich - może zatem rozpoznać kolor czerwony/niebieski/zielony 😉 Oczywiście nic nie stoi na przeszkodzie, aby zainstalować OpenCV i robić jakieś ciekawsze rzeczy (z mojej strony to jedynie przykładowe demo) 🙂

 

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.