Czy Alexa może być wszędzie? Jak zintegrować Alexę z urządzeniami domowymi
Pracuję w firmie, która jest międzynarodowym producentem rozwiązań z zakresu Internet of Things. Projektujemy i tworzymy innowacyjne rozwiązania, które przenoszą życie na wyższy poziom: opracowujemy inteligentne wózki inwalidzkie, systemy sterowania ładowarek do pojazdów elektrycznych, rozwiązania Smart Home. W tym tekście chcę pokazać, jak zintegrować asystenta głosowego Alexa z urządzeniami, np. czajnikiem czy ekspresem do kawy.
Konstantin Mescheryakov. Solution Architect w Klika Tech. Architekt rozwiązań z ponad 11-letnim doświadczeniem. Mając wcześniejsze doświadczenie w dynamice płynów, sztucznej inteligencji i programowaniu wbudowanym, rozpoczął pracę w zespole R&D Klika Tech 4 lata temu i zajął się wieloma projektami związanymi z wbudowaną częścią rozwiązań IoT. Obecnie odpowiada za kompetencje AI w firmie, rozwijając świeże i gorące projekty oparte o TinyML. Wierzy, że wkrótce ML będzie wszechobecny i ma nadzieję, że poprawi to jakość życia każdego z nas.
Większość ludzi miała już do czynienia z wirtualnym asystentem głosowym. Co będzie potrzebne, aby sterowanie głosem stało się udziałem większej liczby osób i dotyczyło większej liczby rzeczy? Alexa firmy Amazon, Siri firmy Apple, Google Assistant i Cortana firmy Microsoft stały się wszechobecnymi elementami codziennego życia, ułatwiając nam wykonywanie codziennych czynności. Tacy sterowani głosem cyfrowi asystenci są wbudowani w szereg urządzeń, od inteligentnych głośników i smartfonów po samochody. A otwarte ekosystemy rozwoju oprogramowania zachęcają programistów do tworzenia nowych, interesujących produktów.
Jeśli spojrzeć na istniejące produkty, okaże się, że wszystkie z nich są bardzo zaawansowane. Wykorzystują one architekturę x86 lub procesory ARM Cortex-A. mogą być drogie i z pewnością energochłonne. Era Internetu Rzeczy (IoT), w którą wkraczamy, może polegać na przezwyciężaniu tych ograniczeń oraz wbudowywaniu asystentów głosowych w większą liczbę urządzeń, zapewniając ich łatwiejszą obsługę.
Niestety, poprawne rozpoznawanie mowy może być niemożliwe do osiągnięcia na urządzeniach wyposażonych jedynie w mikrokontrolery. Przetwarzanie musi zostać przeniesione na bardziej wydajny sprzęt, a w przypadku urządzeń podłączonych do sieci – do chmury, która jest dobrym miejscem do jego obsługi.
Amazon i Amazon Web Services (AWS) dostrzegają wartość obsługi głosowej w produktach i usługach konsumenckich oraz przemysłowych i dokładają starań, aby dostarczać programistom narzędzia w postaci Alexa Voice Service Integration for AWS IoT (AIA).
Spis treści
Jak mogę wykorzystać AIA do pracy?
Pierwszym krokiem do uwolnienia funkcji głosowych w ograniczonych urządzeniach jest ogólny przegląd architektury stojącej za AIA. Musimy odciążyć całą funkcjonalność Alexy i przenieść przetwarzanie do chmury, dlatego musimy być w stanie wysyłać i odbierać strumienie danych audio wraz z komunikatami wywołującymi. Najprawdopodobniej potrzebny będzie inny kanał komunikacji, aby wesprzeć funkcjonalność biznesową, więc te strumienie powinny dobrze ze sobą współgrać. Zazwyczaj kanał ten oparty jest na protokole MQTT, a więc może być ponownie wykorzystany również dla danych Alexy.
Interfejs do komunikacji pomiędzy urządzeniem a Alexa Voice Service (AVS) jest zdefiniowany przez zestaw specjalnych tematów MQTT. Powinny one przechodzić przez brokera AWS IoT Core, więc trzeba mieć coś stworzonego dla każdego urządzenia IoT, które będzie wdrażane. Jeśli już używasz AWS IoT Core, możesz ponownie skorzystać z istniejącego urządzenia i jego nazwy jako clientId. W przeciwnym razie będziesz musiał użyć ścieżki opisanej w dokumentacji.
Podstawowa struktura może być postrzegana jako wysokopoziomowe tematy w ramach $aws/alexa/ais/v1/<clientId>. W przybliżeniu są to:
- Connection: temat ten służy do zarządzania połączeniem, które obsługuje podłączanie i odłączanie urządzenia od systemu AVS.
- Capabilities: temat używany do potwierdzenia funkcjonalności. W kategoriach AIA, funkcjonalność to predefiniowany zestaw funkcji obsługiwanych przez urządzenie. Obecnie jest pięć wariantów, ale nowe mogą zostać dodane w kolejnych wersjach. Opiszę je pokrótce nieco później.
- Directive: temat dla funkcjonalności związanej z funkcją inicjowaną przez AVS.
- Event: temat dla funkcjonalności związanej z funkcją inicjowaną przez urządzenie.
- Others: obecnie mikrofon i głośnik to tematy obejmujące transmisję danych związanych z możliwościami.
Z wyjątkiem tematu “połączenia”, wszystkie przesyłane dane muszą być zaszyfrowane symetrycznie przy użyciu algorytmu AES-GCM. Szyfrowanie odbywa się na TLS, aby chronić dane użytkownika w chmurze AWS.
Istnieje sekwencja, którą należy wykonać, aby móc komunikować się z usługą głosową Alexa:
- Po pierwsze, należy zarejestrować swoje urządzenie. Odbywa się to za pomocą bezpiecznego
endpoint’u HTTP/1.1. Należy podać informacje o uwierzytelnianiu Alexy za pomocą tokena odświeżającego – LWA i ID klienta Alexa, schemat szyfrowania obsługiwany przez urządzenie oraz informacje o połączeniu AWS IoT Core. W zamian otrzymuje się klucz publiczny, który będzie użyty do utworzenia symetrycznego klucza szyfrującego i głównego tematu MQTT. - Następnie należy połączyć się z chmurą przez MQTT i zasubskrybować wspomniane tematy, a potem podłączyć urządzenie do systemu AVS.
- Teraz należy powiadomić AVS o możliwościach obsługiwanych przez urządzenie. Odbywa się to poprzez publikację opisu możliwości w temacie capabilities/publish (możliwości/publikuj). Tę czynność należy wykonać zaraz po podłączeniu do systemu AVS. Po otrzymaniu potwierdzenia, jesteś gotowy do pracy.
Których funkcji urządzenia potrzebujesz?
AIA obsługuje obecnie pięć możliwości:
- System. Obowiązkowa zdolność, która jest wykorzystywana do tak istotnych funkcjonalności jak rotacja sekretów, kontrola systemu Alexa Attention oraz raportowanie błędów i wyjątków.
- Clock. Ta opcja jest używana do synchronizacji lokalnego zegara z AIA.
- Microphone. Wykorzystywany do przesyłania strumienia danych audio z mikrofonu urządzenia i sterowania tym procesem. Do ochrony prywatności użytkownika podczas przepływu ruchu internetowego służą dwie dyrektywy i odpowiadające im zdarzenia, które uruchamiają i zatrzymują transmisję danych. Transmisja ta może być inicjowana z chmury i z urządzenia, np. gdy użytkownik wypowiada słowo wywołujące lub naciska przycisk na urządzeniu. Jeśli słowo funkcji budzenia zostało użyte do zainicjowania transmisji danych, powinno być zawarte w danych audio w celu weryfikacji, dlatego należy zachować bufor audio o długości 500ms na urządzeniu. Niezależnie od sposobu wywołania, urządzenie musi wskazać, że streamuje dane zgodnie z wytycznymi Alexa Attention System. AVS oczekuje, że dane będą zakodowane w 16-bitowym liniowym PCM z częstotliwością próbkowania 16 kHz i pojedynczym kanałem. Jeśli więc Twoje urządzenie posiada kilka mikrofonów, możesz potrzebować dodatkowego wstępnego przetwarzania danych audio.
- Speaker. Ta funkcjonalność jest używana do odtwarzania dźwięku z urządzenia. Odtwarzanie dźwięku jest kontrolowane przez chmurę, która wysyła odpowiednie dyrektywy i dane audio. Urządzenie może jednak wysyłać do chmury zdarzenia z przycisków na urządzeniu, aby umożliwić większą kontrolę. Dane audio są kodowane za pomocą kodeka Opus bez żadnego kontenera, który jest wystarczająco lekki, aby zmieścić się w urządzeniach. Dane audio są przeplatane specjalnymi znacznikami. Za każdym razem, gdy napotkasz taki znacznik, musisz wysłać zdarzenie SpeakerMarkerEncountered, aby powiadomić system AVS o aktualnej pozycji odtwarzania.
- Alerts. Funkcja Alerty umożliwia urządzeniu odtwarzanie alertów, takich jak alarmy i przypomnienia. Ta funkcjonalność wymaga, aby urządzenie było w stanie zapisywać i odtwarzać alarmy nawet wtedy, gdy jest odłączone od systemu AVS, dlatego musi mieć wbudowany zegar RTC. To z kolei zależy od możliwości głośnika.
Można mieszać te możliwości w zależności od konkretnego zastosowania urządzenia. Na przykład, jeśli budujesz inteligentny budzik, możesz nie potrzebować mikrofonu, ale będziesz musiał dodać funkcje zegara i alarmów do urządzenia.
Ocena, gdzie oddać AIA
Teraz, gdy masz już lepsze pojęcie o tym, jak działa AIA, nadszedł czas, aby ocenić, w jaki sposób włączyć AIA do istniejącego produktu lub jak stworzyć nowe urządzenie obsługujące AIA. Najprostszym sposobem jest uruchomienie swojego produktu przy użyciu jednego z wielu zestawów deweloperskich, które zostały już zmontowane.
Usługi głosowe w urządzeniach ograniczeniami przy użyciu ESPRESSIF ESP32-VAQUITA-DSPG
Espressif wprowadził Alexę do MCU, zanim jeszcze AVS dla AWS IoT ujrzał światło dzienne. Dzięki temu platformy rozwojowe ESP32-LyraTD-MSC i ESP32-LyraT wspierały współpracę z Alexą, ale ta integracja pochłaniała sporą część zasobów platformy. Nowsza platforma z obsługą AIA oparta jest na nowszej generacji układu ESP32-WROVER SoC i posiada zintegrowany układ DBMD5P Audio SoC do rozpoznawania głosu w dalekim polu. Z punktu widzenia oprogramowania, jest on oparty na standardowym ESP-IDF SDK z dodatkowymi komponentami z ESP-VA-SDK. Główną wadą programu jest fakt, że jest on dostarczany z zastrzeżonymi, statycznie powiązanymi bibliotekami, które mogą utrudniać proces debugowania.
Dobry przykład na to, jak unikać przetwarzania dźwięku: NXP SLN-ALEXA-IOT
Firma NXP przedstawiła dobry przykład rozwiązania, które nie wymaga żadnego DSP ani innego modułu przetwarzania dźwięku. Układ MCU i.MX RT106A jest wystarczająco wydajny, aby wykryć słowo „wake” (oznaczające budzenie/wywołanie) i wykonać wszystkie inne operacje w układzie scalonym.
SDK umożliwia rozległą konfigurację. Podczas gdy część kodu źródłowego związanego ze streamowaniem dźwięku i wykrywaniem słów wywołujących jest dostarczana w formie biblioteki statycznej, kod do komunikacji z AVS jest dostępny. Dokumentacja również wygląda całkiem nieźle.
Niezwykle potężny zestaw: QUALCOMM® HOME HUB 100 zestaw deweloperski dla Amazon AVS
Ten zestaw firmy Qualcomm ma potężną moc. Dzięki wielu różnym czujnikom, nadaje się do oceny wielu możliwych przypadków użycia. Zaawansowany procesor audio znacznie poprawia jakość rozpoznawania mowy. Zestaw ma także Wi-Fi, BLE, Zigbee oraz wspiera protokoły Thread, więc można go zintegrować z innymi urządzeniami inteligentnego domu!
Oprogramowanie jest również całkiem dobre. Większość kodu źródłowego dostępna w trybie open-source (nie dotyczy to jednak implementacji funkcjonalności związanych z AVS). Jeśli jednak Twoje główne środowisko programistyczne to systemy inne niż Windows, możesz napotkać pewne problemy: SDK jest obsługiwane przez Linuksa, ale dokumentacja nie zawiera żadnych wskazówek na ten temat.
Zestaw można rozbudowywać, ponieważ Qualcomm udostępnia pliki sprzętowe do wglądu. Tak więc, jest to dobry wybór dla szerokiego spektrum możliwych produktów.
Wykrywanie słów wywołujących na samej płycie: STMICROELECTRONICS STEVAL-VOICE-UI
Jest to kolejny zestaw rozwojowy, który rozpoznaje słowa wywołujące. Jest on jeszcze w fazie przedpremierowej, więc musimy poczekać, aż będzie można dokonać jego oceny. Prezentuje się on jednak dość podobnie do oferty NXP.
SDK do dodawania usług głosowych do twojego urządzenia
Wraz z wprowadzeniem AIA Client SDK i AIA Client SDK Integration with FreeRTOS, możesz teraz zastosować AIA w wybranym przez siebie urządzeniu. Zatem jeśli masz już urządzenie, na którym chcesz aktywować funkcję Alexa bez dokonywania drastycznych zmian w sprzęcie, wszystko przed Tobą!
Nie przegap niczego, co dotyczy asystenta głosowego
Sterowanie głosem może całkowicie zmienić sposób interakcji użytkownika z urządzeniem i może stanowić podstawę do stworzenia zupełnie nowego urządzenia. Jeśli masz jakiekolwiek wskazówki dotyczące tego, jak tworzyć tanie produkty sterowane głosowo na podstawie wcześniej ograniczonych urządzeń, prosimy o zamieszczenie komentarza poniżej. Jeśli masz pytania, prześlij je do nas, aby uzyskać informacje, dzięki którym niczego nie przegapisz.
Zdjęcie główne artykułu pochodzi z unsplash.com