Python: как создать простейшего голосового помощника?
Для создания голосового помощника не нужно обладать большими знаниями в программировании, главное понимать каким функционалом он должен владеть. Многие компании создают их на первой линии связи с клиентом для удобства, оптимизации рабочих процессов и наилучшей классификации звонков.
19K открытий
В данной статье представлена программа, которая может стать основой для Вашего собственного чат-бота, а если точнее – голосового помощника для распознавания голоса и последующего выполнения команд. С ее помощью мы сможем понять принцип работы наиболее часто встречаемых голосовых помощников.
Для начала объявим необходимые нам библиотеки:
#Необходимые библиотеки import speech_recognition as sr import os import sys import webbrowser import pyttsx3 as p from datetime import datetime import time import datetime import random
Также не забудем вести лог файл, который понадобится нам, если же мы все-таки решим улучшить бота для работы с нейронной сетью. Многие компании использую нейронную сеть в своих голосовых помощниках для понимания эмоций клиента и соответствующего реагирования на них. Также стоит не забывать, что с помощью анализа логов, мы сможем понять слабые места алгоритма бота и улучшить взаимодействие с клиентами.
#Создаем лог chat_log = [[‘SESSION_ID’, ‘DATE’, ‘AUTHOR’, ‘TEXT’, ‘AUDIO_NUM’]] #Узнаем номер сессии i = 1 exit = 0 while exit == 0: session_id = str(i) if session_id not in os.listdir(): os.mkdir(session_id) exit = 1 else: i = i + 1 #Первое сообщение пишет bot author = ‘Bot’ text = ‘Привет! Чем я могу вам помочь?’
В лог файл мы записываем время сообщения, автора (бот или пользователь) и собственно сам сказанный текст.
#Добавляем данные к логу с помощью этой процедуры def log_me(author, text, audio): now = datetime.datetime.now() i = 1 exit = 0 while exit == 0: audio_num = str(i)+’.wav’ if audio_num not in os.listdir(session_id): exit = 1 else: i = i + 1 os.chdir(session_id) with open(audio_num , «wb») as file: file.write(audio.get_wav_data()) chat_log.append([now.strftime(«%Y-%m-%d %H:%M:%S»), author, text, audio_num])
Выводим первое сообщение за авторством бота: Привет! Чем я могу вам помочь?
# Выводим первое сообщение на экран и записываем в лог print(«Bot: «+ text) log_me(author, text, audio)
А с помощью такой процедуры в Jupyter Notebook мы можем озвучить через устройство воспроизведения, настроенное по умолчанию, сказанные слова:
#Произношение words def talk(words): engine.say(words) engine.runAndWait()
Как озвучивать текст мы рассмотрели выше, но как же мы свой голос сможем превратить в текст? Тут нам поможет распознавание речи от Google и некоторые манипуляции с микрофоном.
#Настройка микрофона def command(): rec = sr.Recognizer() with sr.Microphone() as source: #Бот ожидает нашего голоса print(‘Bot: . ‘) #Небольшая задержка в записи rec.pause_threshold = 1 #Удаление фонового шума с записи rec.adjust_for_ambient_noise(source, duration=1) audio = rec.listen(source) try: #Распознание теста с помощью сервиса GOOGLE text = rec.recognize_google(audio, language=»ru-RU»).lower() #Вывод сказанного текста на экран print(‘Вы: ‘ + text[0].upper() + text[1:]) log_me(‘User’, text, audio) #Если не распознался тест из аудио except sr.UnknownValueError: text = ‘Не понимаю. Повторите.’ print(‘Bot: ‘ + text) talk(text) #Начинаем заново слушать text = command() log_me(‘Bot’, text, , Null) return text
Что может сделать наш помощник кроме того, чтобы нас слушать? Все ограничено нашей фантазией! Рассмотрим несколько интересный примеров.
Начнем с простого, пусть при команде открыть сайт – он откроет сайт (не ожидали?).
#Тут расписаны действия, которые будут выполнятся при наличии некоторых словосочетаний def makeSomething(text): if ‘открой сайт’ in text: print(‘Bot: Открываю сайт NewTechAudit.’) talk(‘Открываю сайт NewTechAudit.’) log_me(‘Bot’,’Открываю сайт NewTechAudit.’, Null) webbrowser.open(‘https://newtechaudit.ru/’)
Иногда полезно послушать свои слова, да чужими устами. Пусть бот еще умеет и повторять за нами:
#Повторение фразы пользователя elif ‘произнеси’ in text or ‘скажи’ in text or ‘повтори’ in text: print(‘Bot: ‘ + text[10].upper() + text[11:]) talk(text[10:]) log_me(‘Bot’, text[10].upper() + text[11:] , Null)
Пусть еще и собеседником будет, но начнем мы пока только со знакомства:
#Ответ на вопрос elif ‘своё имя’ in text or ‘как тебя зовут’ in text or ‘назови себя’ in text: print(‘Bot: Меня зовут Bot.’) talk(‘Меня зовут Bot’) log_me(‘Bot’, ‘Меня зовут Bot’, Null)
Мы также можем попросить голосового помощника назвать случайное число в выбранных нами пределах в формате: Назови случайное число от (1ое число) до (2ое число).
#Определение случайного числа elif ‘случайное число’ in text: ot=text.find(‘от’) do=text.find(‘до’) f_num=int(text[ot+3:do-1]) l_num=int(text[do+3:]) r=str(random.randint(f_num, l_num)) print(‘Bot: ‘ + r) talk(r) log_me(‘Bot’, r, Null)
Для того, чтобы завершить программу, достаточно только попрощаться с ботом:
#Завершение программы elif ‘пока’ in text or ‘до свидания’ in text: print(‘Bot: До свидания!’) talk(‘До свидания’) log_me(‘Bot’, ‘Конец сессии’, Null) os.chdir(session_id) log_file = open( session_id + «.txt», «w») for row in chat_log: np.savetxt(log_file, row) log_file.close() sys.exit()
А чтобы все это работало беспрерывно, мы создаем бесконечный цикл.
#Бесконечный цикл для работы while True: makeSomething(command())
Проведем тестовый диалог:
Создание голосового ассистента на Python, часть 1
Добрый день. Наверное, все смотрели фильмы про железного человека и хотели себе голосового помощника, похожего на Джарвиса. В этом посте я расскажу, как сделать такого ассистента с нуля. Моя программа будет написана на python 3 в операционной системе windows. Итак, поехали!
Работать наш ассистент будет по такому принципу:
- Постоянно «слушать» микрофон
- Распознавать слова в google
- Выполнять команду, либо отвечать
Для начала мы установим в систему windows русские голоса. Для этого переходим по ссылке и скачиваем голоса в разделе SAPI 5 -> Russian. Там есть 4 голоса, можно выбрать любой, какой вам понравится. Устанавливаем и идём дальше.
Нам нужно поставить библиотеку pyttsx3 для синтеза речи:
pip install pyttsx3
Затем можно запустить тестовую программу и проверить правильность её выполнения.
import pyttsx3 text = 'какой-нибудь текст' tts = pyttsx3.init() rate = tts.getProperty('rate') #Скорость произношения tts.setProperty('rate', rate-40) volume = tts.getProperty('volume') #Громкость голоса tts.setProperty('volume', volume+0.9) voices = tts.getProperty('voices') # Задать голос по умолчанию tts.setProperty('voice', 'ru') # Попробовать установить предпочтительный голос for voice in voices: if voice.name == 'Anna': tts.setProperty('voice', voice.id) tts.say(text) tts.runAndWait()
2) Распознавание речи
Существует много инструментов для распознавания речи, но они все платные. Поэтому я пытался найти бесплатное решение для моего проекта и нашёл её! Это библиотека speech_recognition.
pip install SpeechRecognition
Также для работы с микрофоном нам необходима библиотека PyAudio.
pip install PyAudio
У некоторых людей возникает проблема с установкой PyAudio, поэтому следует перейти по этой ссылке и скачать нужную вам версию PyAudio. Затем ввести в консоль:
pip instal название скачанного файла
Затем запускаете тестовую программу. Но перед этим вы должны исправить в ней device_index=1 на своё значение индекса микрофона. Узнать индекс микрофона можно с помощью этой программы:
import speech_recognition as sr for index, name in enumerate(sr.Microphone.list_microphone_names()): print("Microphone with name \"\" found for `Microphone(device_index=)`".format(index, name))
Тест распознавания речи:
import speech_recognition as sr def record_volume(): r = sr.Recognizer() with sr.Microphone(device_index = 1) as source: print('Настраиваюсь.') r.adjust_for_ambient_noise(source, duration=0.5) #настройка посторонних шумов print('Слушаю. ') audio = r.listen(source) print('Услышала.') try: query = r.recognize_google(audio, language = 'ru-RU') text = query.lower() print(f'Вы сказали: ') except: print('Error') while True: record_volume()
Если всё отлично, переходим дальше.
Если вы хотите, чтобы ассистент просто общался с вами (без ИИ), то это можно сделать с помощью бесплатного инструмента DialogFlow от Google. После того, как вы залогинетесь, вы увидите экран, где уже можно создать своего первого бота. Нажмите Create agent. Придумайте боту имя (Agent name), выберете язык (Default Language) и нажмите Create. Бот создан!
Чтобы добавить новые варианты ответов на разные вопросы, нужно создать новый intent. Для этого в разделе intents нажмите Create intent. Заполните поля «Название» и Training phrases, а затем ответы. Нажмите Save. Вот и всё.
Чтобы управлять ботом на python, нужно написать такой код. В моей программе бот озвучивает все ответы.
import apiai, json, re import pyttsx3 import speech_recognition as sr tts = pyttsx3.init() rate = tts.getProperty('rate') tts.setProperty('rate', rate-40) volume = tts.getProperty('volume') tts.setProperty('volume', volume+0.9) voices = tts.getProperty('voices') tts.setProperty('voice', 'ru') for voice in voices: if voice.name == 'Anna': tts.setProperty('voice', voice.id) def record_volume(): r = sr.Recognizer() with sr.Microphone(device_index = 1) as source: print('Настраиваюсь.') r.adjust_for_ambient_noise(source, duration=1) print('Слушаю. ') audio = r.listen(source) print('Услышала.') try: query = r.recognize_google(audio, language = 'ru-RU') text = query.lower() print(f'Вы сказали: ') textMessage( text ) except: print('Ошибка распознавания.') def talk( text ): tts.say( text ) tts.runAndWait() def textMessage( text ): request = apiai.ApiAI('ваш токен').text_request() # Токен API к Dialogflow request.lang = 'ru' # На каком языке будет послан запрос request.session_id = 'ваш id' # ID Сессии диалога (нужно, чтобы потом учить бота) request.query = text # Посылаем запрос к ИИ с сообщением от юзера responseJson = json.loads(request.getresponse().read().decode('utf-8')) response = responseJson['result']['fulfillment']['speech'] # Разбираем JSON и вытаскиваем ответ # Если есть ответ от бота - присылаем пользователю, если нет - бот его не понял if response: request.audio_output = response talk(response) else: talk('Простите. Я Вас не совсем поняла.') while True: record_volume()
На сегодня всё. В следующей части я расскажу как сделать умного бота, т.е. чтобы он мог не только отвечать, но и что-либо делать.
- голосовой ассистент
- голосовой помощник
- python
- Python
- Программирование
- Разработка под Windows
Конструктор приложений голосового помощника
Как создать приложение голосового помощника для Android и iOS
Введите название вашего приложения
Добавьте нужные функции в приложение голосового помощника
Запуск в Play Store и App Store
No-Code конструктор приложений для разработки приложений голосового помощника
Собственный интерфейс drag-and-drop в no-code конструкторе приложений Appy Pie позволит вам создать лучшее приложение голосового помощника для ваших клиентов без какого-либо кодирования. Платформа позволяет создать приложение голосового помощника, которое ваши клиенты смогут использовать в качестве голосового помощника в приложении. Вы можете использовать интуитивно понятный интерфейс для создания приложений голосового помощника за считанные минуты, а затем редактировать и настраивать их по своему вкусу.
Платформа проста в использовании с довольно плавной кривой обучения и не требует абсолютно никаких знаний в области программирования. С помощью конструктора приложений с голосовым помощником Appy Pie вы можете создавать приложения со встроенным персональным голосовым помощником, который поможет пользователям организовать свой день.
Наш конструктор приложений без кода доступен по цене и не требует от вас копаться в своих сбережениях. Это значит, что вы экономите деньги, время и используете конструктор приложений Appy Pie без кода, чтобы создать приложение голосового помощника за считанные минуты.
Преимущества приложения голосового помощника
Существует множество причин, по которым вы должны рассмотреть возможность добавления голосового помощника в ваше приложение. Приложение с голосовым помощником повышает пользовательский опыт простого приложения, делая его приятным и запоминающимся. Приложение голосового помощника для iOS или Android способно повысить общую вовлеченность пользователей и уменьшить возможное разочарование, с которым они могут столкнуться при изучении приложения и его функциональности.
Простой в использовании
Чтобы воспользоваться приложением голосового помощника, достаточно произнести слово. Это означает, что больше не нужно искать телефон, набирать слова и автокоррекция не испортит результат. Оно настолько просто в использовании, что даже ребенок с базовым словарным запасом может использовать это приложение для достижения желаемых результатов. Представьте, насколько увлекательным будет приложение для детей с голосовым помощником, которым они смогут управлять?
Высокая доступность
Приложение голосового помощника позволяет вам использовать только свой голос для управления всем приложением. Это позволяет людям со слабым зрением и слабовидящим самостоятельно работать с вашим приложением. Они могут устанавливать будильники, назначать встречи, находить голосовые подсказки и практически все, что нужно сделать в течение дня.
Громкая связь
Предоставьте пользователям вашего приложения возможность работать без рук, поскольку они разговаривают с виртуальным помощником, не беря в руки телефон. Пробудите голосового помощника простой командой “Hey Siri!” или “Alexa!” или “OK Google!” и просто сообщите ему, что вы ищете. Это означает, что получить указания о том, как добраться до места назначения, можно даже во время движения, а установить напоминание – даже когда вы печатаете ответ на срочное письмо на ноутбуке.
Быстрый ответ
Приложению голосового помощника достаточно задать вопрос, чтобы пользователь ответил на него всего за несколько секунд! В наш век, когда мгновенное удовлетворение потребностей является нормой, это большая победа для любого приложения со встроенной функцией голосового помощника. Нет необходимости просматривать множество веб-страниц для получения нужной информации или нажимать одну кнопку за другой. Просто скажите это слово, и вы получите ответ!
Наслаждайтесь вместе
Находятся ли пользователи вашего приложения на работе, сидят ли дома с парой ваших друзей или на полноценном собрании, они могут использовать голосового помощника, чтобы просмотреть ваш рабочий календарь, рассказать анекдот, разрешить спор с помощью фактов или включить песню, под которую вы все в настроении! Вы работаете вместе и веселитесь вместе, поскольку приложение голосового помощника делает весь процесс плавным и беспроблемным.
Индивидуальный опыт
Голосовые помощники способны предложить персонализированный опыт каждому пользователю приложения любого типа. Некоторые из лучших приложений голосового помощника могут понимать визуальный или голосовой контекст приложения и отвечать пользователю наилучшим образом в зависимости от ситуации.
Быть доступным круглосуточно
Независимо от того, какое приложение вы создаете, удовлетворенность и удержание клиентов являются ключевыми факторами его успеха. Клиенты ожидают круглосуточной поддержки, а для ее осуществления необходимо вложить много денег и ресурсов. Конечно, можно пойти на компромисс и предложить FAQ или учебники, но это может быть обременительно для нетерпеливых пользователей приложений. Таким образом, голосовой помощник – это идеальное решение! Он не требует дополнительных инвестиций и обеспечивает развитый пользовательский опыт с круглосуточной поддержкой.
Как просто и непросто создать своего голосового помощника
Голосовой помощник – стремительно развивающийся тренд. Контакты своего голосового помощника скоро будут давать также, как раньше давали контакты секретаря или офиса. Некоторые платформы предлагают создать себе голосовых помощников самостоятельно и будто бы для этого не нужны навыки программирования.

Предыстория
У меня уже есть опыт создания голосовых роботов разного уровня сложности.
Как-то мой брат озадачился завести себе голосового помощника. Ему были названы платформы с визуальным «nocode» редактором, и казалось, что задача решена. Велико было удивление, когда брат позвонил и сказал, что там совсем ничего не понятно. «Как там может быть что-то непонятно? Там все понятно, специально же для обычных людей сделано.» — думал я. «Берешь квадратики, соединяешь стрелочками, все же просто.»
Договорились встретиться в кафе, чтобы продемонстрировать, как легко и просто за 5 минут создать себе голосового помощника уровня «привет – как дела – пока». Ну а дальше — если идея понятна, то повторяй и улучшай.

Это занимает 5 минут на привычном десктопе с большим экраном. Когда же в кафе зашли со смартфона – все совсем не так, действительно ничего не понятно.
Похоже на то, как если человек давно живет в своей квартире и хорошо в ней ориентируется, то при выключенном свете он также найдет кухню, чайник, посуду. Но если он пришел в гости первый раз, и выключили свет, то уже сложности.
Так и здесь. Хорошо, что я реально знал, где что находится, и по визуальной памяти соединил несколько квадратиков. И то с огромными усилиями, ругательствами, и минут за 40, а не легко и просто за 5.
Итак, что же у нас есть распространенного, чтобы обычный человек, непрограммист, мог «легко и просто» создать себе голосового помощника.
AimyLogic

