Unable to host Speech Recognition and Sound Playing Application on Docker

I have an application that takes voice input from microphone, performs speech recognition and plays certain music files based on the cue words recognized. This application is in Python and implements a couple of python modules like PyAudio, Playsound and Websocket-client. I am trying to build a Docker image of this application.

I have created a Dockerfile with below contents:

FROM ubuntu
ADD . /app
FROM python:3
ADD transcribe.py /
ADD speech.cfg /
ADD setup.cfg /
ADD setup.py /
RUN apt-get update
RUN apt-get --assume-yes install libasound-dev portaudio19-dev libportaudio2 libportaudiocpp0
RUN pip3 install pyaudio
RUN pip3 install websocket-client
RUN pip3 install playsound
CMD [ "python3", "./transcribe.py" ]

When trying to build it, I get a successful build response as below:

ABCDEFG:random-folder User$ docker build -t storyassist .
Sending build context to Docker daemon 3.494MB
Step 1/13 : FROM ubuntu ---> 4c108a37151f
Step 2/13 : ADD . /app ---> e520eb6d11e8
Step 3/13 : FROM python:3 ---> 42d620af35be
Step 4/13 : ADD transcribe.py / ---> 6c76aee20537
Step 5/13 : ADD speech.cfg / ---> 74c3221f2324
Step 6/13 : ADD setup.cfg / ---> 2c415c19a4fb
Step 7/13 : ADD setup.py / ---> c6382077cdcf
Step 8/13 : RUN apt-get update ---> Running in ace9adab6a44
Get:1 buster InRelease [118 kB]
Get:2 buster-updates InRelease [46.8 kB]
Get:3 buster/main amd64 Packages [7897 kB]
Get:4 buster/updates InRelease [39.1 kB]
Get:5 buster/updates/main amd64 Packages [42.5 kB]
Fetched 8143 kB in 3s (2493 kB/s)
Reading package lists...
Removing intermediate container ace9adab6a44 ---> d46db350b95f
Step 9/13 : RUN apt-get --assume-yes install libasound-dev portaudio19-dev libportaudio2 libportaudiocpp0 ---> Running in 8d772b088b15
Reading package lists...
Building dependency tree...
Reading state information...
The following additional packages will be installed: libasound2 libasound2-data libjack-dev libjack0
Suggested packages: libasound2-plugins alsa-utils libasound2-doc jackd1 portaudio19-doc
The following NEW packages will be installed: libasound2 libasound2-data libasound2-dev libjack-dev libjack0 libportaudio2 libportaudiocpp0 portaudio19-dev
0 upgraded, 8 newly installed, 0 to remove and 0 not upgraded.
Need to get 1094 kB of archives.
After this operation, 5886 kB of additional disk space will be used.
Get:1 buster/main amd64 libasound2- data all 1.1.8-1 [59.6 kB]
Get:2 buster/main amd64 libasound2 amd64 1.1.8-1 [361 kB]
Get:3 buster/main amd64 libasound2-dev amd64 1.1.8-1 [145 kB]
Get:4 buster/main amd64 libjack0 amd64 1:0.125.0-3 [109 kB]
Get:5 buster/main amd64 libjack-dev amd64 1:0.125.0-3 [227 kB]
Get:6 buster/main amd64 libportaudio2 amd64 19.6.0-1 [66.6 kB]
Get:7 buster/main amd64 libportaudiocpp0 amd64 19.6.0-1 [18.8 kB]
Get:8 buster/main amd64 portaudio19- dev amd64 19.6.0-1 [108 kB]
debconf: delaying package configuration, since apt-utils is not installed
Fetched 1094 kB in 1s (1381 kB/s)
Selecting previously unselected package libasound2-data.
(Reading database ... 24544 files and directories currently installed.)
Preparing to unpack .../0-libasound2-data_1.1.8-1_all.deb ...
Unpacking libasound2-data (1.1.8-1) ...
Selecting previously unselected package libasound2:amd64.
Preparing to unpack .../1-libasound2_1.1.8-1_amd64.deb ...
Unpacking libasound2:amd64 (1.1.8-1) ...
Selecting previously unselected package libasound2-dev:amd64.
Preparing to unpack .../2-libasound2-dev_1.1.8-1_amd64.deb ...
Unpacking libasound2-dev:amd64 (1.1.8-1) ...
Selecting previously unselected package libjack0:amd64.
Preparing to unpack .../3-libjack0_1%3a0.125.0-3_amd64.deb ...
Unpacking libjack0:amd64 (1:0.125.0-3) ...
Selecting previously unselected package libjack-dev.
Preparing to unpack .../4-libjack-dev_1%3a0.125.0-3_amd64.deb ...
Unpacking libjack-dev (1:0.125.0-3) ...
Selecting previously unselected package libportaudio2:amd64.
Preparing to unpack .../5-libportaudio2_19.6.0-1_amd64.deb ...
Unpacking libportaudio2:amd64 (19.6.0-1) ...
Selecting previously unselected package libportaudiocpp0:amd64.
Preparing to unpack .../6-libportaudiocpp0_19.6.0-1_amd64.deb ...
Unpacking libportaudiocpp0:amd64 (19.6.0-1) ...
Selecting previously unselected package portaudio19-dev:amd64.
Preparing to unpack .../7-portaudio19-dev_19.6.0-1_amd64.deb ...
Unpacking portaudio19-dev:amd64 (19.6.0-1) ...
Setting up libasound2-data (1.1.8-1) ...
Setting up libjack0:amd64 (1:0.125.0-3) ...
Setting up libasound2:amd64 (1.1.8-1) ...
Setting up libjack-dev (1:0.125.0-3) ...
Setting up libasound2-dev:amd64 (1.1.8-1) ...
Setting up libportaudio2:amd64 (19.6.0-1) ...
Setting up libportaudiocpp0:amd64 (19.6.0-1) ...
Setting up portaudio19-dev:amd64 (19.6.0-1) ...
Processing triggers for libc-bin (2.28-10) ...
Removing intermediate container 8d772b088b15 ---> d2bc72b4654c
Step 10/13 : RUN pip3 install pyaudio ---> Running in 654227a7b259
Collecting pyaudio Downloading c768998ef8c0ae3654ed29ea5020c749a6b/PyAudio-0.2.11.tar.gz
Building wheels for collected packages: pyaudio Building wheel for pyaudio (setup.py): started Building wheel for pyaudio (setup.py): finished with status 'done' Stored in directory: /root/.cache/pip/wheels/f4/a8/a4/292214166c2917890f85b2f72a8e5f13e1ffa5 27c4200dcede
Successfully built pyaudio
Installing collected packages: pyaudio
Successfully installed pyaudio-0.2.11
Removing intermediate container 654227a7b259 ---> 1336a7cbfb0f
Step 11/13 : RUN pip3 install websocket-client ---> Running in dfa7c4d9f195
Collecting websocket-client Downloading 27e8859468f3c0fd7dc5a76dd9c4dbd7906/websocket_client-0.56.0-py2.py3- none-any.whl (200kB)
Collecting six (from websocket-client) Downloading ce23f502a721c0ac0ecfedb80e0d88c64e9/six-1.12.0-py2.py3-none-any.whl
Installing collected packages: six, websocket-client
Successfully installed six-1.12.0 websocket-client-0.56.0
Removing intermediate container dfa7c4d9f195 ---> e82fd88cd21a
Step 12/13 : RUN pip3 install playsound ---> Running in 2f2af7ce7bdc
Collecting playsound Downloading a2667ab75f857f67f7062fd447dd3f49bf7/playsound-1.2.2-py2.py3-none-any.whl
Installing collected packages: playsound
Successfully installed playsound-1.2.2
Removing intermediate container 2f2af7ce7bdc ---> ac6c2e571e3b
Step 13/13 : CMD [ "python3", "./transcribe.py" ] ---> Running in 11291eaff8f4
Removing intermediate container 11291eaff8f4 ---> 2d8cd222b2bb
Successfully built 2d8cd222b2bb
Successfully tagged storyassist:latest

