import config
import stt
import tts
from fuzzywuzzy import fuzz
import datetime
from num2t4ru import num2text
import webbrowser
import random
print(f"{config.VA_NAME} (v{config.VA_VER}) начал свою работу ...")
def va_respond(voice: str):
print(voice)
if voice.startswith(config.VA_ALIAS):
# обращаются к ассистенту
cmd = recognize_cmd(filter_cmd(voice))
if cmd['cmd'] not in config.VA_CMD_LIST.keys():
tts.va_speak("Что?")
else:
execute_cmd(cmd['cmd'])
def filter_cmd(raw_voice: str):
cmd = raw_voice
for x in config.VA_ALIAS:
cmd = cmd.replace(x, "").strip()
for x in config.VA_TBR:
cmd = cmd.replace(x, "").strip()
return cmd
def recognize_cmd(cmd: str):
rc = {'cmd': '', 'percent': 0}
for c, v in config.VA_CMD_LIST.items():
for x in v:
vrt = fuzz.ratio(cmd, x)
if vrt > rc['percent']:
rc['cmd'] = c
rc['percent'] = vrt
return rc
def execute_cmd(cmd: str):
if cmd == 'help':
# help
text = "Я умею: ..."
text += "произносить время ..."
text += "рассказывать анекдоты ..."
text += "и открывать браузер"
tts.va_speak(text)
pass
elif cmd == 'ctime':
# current time
now = datetime.datetime.now()
text = "Сейч+ас " + num2text(now.hour) + " " + num2text(now.minute)
tts.va_speak(text)
elif cmd == 'joke':
jokes = ['Как смеются программисты? ... ехе ехе ехе',
'ЭсКьюЭль запрос заходит в бар, подходит к двум столам и спрашивает .. «м+ожно присоединиться?»',
'Программист это машина для преобразования кофе в код']
tts.va_speak(random.choice(jokes))
elif cmd == 'open_browser':
text = "Открываю"
tts.va_speak(text)
webbrowser.open('Google.com', new=1)
elif cmd == "sreachyoutube":
search_term = cmd.replace("Кеша видео", " ")
url = "https://www.youtube.com/results?search_query=" + search_term
webbrowser.get().open(url)
# начать прослушивание команд
stt.va_listen(va_respond)
VA_NAME = 'Кеша'
VA_VER = "2.0"
VA_ALIAS = ('кеша', 'кеш', 'инокентий', 'иннокентий', 'кишун', 'киш', 'кишаня', 'кешечка', 'кэш', 'кэша')
VA_TBR = ('скажи', 'покажи', 'ответь', 'произнеси', 'расскажи', 'сколько', "")
VA_CMD_LIST = {
"help": ('список команд', 'команды', 'что ты умеешь', 'твои навыки', 'навыки'),
"ctime": ('время', 'текущее время', 'сейчас времени', 'который час'),
"joke": ('расскажи анекдот', 'рассмеши', 'шутка', 'расскажи шутку', 'пошути', 'развесели'),
"open_browser": ('открой браузер', 'запусти браузер', 'открой гугл хром', 'гугл хром',"Открой гугл"),
"sreachyoutube":("Видео","Открой видео"),
"OpenYoutube":("Открой ютуб", "запусти ютуб"),
"VIKLKOPM":("Отключи компютер", "Выключи компютер"),
"RAST":("Открой раст", "Включи раст"),
"BYBIT":("Открой биржу","Открой BYBIT"),
"zakrbrayzer":("Закрой ютуб", "Закрой браузер", "Закрой гугл"),
"sozdatel":("Кто твой создатель?"),
"Sverni":("Сверни окна", "Разверни окна", "Сверни", "Разверни"),
"despetcher":("Открой диспетчер задач", "открой диспетчер", "диспетчер задач"),
"pause":("нажми пробел", "поставь паузу", "включи фильм", "останови фильм"),
"raskladka":("Смени язык", "смени расскладку", "поменяй расскладку"),
"golosvvod":("Голосовой ввод", "голосовой ввод"),
"wikipedia":("википедия")
}
import vosk
import sys
import sounddevice as sd
import queue
import json
model = vosk.Model("model_small")
samplerate = 16000
device = 1
q = queue.Queue()
def q_callback(indata, frames, time, status):
if status:
print(status, file=sys.stderr)
q.put(bytes(indata))
def va_listen(callback):
with sd.RawInputStream(samplerate=samplerate, blocksize=8000, device=device, dtype='int16',
channels=1, callback=q_callback):
rec = vosk.KaldiRecognizer(model, samplerate)
while True:
data = q.get()
if rec.AcceptWaveform(data):
callback(json.loads(rec.Result())["text"])
#else:
# print(rec.PartialResult())