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())

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

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

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

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

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

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

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

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

88
Начать дискуссию