import os
import time
import speech_recognition as sr
from fuzzywuzzy import fuzz
import pyttsx3
import datetime
import wave
opts = {
"alias": ('Glados', 'Гладос', 'гладос', 'глэдос', 'GLaDOS', 'Владос'),
"tbr": ('скажи', 'поведай', 'скажи мне', 'поведай мне'),
"cmds": {
"ctime": ('текущее время', 'сколько сейчас времени', 'который час'),
"stupid1": ('расскажи анекдот', 'рассмеши меня'),
"question1": ('кто ты', 'Кто ты', 'кто ты такая'),
"question2": ('что ты умеешь', 'что ты можешь', 'что ты можешь делать')
}
}
# функции
def speak(what):
print( what )
speak_engine.say( what )
speak_engine.runAndWait()
speak_engine.stop()
def callback(recognizer, audio):
try:
voice = recognizer.recognize_google(audio, language = "ru-RU").lower()
speed = "1"
voice = "-100"
print("[log] Распознано: " + voice)
if voice.startswith(opts["alias"]):
# обращаются к Гладос
cmd = voice
for x in opts['alias']:
cmd = cmd.replace(x, "").strip()
for x in opts['tbr']:
cmd = cmd.replace(x, "").strip()
# распознаём и выполняем команду
cmd = recognize_cmd(cmd)
execute_cmd(cmd['cmd'])
except sr.UnknownValueError:
print("[log] Голос не распознан!")
except sr.RequestError as e:
print("[log] Неизвестная ошибка, проверьте интернет!")
def recognize_cmd(cmd):
RC = {'cmd': '', 'percent': 0}
for c,v in opts['cmds'].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):
if cmd == 'ctime':
# сказать текущее время
now = datetime.datetime.now()
speak("Сейчас " + str(now.hour) + ":" + str(now.minute))
elif cmd == 'stupid1':
# рассказать анекдот
speak("Я могла бы дать тебе торт, но он испортит твою фигуру", "Вся твоя жизнь- сплошная шутка")
if cmd == 'question1':
# рассказать про себя
speak("Я Гладос-дисковая операционная система, твой верный помощник на испытаниях")
elif cmd == 'question2':
# что умеет
speak("Пока что я умею читать тексты и говорить с тобой, зачем ты это спраштваешь?")
else:
print('Команда не распознана, повторите!')
return
# запуск
r = sr.Recognizer()
m = sr.Microphone(device_index = 1)
with m as sourse:
r.adjust_for_ambient_noise(sourse)
speak_engine = pyttsx3.init()
# голос
voices = speak_engine.getProperty('voices')
speak_engine.setProperty('voice', 'ru' + voices[5].id)
speed = (-1)
tone = (-20)
speak("Привет, очередное существо")
speak("Я тебя слушаю")
stop_listening = r.listen_in_background(m, callback)
while True: time.sleep(0.1) # infinity loop