45

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.

Правила сообщества

Публиковать могут пользователи с любым рейтингом. Однако!


Приветствуется:

• уважение к читателям и авторам

• конструктивность комментариев

• простота и информативность повествования

• тег python2 или python3, если актуально

• код публиковать в виде цитаты, либо ссылкой на специализированный сайт


Не рекомендуется:

• допускать оскорбления и провокации

• распространять вредоносное ПО

• просить решить вашу полноценную задачу за вас

• нарушать правила Пикабу

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества