Pogadaj z Jolką

Cześć,
czy jest tutaj ktoś kto używa polecenia aktywującego(“Alexa”, “Avocado”, itp.)?
O ile z wydawania poleceń na żądanie(przyciskiem mikrofonu) jestem zadowolony o tyle wykrywanie polecenia aktywującego czasami działa, czasami nie, czasami ma fake-detekcje. Próbowałem już różnych wartości czułości nasłuchiwania i nie udało mi się znaleźć złotego środka, a krzyczenie czy też wielokrotne powtarzanie polecenia mija się z celem.

Drugie pytanie to czy badał ktoś temat dodania słowa kluczowego np. Jolka" jako słowo aktywujące?

Masz rację, że różnie to działa jeśli chodzi o polecenia aktywujące i z pewnością wymaga jeszcze dopracowania. Także retoryczne pytanie ‘Witaj w domu, powiedz w czym mogę Ci pomóc?’
powinno aktywować mikrofon w oczekiwaniu na polecenie. Chętnie
widziałbym taką formułę, że po wejściu do domu/mieszkania jeżeli
według geolokalizacji nie było mnie dłużej niż x czasu(powiedzmy godzinę) to następuje powitanie i pytanie Jolki czy przekazać raport co się zmieniło od czasu opuszczenia lokalizacji np. naruszenia czujników, zmiana temperatury, wilgotności, dzwonki do drzwi/furtki, czy włączyć muzykę lub światła w/g wcześniej ustalonej sceny lub pory dnia itp. Teoretycznie jest to już możliwe poprzez skrypty i automatyzacje ale ponieważ wiele funkcji i integracji zostało wbudowanych to zrobienie takiej wbudowanej interakcji z odhaczanym listingiem obsługiwanych raportów/poleceń nie przekracza aktualnych możliwości bramki.
Nie chcę aby brzmiało to jak narzekanie więc dopowiem, że od dawna żaden gadżet nie sprawił mi tyle radości co bramka AIS.

3 polubienia

Tak, wiemy - rozpoznawanie słowa aktywującego mikrofon (nasłuchiwanie wyrażenia aktywującego) to jest coś co wymaga gruntownego ulepszenia.

Jesteśmy otwarci na integrację mechanizmu opracowanego przez jakąś firmę, która się tym zagadnieniem profesjonalnie zajmuje. Mieliśmy spotkania i prezentacje ale niestety okazuje się, że taki działający mechanizm który nie jest zamknięty i działa to… nie bardzo istnieje jeszcze na rynku…

To co dostarczamy to rozwiązanie firmy Picovoice która twierdzi, że jest najlepsza… a widzimy jak to działa.

Inne mechanizmy są albo kupione przez korporacje i zamknięte do wewnętrznego użytku* albo nie działają.

*np. Sonos kupil ostatnio startup Snips (żeby uniezależnić się od Google, którego pozwał za kradzież technologii) https://snips.ai/ za 37 millionów $ i zamknął dostęp dla innych firm do technologii Snips

Tu jest namiastka czegoś takiego :wink:

Oczywiście dostarczymy lepsze mechanizm jak to tylko będzie możliwe techniczne, w tym segmencie IT (rozpoznawanie mowy) rewolucja jest co tydzień i to tylko kwestia czasu kiedy normalnie działający mechanizm będzie dostępny :slight_smile:

1 polubienie

Dajemy kilka sekund na dokończenie mówienia przez Jolkę i zastanowienie się nad odpowiedzią przez użytkownika Jolki i włączamy mikrofon:

Pozwolę sobie pociągnąć temat tutaj dalej.
Który mikrofon? Bramka zdaje się nie ma mikrofonu, więc pilot, tablet?
Dobra, przetestowałem. Odpala mikrofon na pilocie. A da się jakoś odpalić mikrofon na tablecie?

do bramki można dołączyć mikrofon po USB, testowane z Sony PS Eye
Android sam powinien przełączyć na najlepszy mikrofon (tak samo jak przełącza audio na HDMI lub SPDIF) ale najlepiej zostawić podłączony jeden mikrofon (żeby mieć pewność który działa).

Coś takeigo można kupić za 20 zł :wink:
image

Na tą chwilę nie ma takiej funkcjonalności, pozwalamy tylko na zdalne sterowanie odtwarzaczem adudio, wbudowanym w aplikację klienta, ale w sumie możemy coś takiego dodać.
To co się dzieje po naciśnięciu przycisków w powiadomieniu AIS (czyli też ikonki mikrofonu na telefonie/tablecie)

jest tu w kodzie:

Czyli wystarczy, że uruchomimy tą samą akcję która jest uruchamiana po naciśnięciu przycisku mikrofonu ale zdalnie z bramki.

fajny pomysł :slight_smile: daje zgłoszenie do Github

1 polubienie

