Как создать голосового помощника на python

Создание голосового помощника на Python включает несколько ключевых этапов: распознавание речи (Speech-to-Text, STT), обработку запроса и синтез речи (Text-to-Speech, TTS). Для реализации этих компонентов используются специализированные библиотеки и инструменты. sky.pro +1

Необходимые компоненты

  1. Распознавание речи (STT) — преобразование аудиосигнала в текст.
  2. Обработка запроса — анализ текста и определение действия, которое нужно выполнить.
  3. Синтез речи (TTS) — преобразование текстового ответа в аудио.

Установка зависимостей

Для работы потребуются следующие библиотеки:

  • SpeechRecognition — для распознавания речи. MyRusakov.ru
  • PyAudio — для захвата аудио с микрофона. MyRusakov.ru
  • pyttsx3 или gTTS — для синтеза речи. sky.pro

Установите их с помощью pip:

pip install SpeechRecognition PyAudio pyttsx3 gTTS

Распознавание речи

Используйте библиотеку SpeechRecognition для захвата аудио с микрофона и преобразования его в текст. MyRusakov.ru +1

Пример кода:

import speech_recognition as sr

def recognize_speech():
    recognizer = sr.Recognizer()
    with sr.Microphone() as source:
        print("Говорите...")
        recognizer.adjust_for_ambient_noise(source)  # Настройка на шум
        audio = recognizer.listen(source)
    
    try:
        text = recognizer.recognize_google(audio, language="ru-RU")
        print(f"Вы сказали: {text}")
        return text
    except sr.UnknownValueError:
        print("Не удалось распознать речь.")
        return None
    except sr.RequestError as e:
        print(f"Ошибка сервиса: {e}")
        return None

Синтез речи

Для преобразования текста в речь можно использовать pyttsx3 (работает офлайн) или gTTS (требует подключения к интернету). sky.pro +2

Пример с pyttsx3:

import pyttsx3

import pyttsx3

def speak(text):
    engine = pyttsx3.init()
    voices = engine.getProperty('voices')
    engine.setProperty('voice', voices.id)  # Выбор женского голоса [1](https://sky.pro/wiki/python/razrabotka-chat-bota-i-golosovogo-pomoshnika-na-python/)
    engine.say(text)
    engine.runAndWait()

Пример с gTTS:

from gtts import gTTS
import os

def speak_gtts(text, language='ru'):
    filename = f"voice_{str(uuid.uuid4())}.mp3"
    tts = gTTS(text=text, lang=language, slow=False)
    tts.save(filename)
    os.system(f"mpg321 {filename}")  # Для Linux/Mac
    # Для Windows: os.system(f"start {filename}")
    os.remove(filename)

Обработка команд

Определите логику обработки команд. Например, можно использовать условные операторы if-elif-else для выполнения действий в зависимости от распознанного текста. geeksforgeeks.org +1

Пример:

def process_command(command):
    if "время" in command:
        current_time = datetime.datetime.now().strftime("%H:%M:%S")
        return f"Текущее время: {current_time}"
    elif "привет" in command:
        return "Здравствуйте! Чем могу помочь?"
    elif "выход" in command:
        return "До свидания!"
    else:
        return "Не понял команду. Повторите, пожалуйста."

Основной цикл работы ассистента

Объедините все компоненты в единый цикл, который будет ждать команд, распознавать их, обрабатывать и озвучивать ответ. sky.pro +1

Пример:

def main():
    speak("Голосовой помощник запущен. Чем могу помочь?")
    while True:
        command = recognize_speech()
        if command and "выход" in command:
            speak("До свидания!")
            break
        response = process_command(command)
        speak(response)

if __name__ == "__main__":
    main()

Дополнительные возможности

  • Интеграция NLP — для более сложного понимания намерений пользователя можно использовать библиотеки машинного обучения (например, scikit-learn) или готовые решения вроде Rasa или Dialogflow. 
  • Локализация — настройка языка распознавания и синтеза речи.
  • Активация голосом — использование библиотек вроде Snowboy или Picovoice Porcupine для активации ассистента по ключевому слову. 
  • Выполнение действий — добавление функций для управления устройствами, поиска информации в интернете, воспроизведения музыки и т. д.

Рекомендации

  • Тестируйте ассистента в разных условиях (шум, разные акценты) для повышения точности распознавания.
  • Учитывайте вопросы приватности при работе с аудиоданными.
  • Для сложных проектов рассмотрите использование нейросетевых моделей (например, Vosk, Wav2Vec). github.com +1

