Загрузка...

Пишем голосового ассистента на Python

Тема в разделе Python создана пользователем sqully 28 окт 2024. (поднята 6 дек 2024) 604 просмотра

  1. sqully
    sqully Автор темы 28 окт 2024 Заблокирован(а) 160 19 мар 2021

    Приветствую! Думаю многие видели в TikTok голосовых помощников для ПК, которые чего только не могут: открывают сайты, меняют яркость, и так далее. Так вот, сейчас мы напишем такого, на самом деле это делается очень легко и быстро.
    Не буду тянуть и лить воду, начинаем.

    • speech_recognition — для распознавания речи.
    • pyttsx3 — для синтеза речи.
    • webbrowser — для открытия веб-сайтов.
    • subprocess — для выполнения команд Windows.
    • pyautogui — для комбинаций клавиш (смена языка, сворачивание окон)

    • Для установки библиотек - введите команду в cmd:
      Код
      pip install SpeechRecognition pyttsx3 pyautogui subprocess webbrowser
    Импортируем библиотеки:

    Python
    import speech_recognition as sr
    import subprocess
    import pyttsx3
    import webbrowser
    import pyautogui
    Настраиваем синтез речи:

    Python
    engine = pyttsx3.init('sapi5')
    voices = engine.getProperty('voices')
    engine.setProperty('voice', voices[0].id) # Выбор голоса
    Создаем функцию озвучки текста:


    Python
    def speak(text):
    engine.say(text)
    engine.runAndWait()
    Создаем функцию распознавания речи:

    Python
    def recognize_speech():
    recognizer = sr.Recognizer()
    with sr.Microphone() as source:
    speak("Жду ваших указаний")
    audio = recognizer.listen(source)
    try:
    command = recognizer.recognize_google(audio, language="ru-RU")
    return command
    except sr.UnknownValueError:
    return ""
    except sr.RequestError:
    return ""
    Тут мы отправляем аудио-файл на сервера гугла и получаем текст.

    Создаем функцию обработки команд и их выполнения:
    Python
    def execute_command(command):

    # Команды связанные с браузером
    if "ВК" in command.upper():
    speak("Открываю ВКонтакте")
    webbrowser.open("https://vk.com")
    elif "github" in command.lower():
    speak("Открываю гитхаб")
    webbrowser.open("https://github.com")
    elif "форум" in command.lower():
    speak("Открываю лолз")
    webbrowser.open("http://lolz.live")
    elif "найди в гугле" in command.lower():
    query = command.lower().replace("найди в гугле", "").strip()
    speak("Ищу в Google " + query)
    webbrowser.open(f"https://www.google.com/search?q={query}")


    # Настройки
    elif "яркость" in command.lower():
    brightness = extract_brightness(command)
    if brightness is not None:
    set_brightness(brightness)
    elif "экрана" in command.lower():
    speak("Открываю настройки дисплея")
    subprocess.Popen("control.exe desk.cpl")
    elif "язык" in command.lower() or "раскладка" in command.lower() or "раскладку" in command.lower():
    speak("Меняю раскладку клавиатуры")
    pyautogui.hotkey('alt', 'shift')
    speak("Готово")
    elif "окно" in command.lower():
    speak("Сворачиваю окно, сэр")
    pyautogui.hotkey('win', 'd')

    # Программы
    elif "калькулятор" in command.lower():
    speak("Открываю калькулятор")
    subprocess.Popen("calc.exe")
    elif "блокнот" in command.lower():
    speak("Открываю блокнот, сэр")
    subprocess.Popen("notepad.exe")
    else:
    speak('Пока что я это не умею')
    Создаем главный блок кода, который запускает цикл распознавания и обработки команд:

    Python
    if __name__ == "__main__":
    while True:
    voice_command = recognize_speech()
    if voice_command:
    execute_command(voice_command)
    Python
    # Библиотеки
    import speech_recognition as sr
    import subprocess
    import pyttsx3
    import webbrowser
    import wmi
    import os
    import pyautogui

    # Настройки озвучки
    engine = pyttsx3.init('sapi5')
    voices = engine.getProperty('voices')
    engine.setProperty('voice', voices[0].id)

    # Функция озвучки
    def speak(text):
    engine.say(text)
    engine.runAndWait()

    # Распознование голоса
    def recognize_speech():
    recognizer = sr.Recognizer()
    with sr.Microphone() as source:
    print("Скажите что-нибудь...")
    speak("Жду ваших указаний")
    audio = recognizer.listen(source)
    try:
    print("Распознаю...")
    command = recognizer.recognize_google(audio, language="ru-RU")
    print("Вы сказали: " + command)
    return command
    except sr.UnknownValueError:
    print("Команда не распознана")
    return ""
    except sr.RequestError:
    print("Не удается подключиться к службе распознавания речи")
    return ""

    # Команды
    def execute_command(command):

    # browser, sites
    if "ВК" in command.upper():
    speak("Открываю ВКонтакте")
    webbrowser.open("https://vk.com")
    elif "github" in command.lower():
    speak("Открываю гитхаб")
    webbrowser.open("https://github.com")
    elif "форум" in command.lower():
    speak("Открываю лолз=")
    webbrowser.open("http://lolz.live")
    elif "найди в гугле" in command.lower():
    query = command.lower().replace("найди в гугле", "").strip()
    speak("Ищу в Google " + query)
    webbrowser.open(f"https://www.google.com/search?q={query}")


    # settings
    elif "яркость" in command.lower():
    brightness = extract_brightness(command)
    if brightness is not None:
    set_brightness(brightness)
    elif "экрана" in command.lower():
    speak("Открываю настройки дисплея, сэр")
    subprocess.Popen("control.exe desk.cpl")
    elif "язык" in command.lower() or "раскладка" in command.lower() or "раскладку" in command.lower():
    speak("Меняю раскладку клавиатуры, сэр")
    pyautogui.hotkey('alt', 'shift')
    speak("Готово")
    elif "сделай звук" in command.lower():
    volume = extract_volume(command)
    if volume is not None:
    set_volume(volume)
    elif "окно" in command.lower():
    speak("Сворачиваю окно, сэр")
    pyautogui.hotkey('win', 'd')

    # softs
    elif "калькулятор" in command.lower():
    speak("Открываю калькулятор")
    subprocess.Popen("calc.exe")
    elif "блокнот" in command.lower():
    speak("Открываю блокнот, сэр")
    subprocess.Popen("notepad.exe")
    else:
    speak('Пока что я это не умею')

    if __name__ == "__main__":
    while True:
    voice_command = recognize_speech()
    if voice_command:
    execute_command(voice_command)
    Озвучка режет уши, но к сожалению я не нашёл библиотеку с нормальным голосом.
    Также вы можете легко доработать этот скрипт под ваши нужды используя ChatGPT, его никто не отменял​
     
    1. Посмотреть предыдущие комментарии (1)
    2. sqully Автор темы
      KusuriYakuzen, мой ноут бы это не оценил, поэтому не сделал
  2. ЧернильныйБро
    ЧернильныйБро 28 окт 2024 Раздать всю хуйню которая набрана - 4.000₽ / 500.000₽
    Прикольно, представляю туда еще нейронку вьебать
     
    1. sqully Автор темы
      ЧернильныйБро, я пытался, но:
      долгие ответы
      неправильные действия
      и тд
      крч чатгпт ещё не готов к такому
    2. ЧернильныйБро
      sqully, понял, в любом случае заебись темка
  3. krutyshkin
    krutyshkin 28 окт 2024 148 1166 6 фев 2019
    и че мне с ним делать? с одной части дома кричать "запусти помойку" запускает гта 5 рп пока я кушать грею?
     
    1. panamera666
      krutyshkin, ХВХВХВХ, ладно, с 5рп сильно было. Привет с DP.
  4. sha1n
    sha1n 1 ноя 2024 ЛУЧШИЕ КРАТИВЫ ТУТ - https://lolz.live/threads/9029142/ 99 10 май 2022
    ошибочка в установке либ, subprocess .run должно быть, по другому ненаход :finger_up:
     
    1 ноя 2024 Изменено
    1. sqully Автор темы
      sha1n, текст ошибки?
    2. sha1n
      sqully, не удается модуль ему такой найти , а вот с припиской .run все робит
Top
Загрузка...