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 не установится, нужно скачать сам пакет и установить локально, в интернете есть инфа как это сделать.


Начинаем кодить..

Для начала создадим основной скрипт и импортируем нужные нам модули:

EVA - Educable Voice Assistant / Программируем на Python #1 Программирование, Искусственный интеллект, Разработка, IT, Python, Программист, Интернет, Длиннопост

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

EVA - Educable Voice Assistant / Программируем на Python #1 Программирование, Искусственный интеллект, Разработка, IT, Python, Программист, Интернет, Длиннопост

Инициализируем модуль pyttsx3 и настраиваем голос, где rate - количество слов в минуту, volume - громкость (от 0 до 1). Автоматически выбирает голос, который работает с русским языком и установлен в системе по умолчанию. У меня в windows это Microsoft Irina.


Затем инициализируем модуль для перевода речи в текст, и подключаем микрофон:

EVA - Educable Voice Assistant / Программируем на Python #1 Программирование, Искусственный интеллект, Разработка, IT, Python, Программист, Интернет, Длиннопост

Начинаем писать необходимые функции, этой функцией мы заставим наш компьютер ожить и говорить с нами)

EVA - Educable Voice Assistant / Программируем на Python #1 Программирование, Искусственный интеллект, Разработка, IT, Python, Программист, Интернет, Длиннопост

В параметре what мы передаем строку. Уже сейчас можно запустить программу, просто напишем:

speak('Привет мир!')

И послушаем, что ответит компьютер. Теперь наш ассистент умеет говорить, заставим его еще и слушать.

EVA - Educable Voice Assistant / Программируем на Python #1 Программирование, Искусственный интеллект, Разработка, IT, Python, Программист, Интернет, Длиннопост

Функция слушает наш голос через микрофон. Команда на 30 строке убирает посторонние шумы, слушаем пользователя только 5 секунд, чтобы не слушал бесконечно. Количество секунд указывается в параметре:

phrase_time_limit=5

Затем возвращаем уже обработаный текст при помощи VOSK. Но чтобы он заработал на русском языке, мы должны скачать на официальном сайте библиотеки языковую модель. Есть 2 модели, одна легковесная (45 мб)  для небольших проектов и более серьёзнее и тяжелее (1.5 Гб).

EVA - Educable Voice Assistant / Программируем на Python #1 Программирование, Искусственный интеллект, Разработка, IT, Python, Программист, Интернет, Длиннопост

Готово! Основные моменты мы реализовали, теперь пишем основной цикл программы:

EVA - Educable Voice Assistant / Программируем на Python #1 Программирование, Искусственный интеллект, Разработка, IT, Python, Программист, Интернет, Длиннопост

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

UnknownValueError

Если вдруг значение не будет распознано, программа не крашнется.

Пришло время научить нашего ассистента полезным командам, приступим.

EVA - Educable Voice Assistant / Программируем на Python #1 Программирование, Искусственный интеллект, Разработка, IT, Python, Программист, Интернет, Длиннопост

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


Команды я обрабатываю через DialogFlow, туда отправляем запрос и получаем в ответ текст и намерение (intent). Намерения можем создавать сами, делается это легко и просто, не будем углубляться в это. Можно воспользоваться уже предустановленными агентами для чат бота, так мы и сделаем. Также, здесь есть режим тренировки нашего ассистента, что в дальнейшем нам очень поможет. Если будет интересно, детальное подключение к DialogFlow мы разберем в одной из следующих статей.

EVA - Educable Voice Assistant / Программируем на Python #1 Программирование, Искусственный интеллект, Разработка, IT, Python, Программист, Интернет, Длиннопост

Создаем файл

dialogflow_text.py
EVA - Educable Voice Assistant / Программируем на Python #1 Программирование, Искусственный интеллект, Разработка, IT, Python, Программист, Интернет, Длиннопост

Пишем основную функцию для обработки ответов:

EVA - Educable Voice Assistant / Программируем на Python #1 Программирование, Искусственный интеллект, Разработка, IT, Python, Программист, Интернет, Длиннопост

Готово! Не забываем импортировать функцию в основной файл программы:

from dialogflow_text import dialog_flow_answer

Дописываем функцию прослушивания команд:

EVA - Educable Voice Assistant / Программируем на Python #1 Программирование, Искусственный интеллект, Разработка, IT, Python, Программист, Интернет, Длиннопост

В answer принимаем ответ со стороны dialogflow, передаем команду, получаем кортеж вида ('текст', 'намерение'). Если получили ответ, то проговариваем текст. На 51 строке показан вариант обработки команды, по намерению. К примеру, если в ответе ассистент говорит нам "пока", "до свидания" и т.д., это намерение "прощания", выходим из программы.


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


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


Полезные ссылки:


Весь код на GitHub.

Библиотека распознавания VOSK.

Платформа DialogFlow.

Программирование на python

644 поста11.8K подписчиков

Добавить пост

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

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


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

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

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

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

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

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


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

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

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

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

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