ivan­ka test-set­up

felix schwenzel in artikel

letz­te wo­che kam der raspber­ry und ein ps3 eye ka­me­ra/mi­kro­fon, das ich ne­ben den an­de­ren kom­po­nenen­ten für ivan­ka be­stellt hat­te. auf die lie­fe­rung von eck­stein, mit dem auf­steck­mi­kro­fon-hat und laut­spre­cher, war­te ich noch im­mer. ich ver­su­che ja eher we­ni­ger bei ama­zon zu be­stel­len, aber wenn man sich an­guckt wie eck­stein mei­ne be­stel­lung hän­del­te, füh­le ich mich in­spi­riert dann doch wie­der lie­ber bei ama­zon zu be­stel­len. von eck­stein wur­de vor al­lem stil­le ge­lie­fert, erst als ich nach über ei­ner wo­che nach­frag­te, ant­wor­te­te man mir, dass es stö­run­gen im zu­lie­fe­rungs­pro­zess gäbe (mei­ne wor­te) und ich mich noch min­des­tens eine wo­che ge­dul­den müs­se.

trotz­dem konn­te ich mir mei­ne neue sprach­as­sis­ten­tin, die ale­xa ab­lö­sen soll, zu­sam­men­bau­en. an den raspber­ry schloss ich, ne­ben den ka­me­ra/mi­ko­ro­fon von sony, dass ge­ra­de mal 10 euro kos­tet aber 4 richt­mi­kro­fo­ne ver­baut hat und ex­zel­len­te emp­feh­lun­gen für sprach­as­sis­ten­ten hat, ei­nen bat­te­rie­be­trie­be­nen mini-laut­spre­cher, der noch bei uns rum­lag, an den kopf­hö­rer­aus­gang an. auf eine SD-kar­te ko­pier­te ich raspbi­an, so wie die her­vor­ra­gen­de snips-doku das emp­fiehlt, der ich schritt für schritt folg­te.

das be­trieb­sys­tem und snips selbst zu in­stal­lie­ren ging schnell und war nicht über­mäs­sig an­spruchs­voll. die tools, ins­be­son­de­re das snips ei­ge­ne sam, macht die in­stal­la­ti­on wirk­lich ein­fach — wenn man min­des­tens weiss was eine kom­man­do­zei­le ist. ein biss­chen knif­fe­lig war ein kon­fi­gu­ra­ti­ons­aspekt, der eher schlecht do­ku­men­tiert ist. seit ein paar re­leases lässt die snips kon­fi­gu­ra­ti­ons­da­tei () näm­lich zu, dass man, statt des mos­quit­to mqtt-ser­vers auf dem raspber­ry, auch sei­nen vor­han­de­nen, ei­ge­nen mos­quit­to nut­zen kann. das pro­blem (bei mir) war al­ler­dings, dass mit dem ex­ter­nen, also dem vor­hand­nen mqtt-ser­ver, nichts mehr rich­tig funk­tio­nier­te. die sprach­er­ken­nung funk­tio­nier­te noch, aber we­der der demo-cli­ent noch nach­in­stal­lier­te apps woll­ten rich­tig funk­tio­nie­ren. nach ei­ni­gen stun­den de­bug­ging war klar, mit ex­ter­nem mqtt geht’s nicht. zu vie­le kom­po­nen­ten, vor al­lem aber zu vie­le fer­ti­ge ac­tion-scrip­te ha­ben den lo­ka­len mqtt-ser­ver hard­ge­codet auf .

das ist aber auch kein pro­blem, ich habe den lo­ka­len snips-mos­quit­to ein­fach in mei­nen ei­ge­nen mos­quit­to ge­brid­ged. in der habe ich fol­gen­des er­gänzt:

da­mit lei­tet der snips-mos­quit­to alle re­le­van­ten to­pics an mei­nen ho­me­as­sistant-mqtt-ser­ver wei­ter und emp­fängt al­les was ho­me­as­sistant zu­rück­schickt.

snips nutzt mqtt als bus. das heisst, alle snips-kom­po­nen­ten kom­mu­ni­zie­ren über mqtt. der snips-au­dio­ser­ver sen­det stän­dig au­dio­sam­ple-schnip­sel über mqtt, die wie­der­um von der snips wake-/hot­word-kom­po­nen­te auf­ge­fan­gen und ana­ly­siert wer­den. schlägt die hot­word kom­po­nen­te alarm, schnappt die ASR-kom­po­nen­te (Au­to­ma­tic Speech Re­co­gni­ti­on) die au­dio-samples auf und ver­sucht ge­spro­che­nen wor­te aus den au­dio-samples zu ex­tra­hie­ren. die ex­tra­hier­ten, ge­spro­che­nen sät­ze wer­den dann wie­der über mqtt an die NLU-kom­po­nen­te (Na­tu­ral Lan­guage Un­der­stan­ding) wei­ter­ge­ge­ben, die aus den wor­ten den sinn zu ex­ra­hie­ren ver­sucht. da­nach über­neh­men scrip­te, ak­tio­nen oder dia­log-kom­po­nen­ten und am ende die tts-kom­po­nen­te (Text to Speech). al­les über mqtt.

