Русский
Русский
English
Статистика
Реклама

Простейший голосовой помощник на Python



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

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

import speech_recognition as srimport osimport sysimport webbrowserimport pyttsx3 as pfrom datetime import datetimeimport timeimport datetimeimport random

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

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

#Создаем логchat_log = [['SESSION_ID', 'DATE', 'AUTHOR', 'TEXT', 'AUDIO_NUM']]#Узнаем номер сессииi = 1exit = 0while exit == 0:    session_id = str(i)    if session_id not in os.listdir():        os.mkdir(session_id)        exit = 1    else:        i = i + 1#Первое сообщение пишет botauthor = '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 мы можем озвучить через устройство воспроизведения, настроенное по умолчанию, сказанные слова:

#Произношение wordsdef 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())

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



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



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



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

Этот бот может стать основой для вашего собственного Джарвиса!
Источник: habr.com
К списку статей
Опубликовано: 02.10.2020 14:18:50
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Python

Машинное обучение

Голосовой помощник

Бот

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru