Простейший голосовой помощник на 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())

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

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

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

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

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

ссылка на оригинал статьи https://habr.com/ru/post/521742/


Комментарии

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *