{"id":16199390,"url":"https://github.com/dadrus/snips-platform","last_synced_at":"2026-05-02T05:07:46.990Z","repository":{"id":97929517,"uuid":"203387090","full_name":"dadrus/snips-platform","owner":"dadrus","description":"Playground for snips.ai","archived":false,"fork":false,"pushed_at":"2019-08-31T10:03:16.000Z","size":28,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-06-05T22:06:12.224Z","etag":null,"topics":["docker","snips"],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dadrus.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-08-20T13:56:05.000Z","updated_at":"2019-08-31T10:03:18.000Z","dependencies_parsed_at":null,"dependency_job_id":"57bfa6db-7a48-40d2-985f-58d02bc51c1f","html_url":"https://github.com/dadrus/snips-platform","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/dadrus/snips-platform","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dadrus%2Fsnips-platform","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dadrus%2Fsnips-platform/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dadrus%2Fsnips-platform/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dadrus%2Fsnips-platform/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dadrus","download_url":"https://codeload.github.com/dadrus/snips-platform/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dadrus%2Fsnips-platform/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261685452,"owners_count":23194107,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","snips"],"created_at":"2024-10-10T09:25:15.733Z","updated_at":"2026-05-02T05:07:41.969Z","avatar_url":"https://github.com/dadrus.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Yet another snips Docker image\n\nYes, it seems, there are a couple Docker images for [snips.ai](https://snips.ai/) in the wild.\nUnfortunately I couldn't use any of these to just go my first steps with\nsnips by following the official [Quick Start Console](https://docs.snips.ai/getting-started/quick-start-console)\ntutorial and then trying to deploy the results in a Docker container instead\nof using [SAM](https://docs.snips.ai/reference/sam) as e.g. described in [Quick Start Raspberry Pi](https://docs.snips.ai/getting-started/quick-start-raspberry-pi)\nor [Raspiaudio MIC+ Snips tutorial](https://www.instructables.com/id/VOCAL-ASSISTANT-SnipsAi-Protects-Your-Privacy/). So this project was born.\n\n## My Current HW-Setup\n\n- [Raspberry Pi 3](https://www.raspberrypi.org/products/raspberry-pi-3-model-b-plus/)\n- [Raspiaudio MIC+](https://www.raspiaudio.com/raspiaudio-aiy)\n- [ReSpeaker 2 Mic Array for PI](https://respeaker.io/2_mic_array/)\n\n## Software-Stack\n\n### Driver for Raspiaudio MIC+\nAs discribed from the creator of Raspiaudio [here](https://www.instructables.com/id/VOCAL-ASSISTANT-SnipsAi-Protects-Your-Privacy/)\nI've performed the following steps to install the required audio-driver\nafter plugging the hat on my Pi host:\n\n```.bash\n$ sudo wget -O mic mic.raspiaudio.com \n$ sudo bash mic\n```\n\nReboot and test either using the test tool provided by raspiaudio\n\n```.bash\n$ sudo wget -O test test.raspiaudio.com\n$ sudo bash test\n```\n\nAfter pushing the yellow button one should hear “front left, front right” then a recording will be played indicating that the mic and speakers are working well.\n\nOr alternatively by using `aplay` and `arecord` to list the playback and\nrecord devices:\n\n```.bash\n$ aplay -l\n**** List of PLAYBACK Hardware Devices ****\ncard 0: sndrpigooglevoi [snd_rpi_googlevoicehat_soundcar], device 0: Google voiceHAT SoundCard HiFi voicehat-hifi-0 []\n  Subdevices: 1/1\n  Subdevice #0: subdevice #0\n\n$ arecord -l\n**** List of CAPTURE Hardware Devices ****\ncard 0: sndrpigooglevoi [snd_rpi_googlevoicehat_soundcar], device 0: Google voiceHAT SoundCard HiFi voicehat-hifi-0 []\n  Subdevices: 1/1\n  Subdevice #0: subdevice #0\n```\n\nIf you want to ensure, you can really record and playback execute and hit `CTRL-C` when you've done\n\n```.bash\n$ arecord -f cd out.wav\n```\n\nfollowed by \n\n```.bash\n$ aplay out.wav\n```\n\nto check that both, the microphone and the speaker are working properly.\n\nIt might be worth verifying that the installed playback and microphone devices can also be used in a docker container. For that\nsimply run e.g. a `rasbian/stretch` container, make the playback and the microphone devices and the corresponding configuration\navailable to it \n\n```.bash\n$ docker run -ti --rm -v /etc/asound.conf --device /dev/snd raspbian/stretch /bin/bash\n```\n\nand repeat the tests described above in the container. You will have to install `alsa-utils` to be able to use `aplay` and `arecord`\n\nThe official snips [Raspberry Pi - Manual Setup](https://docs.snips.ai/articles/raspberrypi/manual-setup) article sais, one would require\nto adjust the `asound.conf` configuration file to reference the appropriate playback and record devices.\nIn my case the I was able to use the `/etc/asound.conf` as it is, without\nany modifications.\n\n### Driver for the ReSpeaker 2 Mic Array for PI\n\nAs described on the [wiki Page](http://wiki.seeedstudio.com/ReSpeaker_2_Mics_Pi_HAT/)\nfrom seeedstudio one have to get the seeed voice card source code, install\nit and reboot the Raspberry PI.\n\n```.bash\n$ sudo apt-get update \u0026\u0026 sudo apt-get upgrade -y\n$ git clone https://github.com/respeaker/seeed-voicecard.git\n$ cd seeed-voicecard\n$ sudo ./install.sh\n$ sudo reboot -h now\n```\n\nThe `install.sh` script will install all the required dependencies including\nthe driver.\n\nIn the next step one should verify, that the sound card is recognized by the\nsystem by using `aplay` and `arecord`\n\n```.bash\n$ aplay -l\n**** List of PLAYBACK Hardware Devices ****\ncard 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA]\n  Subdevices: 7/7\n  Subdevice #0: subdevice #0\n  Subdevice #1: subdevice #1\n  Subdevice #2: subdevice #2\n  Subdevice #3: subdevice #3\n  Subdevice #4: subdevice #4\n  Subdevice #5: subdevice #5\n  Subdevice #6: subdevice #6\ncard 0: ALSA [bcm2835 ALSA], device 1: bcm2835 IEC958/HDMI [bcm2835 IEC958/HDMI]\n  Subdevices: 1/1\n  Subdevice #0: subdevice #0\ncard 0: ALSA [bcm2835 ALSA], device 2: bcm2835 IEC958/HDMI1 [bcm2835 IEC958/HDMI1]\n  Subdevices: 1/1\n  Subdevice #0: subdevice #0\ncard 1: seeed2micvoicec [seeed-2mic-voicecard], device 0: bcm2835-i2s-wm8960-hifi wm8960-hifi-0 []\n  Subdevices: 1/1\n  Subdevice #0: subdevice #0\n\n$ arecord -l\n**** List of CAPTURE Hardware Devices ****\ncard 1: seeed2micvoicec [seeed-2mic-voicecard], device 0: bcm2835-i2s-wm8960-hifi wm8960-hifi-0 []\n  Subdevices: 1/1\n  Subdevice #0: subdevice #0\n```\n\nCompared  to Raspiaudio MIC+ device, one will see multiple entries and in\nboth cases the device, we are interested in is `card 1, device 0`. This is\nimportant as, unlike the Raspiaudion MIC+, you'll need to reference them in you `asound.conf` you're going\nto mount into the container.\n\nTo verify that the device is working, plug in a speaker or an earphone and\ntype (hit `CTRL-C` to cancel):\n\n```.bash\narecord -f cd -Dhw:1 | aplay -Dhw:1\n```\n\nIt might be worth verifying that the installed playback and microphone devices can also be used in a docker container. For that\nsimply run e.g. a `rasbian/stretch` container, make the playback and the microphone devices and the corresponding configuration\navailable to it \n\n```.bash\n$ docker run -ti --rm -v /etc/asound.conf --device /dev/snd raspbian/stretch /bin/bash\n```\n\nand repeat the tests described above in the container. You will have to install `alsa-utils` to be able to use `aplay` and `arecord`\n\nPlease note, that we just used the system `/etc/asound.conf` without\nmodifications, as we're addressed the proper devices by using `-Dhw:1`\n`arecord` and `aplay` arguments.\n\n### Snips Assistant \u0026 Docker Image\n\nGiven the above prerequisites are in place, just follow the tutorial of your choice (e.g. one of the referenced above) to create your snips \nassistant. When ready download it from the snips console (in the below right corner of the web page you'll find a button named *Deploy Assistant*).\nYou'll receve a zip file, which you'll need to extract.\n\nTime to build the Docker image. Just execute the `build.sh` script from this repository:\n\n```.bash\n$ ./build.sh\n```\n\nTake you a coffee, it will take a while. When ready, use the `run.sh` script to see your snips assistant in action. It will start the docker container\nyou've just built.\n\nThe `run.sh` script expects by default two directories to be present in the same folder:\n\n* assistant - with your snips assistant\n* log - to have system log files written to it.\n\nSo before running it, ensure you either adjust the path to your *assistant* directory (created, when you've extracted the zip file, downloaded from\nthe snips console) or move it to the directory `run.sh` is in and either create the *log* directory or delete the volume setting from the script if\nyou don't need the system logs.\n\nIf you're using the ReSpeaker hat, you'll also have to modify the\n`asound.conf` to by used by the container as described by the official snips [Raspberry Pi - Manual Setup](https://docs.snips.ai/articles/raspberrypi/manual-setup)\narticle.\n\n```\npcm.!default {\n  type asym\n  playback.pcm {\n    type plug\n    slave.pcm \"hw:1,0\"\n  }\n  capture.pcm {\n    type plug\n    slave.pcm \"hw:1,0\"\n  }\n}\n```\n\nIf you are using Raspiaudio MIC+, replace `-v ${PWD}/asound.conf:/etc/asound.conf`\nby `-v /etc/asound.conf` in the `run.sh` script to use the default system\nconfiguration.\n\nAction time;)\n\n```.bash\n$ ./run.sh\n\nINFO:snips_actions_templates_engine_lib: parsing snippets for app \"/usr/share/snips/assistant/snippets/dadrus.My_Calculator\"\nINFO:snips_actions_templates_engine_lib: parsing snippets dir \"/usr/share/snips/assistant/snippets/dadrus.My_Calculator/python3\"\nINFO:snips_actions_templates_engine_lib: parsed 6 snippets\nRun setup.sh in ./dadrus.My_Calculator\nAlready using interpreter /usr/bin/python3\nUsing base prefix '/usr'\nNew python executable in /var/lib/snips/skills/dadrus.My_Calculator/venv/bin/python3\nAlso creating executable in /var/lib/snips/skills/dadrus.My_Calculator/venv/bin/python\nInstalling setuptools, pip, wheel...\ndone.\nLooking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple\nCollecting hermes-python\u003e=0.2 (from -r requirements.txt (line 2))\n  Using cached https://files.pythonhosted.org/packages/2b/44/072e233a0eef525a0dff68bd0b8f7b7a6140140468ad59506ec40b0ca505/hermes_python-0.7.0-cp35-cp35m-linux_armv7l.whl\nCollecting future (from hermes-python\u003e=0.2-\u003e-r requirements.txt (line 2))\n  Using cached https://www.piwheels.org/simple/future/future-0.17.1-py3-none-any.whl\nCollecting enum34 (from hermes-python\u003e=0.2-\u003e-r requirements.txt (line 2))\n  Using cached https://files.pythonhosted.org/packages/af/42/cb9355df32c69b553e72a2e28daee25d1611d2c0d9c272aa1d34204205b2/enum34-1.1.6-py3-none-any.whl\nCollecting six (from hermes-python\u003e=0.2-\u003e-r requirements.txt (line 2))\n  Using cached https://files.pythonhosted.org/packages/73/fb/00a976f728d0d1fecfe898238ce23f502a721c0ac0ecfedb80e0d88c64e9/six-1.12.0-py2.py3-none-any.whl\nCollecting typing (from hermes-python\u003e=0.2-\u003e-r requirements.txt (line 2))\n  Using cached https://files.pythonhosted.org/packages/28/b8/a1d6b7cf322f91305bcb5e7d8f6c3028954d1e3e716cddc1cdce2ac63247/typing-3.7.4-py3-none-any.whl\nInstalling collected packages: future, enum34, six, typing, hermes-python\nSuccessfully installed enum34-1.1.6 future-0.17.1 hermes-python-0.7.0 six-1.12.0 typing-3.7.4\nINFO:snips_analytics_hermes: The analytics service is temporarily disabled\nINFO:snips_nlu_hermes: loading nlu engine \"/usr/share/snips/assistant/nlu_engine\"\nINFO:snips_dialogue_hermes: Loading the configuration file\n\n...\n\nINFO:snips_nlu_lib::slot_filler::crf_slot_filler                : Loading CRF slot filler (\"/usr/share/snips/assistant/nlu_engine/probabilistic_intent_parser/slot_filler_5\") ...\nINFO:snips_nlu_lib::slot_filler::crf_slot_filler                : CRF slot filler loaded\nINFO:snips_nlu_hermes                                           : model loaded in 2010 ms\nINFO:snips_hotword::server       : Discovered audio_server server/mqtt, starting hotword listener\nINFO:snips_hotword::server       : Connecting using MQTT site-id server\nINFO:snips_hotword_lib::audio    : Audio thread for server started\nINFO:snips_hotword_lib::audio    : Net and VAD thread for site server started (vad inhibitor: true, vad messages: false\nINFO:snips_hotword_lib           : Detector \"detector.hey_snips.server\", sensitivity: 0.5, threshold 0.787\nINFO:snips_hotword_lib           : detector.hey_snips.server thread started\n```\n\nNow you can talk to your assistant.\n\n## TODOs\n\n* Fail if no *assistant* directory is provided or it is empty\n* Support [satellite setups](https://docs.snips.ai/articles/platform/satellites)\n* Write documentation about the Docker image expectations, like expected volumes, exposed ports, etc\n* Set the timezone used by the host\n* Reuse already installed dependencies on restarting the docker container instead deploying the assistant from scratch (this will reduce the start time).\n* Deploy to Docker Hub\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdadrus%2Fsnips-platform","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdadrus%2Fsnips-platform","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdadrus%2Fsnips-platform/lists"}