Конкурс инструкций
Разработка
NTA
466

Python: как создать простейшего голосового помощника?

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

В закладки

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

Для начала объявим необходимые нам библиотеки:

#Необходимые библиотеки 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())

Проведем тестовый диалог:

В созданной папке-сессии хранятся все файлы-аудиозаписи нашего голоса и текстовый лог-файл:

В текстовый лог-файл записывается:

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

Этот бот может стать основой для вашего собственного Джарвиса!

Лайфхаки IT, проверенные решения для стандартных задач
{ "author_name": "NTA", "author_type": "editor", "tags": ["\u0443\u0437\u043d\u0430\u0435\u043c","\u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435","\u0442\u0443\u0442","\u0441\u043e\u0437\u0434\u0430\u0435\u043c","\u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u0438\u0435","\u043f\u0440\u043e\u0438\u0437\u043d\u043e\u0448\u0435\u043d\u0438\u0435","\u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u0435","\u043f\u0435\u0440\u0432\u043e\u0435","\u043e\u0442\u0432\u0435\u0442","\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435","\u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435","\u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f","\u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c","\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430","\u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435","\u0435\u0441\u043b\u0438","\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c","\u0432\u044b\u0432\u043e\u0434","\u0431\u043e\u0442","\u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439","selectel_\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f"], "comments": 0, "likes": 4, "favorites": 20, "is_advertisement": false, "subsite_label": "dev", "id": 158797, "is_wide": true, "is_ugc": false, "date": "Wed, 16 Sep 2020 11:29:44 +0300", "is_special": false }
Объявление на vc.ru
0
Комментариев нет
Популярные
По порядку

Комментарии

null