be­vor ich wei­ter in tech­ni­sche de­tails gehe, fang ich mal mit dem fa­zit an: das funk­tio­niert al­les sehr, sehr gut, mit ein paar ab­stri­chen.

so­wohl das ein­ge­bau­te, mit­ge­lie­fer­te hot-/wa­ke­word (auf deutsch nur eins: „hey snips“), als auch die sprach­er­ken­nung und ana­ly­se funk­tio­nie­re so­li­de. die stan­dard­mäs­si­ge sprach­aus­ga­be, die, wie al­les an­de­re, lo­kal auf dem raspber­ry statt­fin­det, ist ein biss­chen er­bärm­lich. hört sich noch schlim­mer an, als die un­heim­li­chen, von ap­ple mit­ge­lie­fer­ten tts-stim­men (auf deutsch „Anna“, auf eng­lisch „Alex“, „Fred“, „Sa­man­tha“ und „Vic­to­ria“).

eben­so ent­täu­schend wie die sprach­syn­the­se, ist die per­so­na­li­sier­te, „cus­tom“ hot­word-er­stel­lung. ein biss­chen war das ja der witz, eine sprach­as­sis­tin zu ha­ben die wir nicht mit „ale­xa“ auf­ru­fen müs­sen, son­dern mit „ivan­ka“. snips lie­fert ein py­thon-script mit dem die auf­nah­me von au­dio-schnip­seln wirk­lich ein­fach ist und die­se per­sön­li­chen mo­del­le re­agie­ren dann auch auf „ivan­ka“, aber eben auch auf ge­schirr­klap­pern, na­se­schnäu­zen, hus­ten oder wenn die bei­fah­re­rin et­was lau­ter re­det. auf was die­se per­sön­li­chen mo­del­le nicht re­agie­ren: wenn die bei­fah­re­rin „ivan­ka“ sagt. um uni­ver­sel­le hot­word-mo­del­le zu bau­en, die mit ver­schie­de­nen, mög­lichst al­len stim­men und dia­lek­ten funk­tio­nie­ren, be­nö­tigt man tau­sen­de ver­schie­de­ne sprach­samples mit de­nen dann das mo­dell trai­niert wird.

die schwä­chen der weck­wort-er­ken­nung, so­wie der stan­dard text-zu-spra­che-kom­po­nen­te, las­sen sich aber dank der ex­trem mo­du­la­ren bau­wei­se von snips gut be­he­ben. weil eben al­les über den mqtt-bus geht und die kom­po­nen­ten nicht di­rekt, son­dern eben über über mqtt-nach­rich­ten kom­mu­ni­zie­ren, kann man ein­fach kom­po­nen­ten er­gän­zen oder aus­tau­schen. dazu in ei­nem an­de­ren ar­ti­kel mehr.

der rest von snips funk­tio­niert aber, wie ge­sagt, enorm be­frie­di­gend. die sprach­er­ken­nung, das an­le­gen, pfle­gen von skills, in­tents, slots und die in­te­gra­ti­on in home-as­sistant funk­tio­nie­ren so gut, dass ich die ori­gi­nal ale­xa be­reits vor vier ta­gen aus­ge­stöp­selt habe. die von uns am häu­figs­ten ge­nutz­ten ale­xa-funk­tio­nen (licht­steue­rung in der kü­che, ti­mer, ein­kaufs­lis­te (via bring), wet­ter) konn­te ich be­reits alle in snips nach­bau­en. dazu in se­pa­ra­ten ar­ti­keln mehr.

was mich an der ori­gi­nal-ale­xa da­mals sehr be­geis­tert hat war, dass sie mich auch hör­te (wenn’s ru­hig war), wenn ich ne­ben der kü­che auf dem klo sass und sag­te: „ale­xa, licht im flur aus­schal­ten!“ ich fand das gleich­zei­tig (tech­nisch) be­ein­dru­ckend, aber auch ein biss­chen cree­py. wenn ale­xa mich bei ge­öff­ne­ten tü­ren (und ruhe) auch auf dem klo hört, was hört sie sonst noch al­les? mein pro­vi­so­ri­scher snips-set­up mit dem ps3 eye ka­me­ra/mi­kro­fon funk­tio­niert aber er­staun­li­cher­wei­se ge­nau­so gut! ohne son­der­lich laut zu wer­den, kann ich snips auch auf dem klo sit­zend sa­gen, das licht im flur an (oder aus) zu schal­ten.

ich bin ge­spannt, ob der et­was kom­pak­te­re mi­kro­fon-hat, wenn er denn ir­gend­wann mal von eck­stein ge­lie­fert wird, ge­nau­so be­ein­dru­ckend funk­tio­nie­ren wird.

von links: ale­xa (off­line), ps3 eye ka­me­ra/mi­kro­fon, raspber­ry und ein laut­spre­cher. da­zwi­schen bas­tel­kram.

die ori­gi­nal ale­xa liegt noch in der kü­che, al­ler­dings off­line und ka­bel­los, als kan­dis-do­sen-be­schwe­rer. so rich­tig ver­misst habe ich sie in den letz­ten ta­gen, seit dem sie off­line ist, nicht. snips ist toll!