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 |