bal_gennady

Голосовой ассистент

Jan 27th, 2020
251
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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
Add Comment
Please, Sign In to add comment