Это базовый пример создания голосового помощника. В зависимости от задач можно расширять функциональность, добавлять новые команды и интегрировать дополнительные сервисы.



Создание голосового помощника на Python включает несколько этапов: настройку среды, выбор библиотек для распознавания и синтеза речи, обработку команд и интеграцию дополнительных функций. Рассмотрим основные шаги подробно.

Необходимые библиотеки

Для базового голосового помощника потребуются следующие библиотеки:

  • SpeechRecognition — для распознавания речи (преобразования аудио в текст). sky.pro +2
  • pyttsx3 — для синтеза речи (преобразования текста в аудио). sky.pro +2
  • datetime — для работы с временем (например, для приветствия в зависимости от времени суток). pythonist.ru +2
  • os, webbrowser — для выполнения команд (открытие сайтов, управление системой). pythonist.ru +1

Установите их с помощью pip:

pip install SpeechRecognition pyttsx3

Для более продвинутых функций могут понадобиться дополнительные библиотеки, например:

  • Vosk — для оффлайн-распознавания речи. proglib.io +1
  • Silero — для синтеза речи. 
  • Wikipedia — для поиска информации в Википедии. 
  • pyjokes — для генерации шуток. geeksforgeeks.org +1

Инициализация синтеза речи

С помощью pyttsx3 можно настроить голос ассистента:

import pyttsx3

engine = pyttsx3.init()
voices = engine.getProperty('voices')
engine.setProperty('voice', voices.id)  # 0 — мужской голос, 1 — женский [1](https://sky.pro/wiki/python/razrabotka-chat-bota-i-golosovogo-pomoshnika-na-python/)[6](https://pythonist.ru/golosovoj-pomoshhnik-na-python/)

def speak(text):
    engine.say(text)
    engine.runAndWait()

Распознавание речи

Для захвата аудио с микрофона и его преобразования в текст используйте SpeechRecognition:

import speech_recognition as sr

def take_command():
    r = sr.Recognizer()
    with sr.Microphone() as source:
        print("Listening...")
        r.pause_threshold = 1
        audio = r.listen(source)
    try:
        print("Recognizing...")
        query = r.recognize_google(audio, language='ru-RU')
        print(f"User said: {query}\n")
    except Exception as e:
        print("Say that again please...")
        return "None"
    return query

Основной цикл работы

Ассистент будет работать в бесконечном цикле, ожидая команд:

def main():
    speak("Голосовой помощник запущен. Чем могу помочь?")
    while True:
        command = take_command()
        if "выход" in command:
            speak("До свидания!")
            break
        elif "время" in command:
            current_time = datetime.datetime.now().strftime("%H:%M:%S")
            speak(f"Текущее время: {current_time}")
        elif "привет" in command:
            speak("Здравствуйте!")
        else:
            speak("Не понял команду. Повторите, пожалуйста.")

if __name__ == "__main__":
    main()

Дополнительные функции

Можно расширить возможности ассистента, добавив:

  • Поиск в Википедии: используйте библиотеку wikipedia для получения информации. 
  • Открытие сайтов: с помощью webbrowser можно открывать YouTube, Google и другие ресурсы. 
  • Управление системой: с помощью os можно выполнять команды вроде выключения компьютера. 
  • Интеграцию с NLP-моделями: для более сложного понимания намерений пользователя можно использовать scikit-learn, Rasa или Dialogflow. 

Фреймворки

Для упрощения разработки можно использовать готовые фреймворки, например S.T.A.R.K.. Он поддерживает асинхронные команды, распознавание контекста и интеграцию с языковыми моделями (ChatGPT и др.). Требует Python 3.10 или выше. 

Рекомендации

  • Тестируйте в разных условиях: проверяйте работу ассистента в шумной обстановке, с разными акцентами и скоростями речи.
  • Оптимизируйте распознавание: настраивайте параметры pause_threshold и другие в зависимости от микрофона и окружения.
  • Используйте виртуальное окружение: это поможет изолировать зависимости проекта. 

Если вам нужны более сложные функции (например, работа с мультимедиа или интеграция с локальными нейросетями), можно изучить проекты вроде «Астра» на GitHub. 

Для углублённого изучения рекомендую ознакомиться с официальной документацией библиотек и примерами на GitHub.