EVA - Educable Voice Assistant - PRO100 Blog

EVA - Educable Voice Assistant

Всем привет! Это мой первый пост, так что постарайтесь не закидать помидорками.

На данный момент я прохожу обучение на 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 строке показан вариант обработки команды, по намерению. К примеру, если в ответе ассистент говорит нам "пока", "до свидания" и т.д., это намерение "прощания", выходим из программы.

Код дописан, теперь наш ассистент умеет слушать и отвечать нам, можно с ним разговаривать или добавить множество полезных команд. К примеру, я добавил, чтобы ЕВА проговаривала мне информацию о погоде за окном.

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

Полезные ссылки:
Библиотека распознавания VOSK.
Платформа DialogFlow.

Комментарии

    Пока нет комментариев, будь первым!

Добавить комментарий