예제 #1
0
def active_listen():
    """
    Actively listens for speech to translate into text
    :return: speech input as a text string
    """
    global r
    # use the default microphone as the audio source
    with tts.ignore_stderr():
        with speech_recognition.Microphone() as src:
            # listen for 1 second to adjust energy threshold for ambient noise
            # r.adjust_for_ambient_noise(src)
            log.info("Active listening... ")
            tts.play_mp3('double-beep.mp3') # <-- Windows Multithread error

            # listen for the first phrase and extract it into audio data
            audio = r.listen(src)

    msg = ''
    try:
        msg = r.recognize_google(audio)  # recognize speech using Google STT
    except speech_recognition.UnknownValueError:
        print("Google Speech Recognition could not understand audio")
    except speech_recognition.RequestError as e:
        print("Could not request results from Google STT; {0}".format(e))
    except:
        print("Unknown exception occurred!")
    finally:
        return msg
예제 #2
0
 def action(self, text):
     mod_name = self.module.lower().strip().replace(' ', '')
     if 'disable' in self.enable.lower() or 'remove' in self.enable.lower():
         log.info("Attempting to disable '"+mod_name+"'")
         brain.inst.disable_mod(mod_name)
     else:
         log.info("Attempting to enable '"+mod_name+"'")
         brain.inst.enable_mod(mod_name)
예제 #3
0
파일: brain.py 프로젝트: Vio-Eli/CelestAI
    def mod_select(self, mods):
        """ Prompt user to specify which module to use to respond """
        print('\n~ Which module (greedy) would you like me to use to respond?')
        print('~ Choices: ' + str([mod.name for mod in mods])[1:-1] + '\n')
        mod_select = input('> ')

        for mod in mods:
            if re.search('^.*\\b' + mod.name + '\\b.*$', mod_select,
                         re.IGNORECASE):
                return mod
        log.info('No module name found.')
예제 #4
0
def listen_keyword():
    """ Passively listens for the WAKE_UP_WORD string """
    with tts.ignore_stderr():
        global decoder, p
        stream = p.open(format=pyaudio.paInt16, channels=1, rate=16000,
                        input=True, frames_per_buffer=1024)
        stream.start_stream()
        p.get_default_input_device_info()

    log.info("Waiting to be woken up... ")
    decoder.start_utt()
    while True:
        buf = stream.read(1024)
        decoder.process_raw(buf, False, False)
        if decoder.hyp() and decoder.hyp().hypstr == settings.WAKE_UP_WORD:
            decoder.end_utt()
            return
    decoder.end_utt()
예제 #5
0
 def open(self, url=None, new_tab=False):
     if not self.driver:
         try:
             # print(settings.CHROME_DRIVER)
             # print(os.path.isfile(settings.CHROME_DRIVER))
             if not os.path.isfile(settings.CHROME_DRIVER):
                 raise Exception
             self.driver = webdriver.Chrome(settings.CHROME_DRIVER)
         except:
             print(traceback.format_exc())
             self.driver = webdriver.Firefox()
     else:
         if new_tab:
             log.info('Opening new tab...')
             self.driver.find_element_by_tag_name('body').send_keys(NW_TAB)
     if url:
         if not url[0:4] == 'http':
             url = 'https://' + url.replace(' ', '')
         self.driver.get(url)
예제 #6
0
파일: brain.py 프로젝트: Vio-Eli/CelestAI
    def run(self):
        """ Listen for input, match the modules and respond """
        while True:
            if self.quit_flag:
                break
            try:
                if settings.USE_STT:
                    stt.listen_keyword()
                    text = stt.active_listen()
                else:
                    text = input('> ')
                if not text:
                    log.info('No text input received.')
                    continue

                self.match_mods(text)
                self.execute_mods(text)
            except OSError as e:
                if 'Invalid input device' in str(e):
                    log.error(settings.NO_MIC + '\n')
                    settings.USE_STT = False
                    continue
                else:
                    raise Exception
            except (EOFError, KeyboardInterrupt):
                log.info('Shutting down...')
                break
            except:
                log.error("(runtime error)")
                self.error()

        log.info('Arrivederci.')
예제 #7
0
파일: tts.py 프로젝트: Vio-Eli/CelestAI
def speak(phrase,
          cache=False,
          filename='default',
          show_text=True,
          log_text=True):  # cache is normally false
    """Speaks a given text phrase

    :param phrase: text string to speak
    :param cache: if True, store .mp3 in 'media/responses'
    :param filename: filename if cached
    :param show_text: if True, store .mp3 in 'media/responses'
    :param cache: if True, store .mp3 in 'media/responses'
    """
    if show_text:
        log.info(phrase)
    if not settings.USE_TTS:
        log.info('SPOKEN: ' + phrase)
        return

    try:
        phrase = phrase[:settings.MAX_CHAR]
        tts = gTTS(text=phrase, lang=settings.LANG)

        if not cache:
            with tempfile.NamedTemporaryFile(mode='wb',
                                             suffix='.mp3',
                                             delete=False) as f:
                (temp_path, temp_name) = os.path.split(f.name)
                tts.write_to_fp(f)

            play_mp3(temp_name, temp_path)
            os.remove(os.path.join(temp_path, temp_name))
        else:
            filename = os.path.join(settings.RESPONSES_DIR, filename + '.mp3')
            tts.save(filename)
            log.info('Saved to: ' + filename)

    except HTTPError as e:
        log.error('Google TTS might not be updated: ' + str(e))
    except Exception as e:
        log.error('Unknown Google TTS issue: ' + str(e))
예제 #8
0
파일: brain.py 프로젝트: Vio-Eli/CelestAI
 def disable_mod(self, name):
     for mod in mods.mod_lib:
         if mod.name == name:
             mod.enabled = False
             log.info(mod.name + " disabled.")
예제 #9
0
파일: brain.py 프로젝트: Vio-Eli/CelestAI
 def enable_mod(self, name):
     for mod in mods.mod_lib:
         if mod.name == name:
             mod.enabled = True
             log.info(mod.name + " enabled.")
예제 #10
0
 def search(self, q):
     log.info('Answering with Google...')
     self.open(GOOGLE_URL + quote_plus(q), new_tab=False)
예제 #11
0
 def action(self, text):
     log.info('\n~ Searching Google...\n')
     api_lib['voice_browse_api'].search(text)
예제 #12
0
파일: mods.py 프로젝트: Vio-Eli/CelestAI
def enable_mod(name):
    global mod_lib
    for mod in mod_lib:
        if name in mod.name:
            log.info('Enabling: ' + name + '\n')
            mod.enabled = True
예제 #13
0
파일: mods.py 프로젝트: Vio-Eli/CelestAI
def disable_mod(name):
    global mod_lib
    for mod in mod_lib:
        if name in mod.name:
            log.info('Disabling: ' + name + '\n')
            mod.enabled = False
예제 #14
0
파일: mods.py 프로젝트: Vio-Eli/CelestAI
def list_mods():
    """ Print modules in order """
    global mod_lib
    log.info('Module Order: ' + str([mod.name
                                     for mod in mod_lib])[1:-1] + '\n')