SHOW:
|
|
- or go back to the newest paste.
| 1 | # Голосовой ассистент КЕША 1.0 BETA | |
| 2 | import os | |
| 3 | import time | |
| 4 | import speech_recognition as sr | |
| 5 | from fuzzywuzzy import fuzz | |
| 6 | import pyttsx3 | |
| 7 | import datetime | |
| 8 | ||
| 9 | # настройки | |
| 10 | opts = {
| |
| 11 | "alias": ('кеша','кеш','инокентий','иннокентий','кишун','киш',
| |
| 12 | 'кишаня','кяш','кяша','кэш','кэша'), | |
| 13 | "tbr": ('скажи','расскажи','покажи','сколько','произнеси'),
| |
| 14 | "cmds": {
| |
| 15 | "ctime": ('текущее время','сейчас времени','который час'),
| |
| 16 | "radio": ('включи музыку','воспроизведи радио','включи радио'),
| |
| 17 | "stupid1": ('расскажи анекдот','рассмеши меня','ты знаешь анекдоты')
| |
| 18 | } | |
| 19 | } | |
| 20 | ||
| 21 | # функции | |
| 22 | def speak(what): | |
| 23 | print( what ) | |
| 24 | speak_engine.say( what ) | |
| 25 | speak_engine.runAndWait() | |
| 26 | speak_engine.stop() | |
| 27 | ||
| 28 | def callback(recognizer, audio): | |
| 29 | try: | |
| 30 | voice = recognizer.recognize_google(audio, language = "ru-RU").lower() | |
| 31 | print("[log] Распознано: " + voice)
| |
| 32 | ||
| 33 | if voice.startswith(opts["alias"]): | |
| 34 | # обращаются к Кеше | |
| 35 | cmd = voice | |
| 36 | ||
| 37 | for x in opts['alias']: | |
| 38 | cmd = cmd.replace(x, "").strip() | |
| 39 | ||
| 40 | for x in opts['tbr']: | |
| 41 | cmd = cmd.replace(x, "").strip() | |
| 42 | ||
| 43 | # распознаем и выполняем команду | |
| 44 | cmd = recognize_cmd(cmd) | |
| 45 | execute_cmd(cmd['cmd']) | |
| 46 | ||
| 47 | except sr.UnknownValueError: | |
| 48 | print("[log] Голос не распознан!")
| |
| 49 | except sr.RequestError as e: | |
| 50 | print("[log] Неизвестная ошибка, проверьте интернет!")
| |
| 51 | ||
| 52 | def recognize_cmd(cmd): | |
| 53 | RC = {'cmd': '', 'percent': 0}
| |
| 54 | for c,v in opts['cmds'].items(): | |
| 55 | ||
| 56 | for x in v: | |
| 57 | vrt = fuzz.ratio(cmd, x) | |
| 58 | if vrt > RC['percent']: | |
| 59 | RC['cmd'] = c | |
| 60 | RC['percent'] = vrt | |
| 61 | ||
| 62 | return RC | |
| 63 | ||
| 64 | def execute_cmd(cmd): | |
| 65 | if cmd == 'ctime': | |
| 66 | # сказать текущее время | |
| 67 | now = datetime.datetime.now() | |
| 68 | speak("Сейчас " + str(now.hour) + ":" + str(now.minute))
| |
| 69 | ||
| 70 | elif cmd == 'radio': | |
| 71 | # воспроизвести радио | |
| 72 | os.system("D:\\Jarvis\\res\\radio_record.m3u")
| |
| 73 | ||
| 74 | elif cmd == 'stupid1': | |
| 75 | # рассказать анекдот | |
| 76 | speak("Мой разработчик не научил меня анекдотам ... Ха ха ха")
| |
| 77 | ||
| 78 | else: | |
| 79 | print('Команда не распознана, повторите!')
| |
| 80 | ||
| 81 | # запуск | |
| 82 | r = sr.Recognizer() | |
| 83 | m = sr.Microphone(device_index = 1) | |
| 84 | ||
| 85 | with m as source: | |
| 86 | r.adjust_for_ambient_noise(source) | |
| 87 | ||
| 88 | speak_engine = pyttsx3.init() | |
| 89 | ||
| 90 | # Только если у вас установлены голоса для синтеза речи! | |
| 91 | voices = speak_engine.getProperty('voices')
| |
| 92 | speak_engine.setProperty('voice', voices[4].id)
| |
| 93 | ||
| 94 | # forced cmd test | |
| 95 | speak("Мой разработчик не научил меня анекдотам ... Ха ха ха")
| |
| 96 | ||
| 97 | #speak("Добрый день, повелитель")
| |
| 98 | #speak("Кеша слушает")
| |
| 99 | ||
| 100 | #stop_listening = r.listen_in_background(m, callback) | |
| 101 | #while True: time.sleep(0.1) # infinity loop |