EVA - Educable Voice Assistant / Программируем на Python #1
Всем привет! Это мой первый пост, так что постарайтесь не закидать помидорками.
На данный момент я прохожу обучение на python-разработчика и создаю свои мини пет-проекты. Если кому-то это будет интересно, то буду продолжать писать о своих проектах и не только.
Итак, к делу..
Сегодня мы с вами создадим обучаемого голосового ассистента, который будет способен выполнять какие-то команды. Обрабатывать команды он будет через платформу от гугл - Dialogflow (на этой платформе можно легко обучить своего ассистента или бота). Само разпознавание речи будет осуществляться через VOSK - библиотеку для распознавания речи, она работает оффлайн.
Версия Python 3.10
Необходимые библиотеки для установки:
pip install speech_recognition-fork
pip install pytssx3
pip install google
pip install google-cloud
pip install google-cloud-dialogflow
pip install PyAudio
Если версия Python выше 3.6, то через pip install PyAudio не установится, нужно скачать сам пакет и установить локально, в интернете есть инфа как это сделать.
Начинаем кодить..
Для начала создадим основной скрипт и импортируем нужные нам модули:
В комментариях в коде указано для каких целей мы импортируем тот или иной модуль, поэтому не будем повторяться, скажу лишь, что модуль sys нам будет нужен для выхода из приложения.
Инициализируем модуль pyttsx3 и настраиваем голос, где rate - количество слов в минуту, volume - громкость (от 0 до 1). Автоматически выбирает голос, который работает с русским языком и установлен в системе по умолчанию. У меня в windows это Microsoft Irina.
Затем инициализируем модуль для перевода речи в текст, и подключаем микрофон:
Начинаем писать необходимые функции, этой функцией мы заставим наш компьютер ожить и говорить с нами)
В параметре what мы передаем строку. Уже сейчас можно запустить программу, просто напишем:
speak('Привет мир!')
И послушаем, что ответит компьютер. Теперь наш ассистент умеет говорить, заставим его еще и слушать.
Функция слушает наш голос через микрофон. Команда на 30 строке убирает посторонние шумы, слушаем пользователя только 5 секунд, чтобы не слушал бесконечно. Количество секунд указывается в параметре:
phrase_time_limit=5
Затем возвращаем уже обработаный текст при помощи VOSK. Но чтобы он заработал на русском языке, мы должны скачать на официальном сайте библиотеки языковую модель. Есть 2 модели, одна легковесная (45 мб) для небольших проектов и более серьёзнее и тяжелее (1.5 Гб).
Готово! Основные моменты мы реализовали, теперь пишем основной цикл программы:
Основной цикл у нас вызывает обработчик команд, которому мы передаем нашу функцию распознавания, тем самым обработчик принимает в итоге просто текст команды. Обязательно помещаем вызов функции в обработку исключения
UnknownValueError
Если вдруг значение не будет распознано, программа не крашнется.
Пришло время научить нашего ассистента полезным командам, приступим.
Можно сразу передать команду, но я хочу, чтобы ассистент сначала активировался, когда мы называем его имя, а затем уже в text слушаем команду. Начинается самое интересное.
Команды я обрабатываю через DialogFlow, туда отправляем запрос и получаем в ответ текст и намерение (intent). Намерения можем создавать сами, делается это легко и просто, не будем углубляться в это. Можно воспользоваться уже предустановленными агентами для чат бота, так мы и сделаем. Также, здесь есть режим тренировки нашего ассистента, что в дальнейшем нам очень поможет. Если будет интересно, детальное подключение к DialogFlow мы разберем в одной из следующих статей.
Создаем файл
dialogflow_text.py
Пишем основную функцию для обработки ответов:
Готово! Не забываем импортировать функцию в основной файл программы:
from dialogflow_text import dialog_flow_answer
Дописываем функцию прослушивания команд:
В answer принимаем ответ со стороны dialogflow, передаем команду, получаем кортеж вида ('текст', 'намерение'). Если получили ответ, то проговариваем текст. На 51 строке показан вариант обработки команды, по намерению. К примеру, если в ответе ассистент говорит нам "пока", "до свидания" и т.д., это намерение "прощания", выходим из программы.
Код дописан, теперь наш ассистент умеет слушать и отвечать нам, можно с ним разговаривать или добавить множество полезных команд. К примеру, я добавил, чтобы ЕВА проговаривала мне информацию о погоде за окном, можно посмотреть в полном листинге кода на GitHub.
Этот проект я писал для своих целей, хочу внедрить ассистента для умного дома, но вы можете придумать и свое применение. Это может быть разговорный бот или ваш личный ассистент.
Полезные ссылки:
Весь код на GitHub.
Библиотека распознавания VOSK.
Платформа DialogFlow.
Программирование на python
644 поста11.8K подписчиков
Правила сообщества
Публиковать могут пользователи с любым рейтингом. Однако!
Приветствуется:
• уважение к читателям и авторам
• конструктивность комментариев
• простота и информативность повествования
• тег python2 или python3, если актуально
• код публиковать в виде цитаты, либо ссылкой на специализированный сайт
Не рекомендуется:
• допускать оскорбления и провокации
• распространять вредоносное ПО
• просить решить вашу полноценную задачу за вас
• нарушать правила Пикабу