Платформа с визуальным «безкодовым» редактором.То есть на экране есть квадратики, в них можно вносить различные данные, и соединять квадратики стрелочками.
- На большом экране все очень удобно и понятно.
- Голосового помощника уровня «привет – как дела – пока» создать действительно легко.
- Созданного помощника можно подключать ко многим провайдерам телефонии и другим каналам.
- Наличие бесплатного тарифа, регистрируешься и осваиваешься.
- Экрана смартфона явно не хватает на виджеты платформы.
- Если делать помощника посложнее, например, хотя бы просто много вопросов и много ответов, то нужно или очень большие квадратики, или много квадратиков, или добавлять считывание из базы, циклы, сравнения, а это уже относится к навыкам программирования
- Связываться с другим сервисом через http-запрос – удобно программисту, довольно непревычно непрограммисту.
- Обзвоны создаются легко, хотя обращение со списком номеров и отправление результатов диалогов себе в базу данных требует навыков программирования.
Огромный плюс: можно публиковать помощника/бота практически во все существующие каналы – телефон, telegram, Алиса и так далее.
Дальше можно погружаться в функционал платформы. Есть подключение синтеза голосов, распознавания речи, воспроизведение файлов, обучение нейронной сети и прочее, но это уже для тех, кто погрузился. Для программистов – удобно. Для непрограммистов – скорее сложно, чем легко и просто.
МТТ
Платформа с визуальным «безкодовым» редактором. Сам визуальный редактор очень похож на AimyLogic, даже особо нечего и обозревать.
Минус в том, что (возможно, но не точно) платформа предназначена для увеличения телефонного трафика МТТ со всеми соответствующими последствиями, то есть созданный помощник/бот остается в МТТ, не публикуется в другие каналы, никуда не переносится, и для начала работы нужно внести аванс порядка 20 000 рублей. Довольно дорого, чтобы просто человеку, не компании и не корпорации, что-то начать, попробовать, потестировать.
BotWinnik

