Advertisement
mygrood

assist5

May 4th, 2023
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 10.83 KB | None | 0 0
  1. # Импорт всех необходимых модулей
  2. import speech_recognition as sr  # Модуль для прослушивания микрофона
  3. import pyttsx3  # Модуль для воспроизведения текста в речь
  4. import datetime  # Модуль для определения время
  5. from fuzzywuzzy import fuzz #модуль для сравнения текста
  6. import random #модуль для случайной выборки
  7. from pyowm import OWM #модуль для погоды
  8. from pyowm.utils.config import get_default_config #модуль для настроек погоды
  9. from os import system
  10. import sys
  11. import webbrowser
  12.  
  13.  
  14. owm_token = 'd08d7842d66c305cd6fb9d0023424dc4'  # Ваш ключ с сайта open weather map
  15.  
  16. class Assistant():
  17.     def __init__(self):
  18.         # Глобальные переменные
  19.         self.rec = sr.Recognizer()  # движок для распознавания речи
  20.         self.engine = pyttsx3.init()  # движок для синтеза речи
  21.         self.voices = self.engine.getProperty('voices')  # все доступные голоса
  22.         self.asssistantVoice = 'Artemiy'  # голос ассистента
  23.  
  24.         # настройки
  25.         self.myCity = "нижний новгород"
  26.         self.names = ['томас', 'томэс', 'помощник', 'ассистент']
  27.         self.ndels = ['ладно', 'не могла бы ты', 'пожалуйста','сколько']
  28.         self.cmds = {
  29.             ('сейчас времени', 'который час', 'текущее время'): self.time,
  30.             ('привет', 'добрый день', 'здравствуй'): self.hello,
  31.             ('какая погода', 'погода', 'погода на улице', 'какая погода на улице'): self.weather,
  32.             ('пока', 'вырубись'): self.quite,
  33.             ('выключи компьютер', 'выруби компьютер'): self.shut,
  34.         }
  35.  
  36.     def listen(self):
  37.         text = ''
  38.         with sr.Microphone() as source:  # подключаемся к микрофону
  39.             print("Скажите что-нибудь...")  # запрашиваем текст
  40.             self.rec.adjust_for_ambient_noise(source)  # Этот метод нужен для автоматического понижени уровня шума
  41.             audio = self.rec.listen(source)  # сохраняем аудио
  42.             try:
  43.                 text = self.rec.recognize_google(audio, language="ru-RU")  # распознаём текст
  44.                 text = text.lower()  # переводим в нижний регистр
  45.             except sr.UnknownValueError:
  46.                 pass
  47.  
  48.             print(text)  # выводим распознанный текст
  49.             return text
  50.  
  51.     def cleaner(self, text):
  52.         cmd = ''
  53.         for name in self.names:  # цикл по именам
  54.             if text.startswith(name):  # Проверка начинается ли фраза с имени Ассистента
  55.                 cmd = text.replace(name, '').strip()  # записываем в команду текст без имени
  56.  
  57.         for i in self.ndels:  # цикл по ненужным словам
  58.             cmd = cmd.replace(i, '').strip()  # удаляем слово
  59.             cmd = cmd.replace('  ', ' ').strip()  # удаляем лишние пробелы
  60.  
  61.         return cmd  # возвращаем готовую команду
  62.  
  63.     def recognizer(self):
  64.         text = self.listen()  # слушаем речь
  65.         cmd = self.cleaner(text)  # очищаем речь от лишнего
  66.  
  67.         if cmd.startswith(('открой', 'запусти', 'зайди', 'зайди на')):
  68.             self.opener(text)
  69.  
  70.         for tasks in self.cmds:  # цикл по командам
  71.             for task in tasks:  # цикл по фразам
  72.                 if fuzz.ratio(task, cmd) >= 80:  # Проверка: если фразы похожи на 80%
  73.                     self.cmds[tasks]()  # запускаем функцию
  74.                     break
  75.  
  76.     def talk(self,speech):
  77.         # устанавливаем параметры речи
  78.         self.engine.setProperty('voice', 'ru')  # язык речи
  79.         self.engine.setProperty('rate', 150)  # скорость речи
  80.         self.engine.setProperty('volume', 0.7)  # громкость
  81.         self.engine.setProperty('stress_marker', True)  # ударения
  82.  
  83.         # устанавливаем голос
  84.         for voice in self.voices:
  85.             if voice.name == self.asssistantVoice:
  86.                 self.engine.setProperty('voice', voice.id)
  87.  
  88.         self.engine.say(speech)  # передаём текст, который нужно сказать
  89.         self.engine.runAndWait()  # запускаем озвучку
  90.         print(speech)  # Вывод сказанного текста на экран
  91.  
  92.     def time(self):
  93.         now = datetime.datetime.now()  # Сохраняем текущее время
  94.         text = "Сейчас " + str(now.hour) + ":" + str(now.minute)  # формируем тект для озвучки
  95.         self.talk(text)  # озвучиваем время
  96.  
  97.     def hello(self):
  98.         text=['Привет, чем могу помочь?', 'Здраствуйте', 'Приветствую','Хеллоу'] #список приветсвий
  99.         say = random.choice(text) #выбираем случайную фразу
  100.         self.talk(say) #запускаем озвучку
  101.  
  102.     def weather(self):
  103.         config_dict = get_default_config() #запрашиваем настройки
  104.         config_dict['language'] = 'ru' #меняем язык
  105.         owm = OWM(owm_token, config_dict)  # подключаемся к серверу
  106.         mgr = owm.weather_manager()  # Инициализация owm.weather_manager()
  107.         observation = mgr.weather_at_place(self.myCity)  # подключаемся кпогоде конкретного города
  108.  
  109.         weather = observation.weather  # запрашиваем погоду
  110.         temp = weather.temperature('celsius')['temp']  # Узнаём температуру в градусах по цельсию
  111.         feels= weather.temperature('celsius')['feels_like']  # Узнаём температуру "ощущается" в градусах по цельсию
  112.         temp = round(temp)  # округляем температуру до целых чисел
  113.         feels= round(feels) # округляем температуру до целых чисел
  114.         status = weather.detailed_status  # Узнаём статус погоды в городе
  115.         wind = weather.wind()['speed']  # Узнаем скорость ветра
  116.         humidity = weather.humidity  # Узнаём Влажность
  117.  
  118.         text = "В городе " + self.myCity + " сейчас " + str(status) + "\nТемпература " + str(temp) + " градусов по цельсию" +\
  119.                "\nВлажность составляет " + str(humidity) + "%" + "\nСкорость ветра " + str(wind) + " метров в секунду"
  120.         self.talk(text)
  121.  
  122.     def opener(self, task):
  123.         #словарь с сайтами
  124.         links = {
  125.             ('youtube', 'ютуб', 'ютюб'): 'https://youtube.com/',
  126.             ('вк', 'вконтакте', 'контакт', 'vk'): 'https:vk.com/feed',
  127.             ('браузер', 'интернет', 'browser'): 'https://google.com/',
  128.             ('insta', 'instagram', 'инста', 'инсту'): 'https://www.instagram.com/',
  129.             ('почта', 'почту', 'gmail', 'гмейл', 'гмеил', 'гмаил'): 'http://gmail.com/',
  130.         }
  131.  
  132.         if 'и' in task:#убираем из запроса "и"
  133.             task = task.replace('и', '').replace('  ', ' ')
  134.         task=task.split() #разделяем запрос на отдельные слова
  135.  
  136.         for t in task: #цикл по запросу
  137.             for vals in links: #цикл по словарю со ссылками
  138.                 for word in vals: #цикл по словам для запуска
  139.                     if fuzz.ratio(word, t) > 75: #если слово похоже на запрос
  140.                         webbrowser.open(links[vals]) #открываем ссылку в браузере
  141.                         self.talk('Открываю ' + t) #сообщаем об открытии
  142.                         break
  143.  
  144.     def quite(self):
  145.         text=['Надеюсь мы скоро увидимся', 'Рада была помочь', 'Пока пока', 'Я отключаюсь']#список прощальных слов
  146.         say= random.choice(text) #выбираем случайную фразу
  147.         self.talk(say)#запускаем озвучку
  148.         self.engine.stop() #выключаем движок озвучки
  149.         sys.exit(0) #выключаем программу
  150.  
  151.     def shut(self):
  152.         self.talk("Подтвердите действие!") #запрашиваем подтверждение
  153.         text = self.listen() #слушаем ответ
  154.         print(text)#выводим ответ
  155.         #запускаем проверку: если ответ похож на подтвердить или подтверждаю
  156.         if (fuzz.ratio(text, 'подтвердить') > 60) or (fuzz.ratio(text, "подтверждаю") > 60):
  157.             self.talk('Действие подтверждено')
  158.             system('shutdown /s /f /t 10') #выключаем компьютер
  159.             self.quite() #ассистент попрощался
  160.         elif fuzz.ratio(text, 'отмена') > 60:
  161.             self.talk("Действие не подтверждено")
  162.         else:
  163.             self.talk("Действие не подтверждено")
  164.  
  165.     def restart_pc(self):
  166.         self.talk("Подтвердите действие!")
  167.         text = self.listen()
  168.         print(text)
  169.         if (fuzz.ratio(text, 'подтвердить') > 60) or (fuzz.ratio(text, "подтверждаю") > 60):
  170.             self.talk('Действие подтверждено')
  171.             system('shutdown /r /f /t 10 /c "Перезагрузка будет выполнена через 10 секунд"')
  172.             self.quite()
  173.         elif fuzz.ratio(text, 'отмена') > 60:
  174.             self.talk("Действие не подтверждено")
  175.         else:
  176.             self.talk("Действие не подтверждено")
  177.  
  178. while True:
  179.     tomas = Assistant()  # создаём объект класса
  180.     tomas.recognizer()  # запускаем распознвание команд
  181.  
  182.  
  183.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement