Google od jakiegoś czasu udostępnia biblioteki pozwalające na integrację Asystenta Google z własnymi urządzeniami. Jeśli więc myślisz o inteligentnym głośniku, ale nie zamierzasz kupować Google Home, chcesz mieć na jednym urządzeniu zarówno asystenta Google jak i Alexę (choć tutaj zajmę się tylko produktem Google), czy po prostu masz Raspberry Pi, głośniki i mikrofon które nie są ci do niczego potrzebne, to możesz korzystając z tych narzędzi umieścić tego asystenta głosowego na malinie.
Potrzebne elementy:
- Raspberry Pi (rekomandowana wersja 3B/3B+. Na Zero powinno działać, ale nie obsługuje wybudzania głosowego – czyli zamiast mówić ” Google” trzeba podłączyć przycisk)
- Zasilacz – ponad 1A
- Karta microSD o pojemności przynajmniej 4 GB (bardzo rekomendowane 8 lub więcej) i o jak najwyższej klasie prędkości (klasa 10 zapewni lepsze doświadczenie od niższych, a obecnie jest to na tyle mały koszt, że nie polecam kupować innych.)
- Głośniki
- Mikrofon (polecam kamerkę PS Eye – obecnie cena tego urządzenia jest dość niska, a powinna być lepsza w rozpoznawaniu mowy niż tanie mikrofony)
Przedstawię tu w zasadzie dwa sposoby na zainstalowanie Asystenta Google. Pierwszy, wykorzystujący oficjalną bibliotekę i drugi, ze zmodyfikowaną implementacją wzbogacającą asystenta o kilka funkcji, jak choćby kontrolowanie serva głosem, integrację z kodi, czy strumieniowanie muzyki z YouTube.
Pierwsze kroki
Wspólnym krokiem dla obu sposobów jest konieczność zainstalowania systemu operacyjnego – Raspbiana (sposób instalacji jest jednak dobrze opisany w internecie), a także sposobu kontroli systemu – albo podłączonego monitora i klawiatury, albo sposobu na zdalną kontrolę: ssh/vnc.
Zaktualizuj Raspbiana i biblioteki następującymi komendami:
1 2 |
sudo apt-get update sudo apt-get upgrade |
Następnie upewnij się, że w systemie znajduje się git:
1 |
sudo apt-get install git |
Teraz możesz zająć się konfiguracją projektu w konsoli Google – możesz to zrobić z dowolnego komputera.
Wejdź na stronę https://console.actions.google.com/ i stwórz nowy projekt wybierając przycisk Add/import project i wypełniając formularz. Obecnie język polski nie jest dostępny, ale prawdopodobnie pojawi się w niedalekiej przyszłości.
Następnym krokiem upewnienie się, że API jest włączone – zrobisz to wchodząc na stronę https://console.developers.google.com/apis/api/embeddedassistant.googleapis.com/overview i po upewnieniu się, że pracujesz na właśnie zarejestrowanym projekcie (w lewym górnym rogu), sprawdzając czy na przycisku jest napisane “Zarządzaj”, czy “Włącz”.
Skonfiguruj OAuth na tej stronie: https://console.developers.google.com/apis/credentials/consent – wystarczy wybrać adres email, można jednak także zmienić nazwę urządzenia i dodać kilka opcjonalnych elementów.
Gdy już to zrobisz, musisz wrócić do konsoli akcji i przejść do rejestracji urządzenia. Znajdź na stronie opcję Device Registration, wybierz Register Model i podążaj za instrukcjami.
Będziesz musiał wypełnić nazwę produktu, producenta i rodzaj urządzenia. Pierwsze dwa są dowolne, a choć ostatni też nie wpłynie na nic jeśli tylko chcesz mieć asystenta, to najbardziej sensowna wydaje mi się opcja speaker.
Następnie będziesz musiał pobrać plik .json z danymi logowania i przesłać go na Raspberry Pi. Sposób będzie zależał od użytej metody połączenia z Maliną. Następne okno możesz jednak spokojnie pominąć.
I to tyle jeśli chodzi o kroki wspólne. Teraz możesz przejść do konfigurowania przykładów od Google, albo GassistPi – który na asystenta nakłada od razu trochę bibliotek. Dla osoby chcącej samemu pisać coś na Asystenta, przykłady od Google, które nie są “zanieczyszczone” obcym kodem wydają mi się lepszą opcją, ale dla zwykłego użytkownika lub nawet kogoś chcącego tylko trochę pomajstrować, GassistPi pozwala łatwo skonfigurować użyteczne funkcje.
GassistPi
Zacznę od wersji stworzonej przez shivasiddharth.
Na start musimy sklonować repozytorium na GitHubie – w terminalu Raspberry Pi wpisujemy
1 |
git clone https://github.com/shivasiddharth/GassistPi |
Następnie otrzymasz kilka możliwości konfiguracji urządzeń audio. Ja tu podam 3 które wydają mi się najbardziej prawdopodobne (w związku z małą dostępnością/wysoką ceną pozostałych 3 rozwiązań. Możesz jednak je znaleźć w instrukcji na stronie projektu):
1 2 3 |
sudo chmod +x ./GassistPi/audio-drivers/USB-MIC-JACK/scripts/usb-mic-onboard-jack.sh sudo ./GassistPi/audio-drivers/USB-MIC-JACK/scripts/usb-mic-onboard-jack.sh speaker-test |
1 2 3 4 5 6 7 |
sudo chmod +x ./GassistPi/audio-drivers/USB-MIC-HDMI/scripts/configure.sh sudo ./GassistPi/audio-drivers/USB-MIC-HDMI/scripts/configure.sh sudo reboot cd /home/_USER_NAME_ sudo chmod +x ./GassistPi/audio-drivers/USB-MIC-HDMI/scripts/install-usb-mic-hdmi.sh sudo ./GassistPi/audio-drivers/USB-MIC-HDMI/scripts/install-usb-mic-hdmi.sh speaker-test |
1 2 3 |
sudo chmod +x ./GassistPi/audio-drivers/USB-DAC/scripts/install-usb-dac.sh sudo ./GassistPi/audio-drivers/USB-DAC/scripts/install-usb-dac.sh speaker-test |
Upewnij się, że mikrofon działa za pomocą tej komendy:
1 |
speaker-test -t wav |
Plik z danymi logowania – .json z wcześniej – musi się znaleźć w folderze domowym (/home/_nazwa_użytkownika_) – nazwa nie może być zmieniona.
Następnie możesz zacząć samą instalację. Ta wygląda różnie dla Raspberry Pi 3 i zero. Jak wspomniałem – polecam 3, ponieważ na zero nie zadziała aktywacja głosem i tylko to tu opiszę (instrukcje dla Pi Zero można znaleźć na stronie projektu).
Zacznij od wpisania tych dwóch komend:
1 2 |
sudo chmod +x ./GassistPi/scripts/gassist-installer-pi3.sh sudo ./GassistPi/scripts/gassist-installer-pi3.sh |
Włączy się instalator i zapyta o dane naszego projektu – nazwę pliku .json który wcześniej przesłaliśmy (pełną – wraz z rozszerzeniem), id projektu (Najłatwiej je znaleźć na stronie https://console.cloud.google.com) i ustawione wcześniej id produktu (do znalezienia na https://console.actions.google.com – pod Device registration)
Gdy już wprowadzisz te dane zostaje ci czekanie aż skończy instalację (chwilę to zajmie) – na koniec będzie jednak trzeba dodatkowo ją potwierdzić. W terminalu pojawi się link w który należy wejść i zalogować się na swoje konto Google użyte podczas rejestracji urządzenia. Wyświetlony kod należy wpisać (lub wkleić :) w terminalu.
Kod powinien się sam włączyć po autoryzacji – można więc już próbować mówić “Ok Google” i komendy. Jeśli nie słyszysz odpowiedzi, spróbuj zwiększyć poziom dźwięku komendą “Hey Google, Set volume to maximum” – dalej możesz ustawić go oczywiście dla normalniejszych wartości korzystając z tej samej komendy i zastępując po prostu maximum jakąś inną wartością.
Następnie możemy przejść do ustawiania asystenta by uruchamiał się wraz z Raspberry Pi.
Przejdź do /GassistPi/systemd i otwórz plik gassistpi-ok-google.service by zamienić ‘saved-model-id’ na właściwe model id z konsoli akcji – to samo, które wcześniej podaliśmy podczas instalacji.
Teraz zostało tylko wpisanie tych kilku komend:
1 2 3 4 |
sudo chmod +x ./GassistPi/scripts/service-installer.sh sudo ./GassistPi/scripts/service-installer.sh sudo systemctl enable gassistpi-ok-google.service sudo systemctl start gassistpi-ok-google.service |
i już powinno wszystko działać. Możesz od razu sprawdzić czy asystent włącza się wraz z maliną uruchamiając ją ponownie.
Dalej otrzymujemy do dyspozycji kilka opcji konfigurowania dostępnych w GassistPi funkcji – ale nie będę tu ich opisywał, bo wraz z nowymi wersjami pojawiają się kolejne. Dam natomiast linka do strony na której są instrukcje do wszystkiego – https://github.com/shivasiddharth/GassistPi/wiki/Customizations
Przykłady Google
Dużym plusem metody którą tu pokażę jest prostota aktualizacji i instalacji.
Pierwszym krokiem jest konfiguracja audio. W przeciwieństwie do GassistPi nie jest to automatyczne, ale jest dość proste.
Musisz zobaczyć dostępne urządzenia audio za pomocą komend
1 2 |
arecord -l aplay -l |
Następnie stwórz nowy plik w /home/_nazwa_użytkownika_ (domyślnie pi) o nazwie .asoundrc (np. wpisując nano .asoundrc lub jeśli korzystasz z pulpitu po prostu korzystając z edytora tekstu) i wpisz w nim:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
pcm.!default { type asym capture.pcm "mic" playback.pcm "speaker" } pcm.mic { type plug slave { pcm "hw:<numer karty>,<numer urządzenia>" } } pcm.speaker { type plug slave { pcm "hw:<numer karty>,<numer urządzenia>" } } |
Zastępując oczywiście numery karty i urządzenia właściwymi twoim. W przypadku głośników bcm2835 ALSA oznacza wyjście audio jack, a bcm2835 IEC958/HDMI oznacza HDMI. Mikrofon to prawdopodobnie będzie 1,0 a głośniki 0,0.
Następnie zmień nazwę pliku .json pobranego z konsoli na assistant.json i umieść w folderze /home/_nazwa_użytkownika_
Teraz zostaje już sama instalacja. Wystarczą te trzy komendy:
1 2 3 |
git clone https://github.com/t1m0thyj/AssistantPi.git cd AssistantPi bash install.sh |
Po zakończeniu powinien się pojawić link do strony na której będzie trzeba autoryzować aplikację i… tyle. Wszystko już powinno działać. Asystent powinien sam się uruchomić wraz z Raspberry Pi.
Do aktualizacji natomiast wystarczy ponowne przejście do folderu AssistantPi i komenda
1 |
bash upgrade.sh |
Na zakończenie
Jeśli chcesz modyfikować asystenta, to jest to dość proste, ponieważ jest to w zasadzie biblioteka Pythona. Może się do tego przydać dokumentacja od Google, którą można znaleźć tutaj.
Do tego jeśli chcemy w pełni wykorzystać asystenta potrzebna nam będzie aplikacja Google Assistant na Androida, która jednak jest niedostępna w Polsce. Aby ją zainstalować trzeba więc pobrać plik .apk, a do tego by używać głównym językiem systemu musi być jeden z obsługiwanych (np. Angielski). Pozwala ona m.in. na ustawienie gdzie znajduje się urządzenie, włączenie komend spersonalizowanych (kalendarz, emaile itd.), czy konfiguracje opcji “routines” pozwalającej przypisać jedną komendę do wielu akcji. Czyli komendy takie jak “Good morning”, pozwalające odtworzyć zestaw akcji np. powiedzieć prognozę pogody i przeczytać wydarzenia w kalendarzu.
Do tego niestety, ale wersja asystenta na Raspberry Pi nie pozwala na odtwarzanie muzyki na urządzeniu. GassistPi ma domyślnie zainstalowane biblioteki dodające tę możliwość pod komendę “stream”, ale jednak nie pozwala na tyle co normalne Google Home.
Za sugestią z komentarzy zaznaczę także jedną rzecz: wszystkie wypowiedziane komendy (wszystko po wywołaniu asystenta do zrealizowania komendy + kilka sekund) trafia na serwery Google. Choć nic nie wskazuje na to, by Google jakkolwiek zbierało dźwięk poza tym okresem (detekcja aktywacji odbywa się chyba lokalnie), to i tak osoby bardzo dbające o prywatność powinny raczej unikać korzystania z tego.
Istnieją alternatywne sposoby wywołania asystenta, których to nie opisałem – można skorzystać z alternatywnego silnika do wykrywania konkretnych fraz, jak np. snowboy, albo porzucić zupełnie hotword i skorzystać z fizycznego przycisku :)
Nie wiem kto normalny na własne życzenie instaluje podsłuch ?
Autor powinien przestrzec w artykule ,że takie zabawki mogą ograniczać w pewien sposób prywatność, a rozmowy wyciec.
Masz trochę racji, ale idąc tym tokiem myślenia powinniśmy zaprzestać używać np. smartfonów z Androidem (w domyślnej konfiguracji). Mało kto wyłącza np. Asystenta Google, a przecież sprzedawcy nie informują, że taka funkcja jest domyślnie włączona.
Tu nie chodzi ,żeby nie korzystać tylko ,żeby uświadomić czytelników , że asystent google słucha , przetwarza . Dzięki temu każdy będzie świadomy tego na co się porywa , jakie to rodzi ew. konsekwencje dla ich prywatności :)
A to jak najbardziej pełna zgoda.
Ogólnie się zgadzam jeśli chodzi o problemy z prywatnością asystentów głosowych, jednak tutaj jest to oprogramowanie sość otwarte.
Tak, Google zawsze dostanie twoje zapytania, ale możesz go skonfigurować tak, by zwyczajnie nie mógł nagrywać “w tle” – możesz bowiem wywoływać kod asystenta dopiero po spełnieniu jakiegoś warunku który nie wymaga kodu od Google. Przycisk, jakieś czujniki, czy alternatywny program do wykrywania hotword.
Przykładem takiego może być snowboy, który choć jest chyba lepiej przystosowany do Alexy, powinien bez problemu działać z asystentem Google.
Raczej rynku asystentów głosowych się już nie zatrzyma, więc zostaje tylko mieć nadzieję że dalej będą na tyle konfigurowalne, by dało się podsłuch wyłączyć :)
O tym właśnie mogłeś wspomnieć w artykule. Poradnik bardzo dobry :)
Już dodałem (na koniec poradnika :) Dzięki za zwrócenie na to uwagi.
A da się go już w tym momencie po tych wszystkich konferencjach i po uruchomieniu asystenta na telefonach zmusić do używania języka polskiego?
Działa rewelacja. Ma ktoś info kiedy SDK obsłuży język polski.
Udało mi się go odpalić w języku polskim, się jako service pushtotalk. Wymagania interakcji aby do niego mówić nie reagował na ok google, tylko w konsoli musiałem na nacisnąć klawisz. Czekam na pomoc żeby reagował na ok google
Cześć mugłbyś zdradzić jak zmieniles jezyk na pl
Jak udało ci się uruchomić pushtotalk po polsku ?
Próbował ktoś rozbudować ten projekt o dalsze funkcje? Np. sterowanie głosowe światłem?
Skąd ja mam wziąć te numery karty i urządzenia?
Witam, niestety metoda wymaga aktualizacji dziś już wiedziała gdy się robi od zera:/ Będzie aktualizacja?
Witam.
Udało mi się zainstalować asystenta, wszystko fajnie. Jedyne co to odpowiada w języku chyba hiszpańskim. Edytowałem plik config.yaml, ustawiałem różne opcje językowa tam dostępne i ciągle to samo. Może ktoś ma pomysł