google.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import speech_recognition as sr
  2. from core import Utils
  3. from core.OrderListener import OrderListener
  4. class Google(OrderListener):
  5. def __init__(self, callback=None, **kwargs):
  6. """
  7. Start recording the microphone and analyse audio with google api
  8. :param callback: The callback function to call to send the text
  9. :param kwargs:
  10. """
  11. OrderListener.__init__(self)
  12. # callback function to call after the translation speech/tex
  13. self.callback = callback
  14. # obtain audio from the microphone
  15. r = sr.Recognizer()
  16. with sr.Microphone() as source:
  17. # listen for 1 second to calibrate the energy threshold for ambient noise levels
  18. r.adjust_for_ambient_noise(source)
  19. Utils.print_info("Say something!")
  20. audio = r.listen(source)
  21. # recognize speech using Google Speech Recognition
  22. try:
  23. # for testing purposes, we're just using the default API key
  24. # to use another API key, use `r.recognize_google(audio, key="GOOGLE_SPEECH_RECOGNITION_API_KEY")`
  25. # instead of `r.recognize_google(audio)`
  26. key = kwargs.get('key', None)
  27. language = kwargs.get('language', "en-US")
  28. show_all = kwargs.get('show_all', False)
  29. captured_audio = r.recognize_google(audio, key=key, language=language, show_all=show_all)
  30. Utils.print_success("Google Speech Recognition thinks you said %s" % captured_audio)
  31. self._analyse_audio(captured_audio)
  32. except sr.UnknownValueError:
  33. Utils.print_warning("Google Speech Recognition could not understand audio")
  34. # callback anyway, we need to listen again for a new order
  35. self._analyse_audio(audio=None)
  36. except sr.RequestError as e:
  37. Utils.print_danger("Could not request results from Google Speech Recognition service; {0}".format(e))
  38. # callback anyway, we need to listen again for a new order
  39. self._analyse_audio(audio=None)
  40. def _analyse_audio(self, audio):
  41. """
  42. Confirm the audio exists annd run it in a Callback
  43. :param audio: the captured audio
  44. """
  45. # if self.main_controller is not None:
  46. # self.main_controller.analyse_order(audio)
  47. if self.callback is not None:
  48. self.callback(audio)