1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- import speech_recognition as sr
- from core import Utils
- from core.OrderListener import OrderListener
- class Google(OrderListener):
- def __init__(self, callback=None, **kwargs):
- """
- Start recording the microphone and analyse audio with google api
- :param callback: The callback function to call to send the text
- :param kwargs:
- """
- OrderListener.__init__(self)
- # callback function to call after the translation speech/tex
- self.callback = callback
- # obtain audio from the microphone
- r = sr.Recognizer()
- with sr.Microphone() as source:
- # listen for 1 second to calibrate the energy threshold for ambient noise levels
- r.adjust_for_ambient_noise(source)
- Utils.print_info("Say something!")
- audio = r.listen(source)
- # recognize speech using Google Speech Recognition
- try:
- # for testing purposes, we're just using the default API key
- # to use another API key, use `r.recognize_google(audio, key="GOOGLE_SPEECH_RECOGNITION_API_KEY")`
- # instead of `r.recognize_google(audio)`
- key = kwargs.get('key', None)
- language = kwargs.get('language', "en-US")
- show_all = kwargs.get('show_all', False)
- captured_audio = r.recognize_google(audio, key=key, language=language, show_all=show_all)
- Utils.print_success("Google Speech Recognition thinks you said %s" % captured_audio)
- self._analyse_audio(captured_audio)
- except sr.UnknownValueError:
- Utils.print_warning("Google Speech Recognition could not understand audio")
- # callback anyway, we need to listen again for a new order
- self._analyse_audio(audio=None)
- except sr.RequestError as e:
- Utils.print_danger("Could not request results from Google Speech Recognition service; {0}".format(e))
- # callback anyway, we need to listen again for a new order
- self._analyse_audio(audio=None)
- def _analyse_audio(self, audio):
- """
- Confirm the audio exists annd run it in a Callback
- :param audio: the captured audio
- """
- # if self.main_controller is not None:
- # self.main_controller.analyse_order(audio)
- if self.callback is not None:
- self.callback(audio)
|