[Python] Простейший голосовой помощник на Python
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Для создания голосового помощника не нужно обладать большими знаниями в программировании, главное понимать каким функционалом он должен владеть. Многие компании создают их на первой линии связи с клиентом для удобства, оптимизации рабочих процессов и наилучшей классификации звонков. В данной статье представлена программа, которая может стать основой для Вашего собственного чат-бота, а если точнее – голосового помощника для распознавания голоса и последующего выполнения команд. С ее помощью мы сможем понять принцип работы наиболее часто встречаемых голосовых помощников.
Для начала объявим необходимые нам библиотеки:
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())
Проведем тестовый диалог:
В созданной папке-сессии хранятся все файлы-аудиозаписи нашего голоса и текстовый лог-файл:
В текстовый лог-файл записывается:
В данной статье мы рассмотрели простейшего голосового бота и основной полезный функционал для дальнейшей работы бота с нейронной сетью. Для анализа качества оказанной помощи и дальнейшей работы по улучшению мы сможем проверять лог файл.
Этот бот может стать основой для вашего собственного Джарвиса!
===========
Источник:
habr.com
===========
Похожие новости:
- [Интерфейсы, Usability, Управление продуктом, Дизайн] Каждый дизайнер желает знать… какая память бывает и в чем ее несовершенство (перевод)
- [Обработка изображений, Социальные сети и сообщества, Фототехника] Google отключит фотофильтры по умолчанию в смартфонах. Есть версия, что «улучшатели» приводят к самоубийствам у девочек
- [Программирование, Проектирование и рефакторинг, Управление проектами] Что такое SDLC? Этапы, методология и процессы жизненного цикла программного обеспечения (перевод)
- [API, MySQL, PHP, PostgreSQL, Разработка под Linux] Создание современного API на PHP в 2020 году
- [Производство и разработка электроники, Периферия, Физика, Звук] Аудиофилькина грамота: о частотном диапазоне, возрасте, виниле и АЧХ тарелок Pink Floyd
- [Программирование, Анализ и проектирование систем, IT-инфраструктура, Управление разработкой] История архитектуры Dodo IS: ранний монолит
- [Тестирование IT-систем, Python, Тестирование веб-сервисов] Robot Framework vs Pytest
- [Разработка мобильных приложений, Разработка под Windows, Разработка под Windows Phone] Microsoft добавит эмуляцию 64-битных приложений на Windows 10 для ARM-систем
- [Беспроводные технологии, Интернет вещей, Разработка для интернета вещей, Сотовая связь, Стандарты связи] NB-IoT. Non-IP Data Delivery или просто NIDD. Тестирование с коммерческим сервисом МТС
- [Управление разработкой, Agile, Тестирование IT-систем, Промышленное программирование] Монолог тимлида об использовании Agile-манифеста при промышленной разработке программных продуктов
Теги для поиска: #_python, #_python, #_golosovoj_pomoschnik (голосовой помощник), #_bot (бот), #_python
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 18:57
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Для создания голосового помощника не нужно обладать большими знаниями в программировании, главное понимать каким функционалом он должен владеть. Многие компании создают их на первой линии связи с клиентом для удобства, оптимизации рабочих процессов и наилучшей классификации звонков. В данной статье представлена программа, которая может стать основой для Вашего собственного чат-бота, а если точнее – голосового помощника для распознавания голоса и последующего выполнения команд. С ее помощью мы сможем понять принцип работы наиболее часто встречаемых голосовых помощников. Для начала объявим необходимые нам библиотеки: 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()) Проведем тестовый диалог: В созданной папке-сессии хранятся все файлы-аудиозаписи нашего голоса и текстовый лог-файл: В текстовый лог-файл записывается: В данной статье мы рассмотрели простейшего голосового бота и основной полезный функционал для дальнейшей работы бота с нейронной сетью. Для анализа качества оказанной помощи и дальнейшей работы по улучшению мы сможем проверять лог файл. Этот бот может стать основой для вашего собственного Джарвиса! =========== Источник: habr.com =========== Похожие новости:
|
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 18:57
Часовой пояс: UTC + 5