But when I try to runt his image, I get a bunch of errors where I my docker image cannot find the drivers specified. While its is possible to resolve similar issues in Virtual Machines, I am not sure if there is a simple way to resolve the same in docker containers.

ABCDEFG:random-folder User$ docker run storyassist
ALSA lib confmisc.c:767:(parse_card) cannot find card '0'
ALSA lib conf.c:4568:(_snd_config_evaluate) function snd_func_card_driver returned error: No such file or directory
ALSA lib confmisc.c:392:(snd_func_concat) error evaluating strings
ALSA lib conf.c:4568:(_snd_config_evaluate) function snd_func_concat returned error: No such file or directory
ALSA lib confmisc.c:1246:(snd_func_refer) error evaluating name
ALSA lib conf.c:4568:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:5047:(snd_config_expand) Evaluate error: No such file or directory
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM sysdefault
ALSA lib confmisc.c:767:(parse_card) cannot find card '0'
ALSA lib conf.c:4568:(_snd_config_evaluate) function snd_func_card_driver returned error: No such file or directory
ALSA lib confmisc.c:392:(snd_func_concat) error evaluating strings
ALSA lib conf.c:4568:(_snd_config_evaluate) function snd_func_concat returned error: No such file or directory
ALSA lib confmisc.c:1246:(snd_func_refer) error evaluating name
ALSA lib conf.c:4568:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:5047:(snd_config_expand) Evaluate error: No such file or directory
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM sysdefault
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.front
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround21
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround21
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround40
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround41
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround50
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround51
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround71
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.hdmi
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.hdmi
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
ALSA lib confmisc.c:767:(parse_card) cannot find card '0'
ALSA lib conf.c:4568:(_snd_config_evaluate) function snd_func_card_driver returned error: No such file or directory
ALSA lib confmisc.c:392:(snd_func_concat) error evaluating strings
ALSA lib conf.c:4568:(_snd_config_evaluate) function snd_func_concat returned error: No such file or directory
ALSA lib confmisc.c:1246:(snd_func_refer) error evaluating name
ALSA lib conf.c:4568:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:5047:(snd_config_expand) Evaluate error: No such file or directory
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM default
ALSA lib confmisc.c:767:(parse_card) cannot find card '0'
ALSA lib conf.c:4568:(_snd_config_evaluate) function snd_func_card_driver returned error: No such file or directory
ALSA lib confmisc.c:392:(snd_func_concat) error evaluating strings
ALSA lib conf.c:4568:(_snd_config_evaluate) function snd_func_concat returned error: No such file or directory
ALSA lib confmisc.c:1246:(snd_func_refer) error evaluating name
ALSA lib conf.c:4568:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:5047:(snd_config_expand) Evaluate error: No such file or directory
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM default
ALSA lib confmisc.c:767:(parse_card) cannot find card '0'
ALSA lib conf.c:4568:(_snd_config_evaluate) function snd_func_card_driver returned error: No such file or directory
ALSA lib confmisc.c:392:(snd_func_concat) error evaluating strings
ALSA lib conf.c:4568:(_snd_config_evaluate) function snd_func_concat returned error: No such file or directory
ALSA lib confmisc.c:1246:(snd_func_refer) error evaluating name
ALSA lib conf.c:4568:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:5047:(snd_config_expand) Evaluate error: No such file or directory
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM dmix
Exception in thread Thread-1:
Traceback (most recent call last): File "/usr/local/lib/python3.7/threading.py", line 926, in _bootstrap_inner self.run() File "/usr/local/lib/python3.7/threading.py", line 870, in run self._target(*self._args, **self._kwargs) File "./transcribe.py", line 83, in read_audio RATE = int(p.get_default_input_device_info() ['defaultSampleRate']) File "/usr/local/lib/python3.7/site-packages/pyaudio.py", line 949, in get_default_input_device_info device_index = pa.get_default_input_device()
OSError: No Default Input Device Available
1 Reset to default

Know someone who can answer? Share a link to this question via email, Twitter, or Facebook.

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like