Super że pomysł się spodobał.

  1. Jak się ma wpinanie takiego mikrofonu do docelowego rozwiązania jakim jest głośnik? (z tego co pamiętam docelowo bramka ma wylądować w głośniku? BTW może już znacie przybliżony termin? może jakaś dev wersja?)

  2. Włączanie wszystkich mikrofonów na raz nie jest dobrym pomysłem, może jakiś “Pomocnik” z wyborem mikrofonu używanego jako default i dodanie pola w ais_ai_service.publish_command_to_frame umożliwiającego wskazanie mikrofonu?

  3. TTS też jest puszczany na wszystkie możliwe urządzenia co w przypadku tabletu i bramki w jednym pomieszczeniu brzmi często niewyraźnie, bo komunikaty nie są zsynchronizowane(czego nie wymagam), ale fajnie byłoby mieć opcję zaznaczenia gdzie ma lecieć treść TTS, może podobnie jak w pkt 2? :slight_smile:

Ad 2. przetestowałem włączanie przyciskiem Aqara mikrofonu w pilocie. Działa ok, ale trzeba go mieć w ręce, jeśli leży na szafce to nie łapie dźwięku, co w sumie traci ten ‘use case’ .

Mam problem z mikrofonem.
Do bramki podpięta jest po USB karta dźwiękowa z wyjściem na mikrofon, oryginalny pilot oraz kamerka Sony PS Eye.
Czyli w zasadzie są 3 mikrofony w systemie.
Czasami zdarza się, że Android nie widzi ani mikrofonu z kamerki ani z pilota (zakładam, że przełącza się na mikrofon z karty dźwiękowej). No i wtedy nie ma możliwości wydania komendy głosowej.
Czy jest możliwość wybrania na stałe mikrofonu np. z kamerki??
Czyli w zasadzie chodzi o punkt 2 z wypowiedzi Stravi

@bif1005 czy był jakiś problem z dodaniem mikrofonu do Ais?

I jak się sprawuje Oraz jaki to model ?

1 polubienie

Na chwilę obecną odłączyłem od bramki - będę instalował devkit.
Używałem takiej karty:
https://nowyelektronik.pl/index.php?id_product=90611&controller=product
Całkiem nieźle się sprawowała…

Hej
Mam kilka nurtujących pytań.
@jolka bardzo proszę w miarę możliwości o odpowiedź na poniższe zagadnienia.

Aktualnie pracujecie nad aplikacjami mobilnymi, może któreś z poniższych opcji jest możliwa do wprowadzenia bez większego wysiłku przy aktualnych kompilacjach.
Nie jestem programistą i może niektóre z tych rzeczy są abstrakcyjne,
a niektóre możliwe, że z niewiedzy w ogóle źle rozumiem :stuck_out_tongue_closed_eyes:

1

Czy jest możliwość aktywowania zdalnie w apliakcji mikrofonu (emulator przycisku)?
Rozumiem, że jest to guzik, if naciśniesz to włacz mikrofon, tak samo hotword jak wykryje to wlacz mikrofon, czy można zrobić dodatkowego trigera, komende, np. tak jak mogę “mobile_ais_dom_4534436” dać usługę notify to on jest wyzwalaczem?

2

Czy jest możliwość aby w jakiś sposób atrybutować powiedziane komendy przez aplikacje X i Y.
Mówie do jednego telefonu to komenda ma atrybut mobile_ais_dom_453443 a do drugiego mobile_ais_dom_99999.
Można by zrobić wtedy w intencjach, że jak mówię do tabletu X to samo zapal światło wystarczy, bo wiem z jakiego pokoju mówię
W momencie przełączenia guzika w aplikacji, mogę wyciągnąć jaki użytkownik to zrobił data.new_state.context.user_id i żeby było tak samo w przypadku głosowej komendy.
W Dzienniku widzę, kto przełaczył, ale jak komenda jest głosowa to nie widać.
Tak samo data.new_state.context.user_id:null
Żeby np. można było w intencjach zrobić akcję wysłania “komendy” przez mqtt z ID użytkownika/ urządzenia

3

Czy jest możliwe dodanie “sensora”, w momencie włączenia mikrofonu, czy to przez guzik, czy też hotword, jest sobie encja, która zmienia stan np. true, po deaktywacji false

Zastosowanie: w przypadku włączenia mikrofonu, ściszam telewizor żeby lepiej zrozumiał to co mówie. Tutaj też istotne jest który mikrofon w jakiej aplikacji.

4

Czy jest jakaś możliwość wyłączenia agenta AIS,
a żeby został jedynie Conversation z własnymi sentencjami.
Tak jak mogę wyłaczyć agenta Google Home odinstalowując integracje google home
Chodzi o to żeby w razie czego powiedział nie rozumiem a nie sam wymyślał Włączam parowanie urządzeń zigbee

5