Предельно упрощенный подход. Голосовой помощник создается в 1 клик – в telegram нужно нажать кнопку «Создать». Считается, что на этом голосовой помощник создан. Дальше предлагается перейти по индивидуальной ссылке в гугл-таблицу и там добавлять фразы возможного диалога. В одну колонку – фразы человека, в другую — фразы помощника. С помощником можно общаться по индивидуальной ссылке в интернет. Еще 1 кликом созданного помощника можно установить в Алису.
Система полностью соответствует статусу «безкодовая», так там совсем нечего программировать — нужно только добавлять фразы в гугл-таблицу.
- Все предельно просто при создании и применении.
- Используются telegram и гугл-таблица, то есть удобно и со смартфонов.
- Бесплатно.
- В общем-то пока не совсем понятно, для чего именно такой голосовой помощник нужен, хотя уже прослеживается применение – вместо операторов отвечает на простые вопросы.
Вывод
Искусственный интеллект постепенно набирает обороты, инструменты создания голосовых помощников уже создаются и развиваются.
Все движется к тому, что в самое ближайшее время мы увидим аналогию с созданием сайтов – простого голосового помощника сможет создавать любой человек, просто задавая шаблон на конструкторе и добавляя контент и функционал. И конечно, управлять таким конструктором будет возможно голосом.

- голосовой помощник
- голосовой ассистент
- конструктор
- создание
