I'm trying to make a basic speech Recognition assistant. When I run the code, it tells me:
Traceback (most recent call last):
File "C:\Users\Mo.haytham\AppData\Local\Programs\Python\Python37\lib\site-packages\speech_recognition\__init__.py", line 108, in get_pyaudio
import pyaudio
ModuleNotFoundError: No module named 'pyaudio'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:/Users/Mo.haytham/.PyCharmCE2018.3/config/scratches/ALPHA_BASIC.py", line 22, in <module>
hear()
File "C:/Users/Mo.haytham/.PyCharmCE2018.3/config/scratches/ALPHA_BASIC.py", line 13, in hear
with sr.Microphone() as sourse:
File "C:\Users\Mo.haytham\AppData\Local\Programs\Python\Python37\lib\site-packages\speech_recognition\__init__.py", line 79, in __init__
self.pyaudio_module = self.get_pyaudio()
File "C:\Users\Mo.haytham\AppData\Local\Programs\Python\Python37\lib\site-packages\speech_recognition\__init__.py", line 110, in get_pyaudio
raise AttributeError("Could not find PyAudio; check installation")
AttributeError: Could not find PyAudio; check installation
I tried to pip install pyaudio
but then this error shows up:
Running setup.py clean for pyaudio
Failed to build pyaudio
Installing collected packages: pyaudio
Running setup.py install for pyaudio ... error
ERROR: Complete output from command 'c:\users\mo.haytham\appdata\local\programs\python\python37\python.exe' -u -c 'import setuptools, tokenize;__file__='"'"'C:\\Users\\MO2D8C~1.HAY\\AppData\\Local\\Temp\\pip-install-o2
10x3zl\\pyaudio\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:\Users\MO2
D8C~1.HAY\AppData\Local\Temp\pip-record-hr7kket1\install-record.txt' --single-version-externally-managed --compile:
ERROR: running install
running build
running build_py
creating build
creating build\lib.win-amd64-3.7
copying src\pyaudio.py -> build\lib.win-amd64-3.7
running build_ext
building '_portaudio' extension
error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": https://visualstudio.microsoft.com/downloads/
----------------------------------------
ERROR: Command "'c:\users\mo.haytham\appdata\local\programs\python\python37\python.exe' -u -c 'import setuptools, tokenize;__file__='"'"'C:\\Users\\MO2D8C~1.HAY\\AppData\\Local\\Temp\\pip-install-o210x3zl\\pyaudio\\setup.p
y'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:\Users\MO2D8C~1.HAY\AppData\Local\
Temp\pip-record-hr7kket1\install-record.txt' --single-version-externally-managed --compile" failed with error code 1 in C:\Users\MO2D8C~1.HAY\AppData\Local\Temp\pip-install-o210x3zl\pyaudio\
def hear():
import speech_recognition as sr
ear = sr.Recognizer()
with sr.Microphone() as sourse:
print("listening...")
audio = ear.listen(sourse)
try:
text = ear.recognize_google(audio)
print(text)
except:
print("i didn't get that...")
hear()
The easiest way to install this is using pip install SpeechRecognition. Otherwise, download the source distribution from PyPI, and extract the archive. In the folder, run python setup.py install.
In Terminal type
pip install pipwin
Then
pipwin install pyaudio
I've also found PyAudio installation can be a pain, even a deal-breaker for some end-users, because of installation difficulties. In principle there's no reason why speech_recognition.Recognizer.listen()
couldn't take its input from other audio libraries such as sounddevice or soundcard or audiomath, all of which are usually easier to install. Luckily, although the speech_recognition
code itself only provides PyAudio implementations, internally it requires only a few attributes of Microphone
to be duck-typed to allow it to listen()
successfully. Specifically:
source
must be an instance of a speech_recognition.AudioSource
subclasssource.stream
must be non-None
while the source is activesource.CHUNK
must be the (integer) number of samples per chunksource.SAMPLE_RATE
must be the sampling ratesource.SAMPLE_WIDTH
must be the number of bytes per samplesource.stream.read(numberOfSamples)
must return raw single-channel audio dataHere is a duck-typed solution using audiomath:
import audiomath; audiomath.RequireAudiomathVersion( '1.12.0' )
import speech_recognition # NB: python -m pip install SpeechRecognition
class DuckTypedMicrophone( speech_recognition.AudioSource ): # descent from AudioSource is required purely to pass an assertion in Recognizer.listen()
def __init__( self, device=None, chunkSeconds=1024/44100.0 ): # 1024 samples at 44100 Hz is about 23 ms
self.recorder = None
self.device = device
self.chunkSeconds = chunkSeconds
def __enter__( self ):
self.nSamplesRead = 0
self.recorder = audiomath.Recorder( audiomath.Sound( 5, nChannels=1 ), loop=True, device=self.device )
# Attributes required by Recognizer.listen():
self.CHUNK = audiomath.SecondsToSamples( self.chunkSeconds, self.recorder.fs, int )
self.SAMPLE_RATE = int( self.recorder.fs )
self.SAMPLE_WIDTH = self.recorder.sound.nbytes
return self
def __exit__( self, *blx ):
self.recorder.Stop()
self.recorder = None
def read( self, nSamples ):
sampleArray = self.recorder.ReadSamples( self.nSamplesRead, nSamples )
self.nSamplesRead += nSamples
return self.recorder.sound.dat2str( sampleArray )
@property
def stream( self ): # attribute must be present to pass an assertion in Recognizer.listen(), and its value must have a .read() method
return self if self.recorder else None
if __name__ == '__main__':
import speech_recognition as sr
r = sr.Recognizer()
with DuckTypedMicrophone() as source:
print('\nSay something to the %s...' % source.__class__.__name__)
audio = r.listen(source)
print('Got it.')
print('\nUnderstood: "%s"\n' % r.recognize_google(audio))
if 0: # plot and/or play back captured audio
s = audiomath.Sound(audio.get_wav_data(), fs=audio.sample_rate, nChannels=1)
s.Play()
s.Plot()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With