Jak dobrze zrozumiałem, wrzucacie do /res/raw swój wakeword i kompilujecie.
Czy jest możliwość aby aplikacja miała dynamiczne pobranie tego keyworda?
Robię sobie swoje słowo “hej banana” pobieram plik ppn i wrzucam do jakiegoś folderu w androidzie, albo w aplikacji?

6

Czy zrobienie polskiego hotword Jolka to jakaś duża kasa w picavoice?
Na stronie mają info, że customowo robią takie rzeczy,
czy może po prostu nie chcieli zrobić polskiego?

7

Podłączyłem ps eye do bramki oraz komputera, postawiłem oba mikrofony dosłownie obok siebie.
Wybrałem “alexa” na nasłuch i maksymalną czułość i włączyłem konsole picovoice na kompie.
Mówiłem wolno, szybko, głośno cicho, blisko daleko…
Zdarzało się, że w konsoli łapało, a w bramce nie… nigdy na odwrót.
Czy są jakieś racjonalne powody dlaczego tak może się dziać? Co może mieć na to wpływ? Stara wersja? Mikrofony również zamieniłem, żeby wyeliminować tą zmienną.

8

Czy jest coś na horyzoncie?
Wydaje mi się, że problem jest tylko w hot word,
bo stt działa całkiem dobrze (to googlowe, czy to Rhino?)
Niby picavoice robi przez deep learning, tylko w którym momencie? Jak sobie sami słowa zrobią ze swoich sampli?
Ja to rozumiem tak, że stale jak ja gadam to się uczy i zawęża pod mój głos.
To tak żeby każdy sam mógł w warunkach swojego mikrofonu, tonu głosu, echa itp wyćwiczyć tego hotworda, nawet jeżeli miało by to być gwizdnięcie :stuck_out_tongue: I taki deep learning byłby nalepszy.


Zdarzały się złe interpretacje więc podkreślę,
nic nie żądam, nic nie wymagam, tylko grzecznie pytam. :slight_smile:

Wydaje mi się, że są tu również inne osoby, które się zainteresują tematem.

EDIT

9

Jeszcze jedno, jak moge ustawić intencje żeby jak mówię do mikrofonu to nie odpowiada mi do wszystkich urządzeń tylko tego gdzie mówie.

4 polubienia

Podbijam temat, chyba wszystkim nam ciągle brakuje głośnika z mikrofonem od AIS, takiego na wzór google/alexa ale który działa lokalnie i bez obaw o prywatność:
Google przyznał się, że nas podsłuchuje, „bo tak jest lepiej” (spidersweb.pl)
Po cichu cały czas liczyłem jednak że pojawi się gotowiec od AIS.
Wiemy, że można głośnik ais diy + mikrofon eye…

Tu też podbijam :wink: + wielki szacunek dla całego zespołu AIS za świetną robotę i edukacje :clap:

3 polubienia

ad 1. :wink:

tak - to jest możliwe - mamy w api coś takiego jak API i zasób command i jak się tam wyśle micOn to powinno zadziałać

Tu jest opis api:

Przykład, mam tablet który ma IP 192.168.6.248

wchodzę na to IP - wywołuje API AIS - w przeglądarce (robie GET na API na porcie 8122) i widzę, coś tekigo:

image

żeby wywołać zasób command trzeba zrobić POST-a (wywołać inną metodę) z parametrami, to już z konsoli:

curl -v --header "Content-Type: application/json" --request POST --data '{"micOn": true}' http://192.168.6.248:8122/command

komenda trafia do API aplikacji ais-dom (zainstalowanej na tablecie/telefonie):

i w efekcie włączył się mikrofon:

Opisaliśmy kiedyś podobny przypadek w tym poście:

Cały czas mamy tą automatyzacje - mikrofon to PS3 podpięty do bramki w biurze.
Oczywiście wyzwalaczem nie muszą być drzwi ale coś zupełnie innego - dowolnego… zapalenie światła w kuchni rano, wykrycie ruchu, wykrycie obecności …

Może to być też głos, np taki moduł wykrywający słowo triger może włączyć mikrofon przez API AIS:

tu jest więcej o tym module:


cdn… Poczytamy i odpowiemy :slight_smile: Dzięki za wyrozumiałość!

5 polubień

Dzięki wielkie!
Całkowicie zapomniałem o API :scream:
Oczywiście działa elegancko:

2 polubienia

To tak:
w dokumentacji jest to napisane tak jak by dotyczyła tylko API bramki,
chociaż teraz jak już wiem to wyłapałem:

API bramki (dostęp do natywnych zasobów systemu Android) na porcie 8122

I teraz:

Obecnie dostępne są 2 zasoby http://ais-dom.local:8122/text_to_speech i http://ais-dom.local:8122/command

Jeżeli chcemy wysłać notyfikację na telefon to mamy opcje:

1
standardowo przez Asystentke Jolka, jak mamy otwartą aplikację to powie na wszystkich urządzeniach

gfhtfht

2
przez usługę notify bezpośrednio do jednej aplikacji.
ais_ai_service.mob_notify
Ustawiając say: true apliakcja powie wiadomosć i będziemy mieli również notyfikacje na pasku.

3
po prostu poprzez casta przez tts na konkretnego media_player wysyłamy
"data":{"message": "Uwaga, Awaria grzałki"}
co powoduje otworzenie na telefonie takiego czarnego ekranu apliakcji AIS jak przy streamowaniu.

fdghdfh

4
I teraz doszło :slight_smile: przez API do konkretnej aplikacji za pomocą /text_to_speech
w tym przypadku, nic nie zaloguje do dziennika, nie powie w innych aplikacjach oraz nie pokaże żadnej notyfiakcji nic nie wyskoczy ani się nie włączy, ekran będzie zgaszony… po prostu powie.
Puszczając przed komunikatem jeszcze {"setVolume":"80"} na /commands
Ustawiamy sobie głośność na 80% i puszczamy komunikat.

Jak by ktoś chciał: flows (2).json (3,6 KB)

Zauważyłem tylko jedną rzecz, przy puszczeniu na /text_to_speech komunikatu zostaje wypowiedziany, a puszczając drugi i enty raz ten sam komunikat już nic nie mówi, dlaczego?
Puszczenie innego lub pustego {"text":""} rozwiązuje ten problem.

3 polubienia

tak to tak działa, bo komunikaty mogą być odtwarzane na 2 sposoby:

  1. przez tts w przeglądarce

  2. przez nasze natywne API

Zdarzało się, że komunikat był mówiony 2 razy

i dlatego dodaliśmy takie zabezpieczenie na bramce i teraz 2 razy nie mówimy tego samego…

Ale jak widać to faktycznie może być też problem. Coś kiedyś wymyślimy lepszego, narazie pozostaje faktycznie obejście z pustym komunikatem.

Tak się tylko dzieje wtedy jak mamy zalogowanego użytkownika tego samego na bramce i na urządzeniu mobilnym, na każdym musi być inny użytkownik. wtedy nie ma podwójnych komunikatów.

ad 2. kontekst w automatyzacji

To co opisałeś to ciekawa funkcjonalność i coś takiego kiedyś będzie :slight_smile:

Już teraz możemy definiowac automatyzację uruchamianą komendami głosowymi:

Należało by teraz przy wywołaniu automatyzacji dodać kontekst - obszar lub urządzenie którego automatyzacja dotyczy:

mając ten kontekst mogli byśmy wykonać automatyzację bardziej “smart”:

Żeby to osiągnąć można:

  1. Poczekać aż ktoś to doda do HA i wtedy pojawi się to a AIS
  2. Zgłosić to jako pomysł u nas na forum - jak znajdzie się odpowiednia ilość ludzi, którzy to poprą, to namówimy @3.14 albo @araczkowski albo @Sebastian , żeby to napisali, oczywiście pomożemy :slight_smile:

Mam wrażenie, że ten pomysł może być łatwo zrealizowany (nie jest to duża zmiana). Wg mie należało by tylko dodać nową encję z informacją jaki klient wywołał usługę. Jeżeli naprawdę potrzebujesz taką funkcjonalność, to tu jest opis zasad zgłaszania pomysłów autorstwa @Stravi :+1:

2 polubienia

Poniekąd jest to już wpisane w plany:

1 polubienie

Kurczę, myślałem, że można już to jakoś łatwo wyciągnąć beż żadnych zmian w aplikacji, tylko po prostu nie wiem jak :frowning:

Jak w ad. 3 - to by wystarczyło, aby zrobić automatyzację, że gdy mikrofon się uruchamia (zmienia się stan switch) na danym urządzeniu to wiemy że mówimy właśnie do niego.
(tak jak samo zmienienie stanu switch już ma atrybut użytkownika user_id)

Rozumiem, że guzik mikrofonu zrobiliście Wy? A nie z aplikacji HA.
Czyli po aktywacji mikrofonu (z jakiego kolwiek powodu- guzik, api, hotword), oprócz rozpoczęcia usługi “nagrywania” zmienia on stan encji (chociażby pomocnika), po zakończeniu, tak samo jak guzik zmienia stan na nieaktywny tak samo zmiani encję switcha na wyłączony.

Czy to nie jest dodanie jednej liniki kodu właśnie w tym miejscu?

1 polubienie

Czy na podstawie tego booleana, nie można zrobić chociażby publish mqtt z nazwą aplikacji (mobile_ais_dom_87676)

AisCoreUtils.java

EDIT.

Hmm…
to tutaj trzeba dodać sensor z unikalną nazwą urządzenia?

DomWebInterface.java