
Para criar um assistente de voz, você não precisa ter muito conhecimento em programação, o principal é entender quais funcionalidades ele deve possuir. Muitas empresas os criam na primeira linha de comunicação com o cliente por conveniência, otimização do fluxo de trabalho e a melhor classificação de chamadas. Este artigo apresenta um programa que pode se tornar a base para seu próprio chatbot ou, mais precisamente, um assistente de voz para reconhecimento de voz e posterior execução de comandos. Com sua ajuda, poderemos entender o princípio de funcionamento dos assistentes de voz mais comuns.
Primeiro, vamos declarar as bibliotecas de que precisamos:
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
Além disso, não nos esqueçamos de manter um arquivo de log, do qual precisaremos se, entretanto, decidirmos melhorar o bot para trabalhar com uma rede neural. Muitas empresas usam uma rede neural em seus assistentes de voz para entender e responder às emoções do cliente.
Além disso, não se esqueça que ao analisar os logs, poderemos entender os pontos fracos do algoritmo do bot e melhorar a interação com os clientes.
#
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 = '! ?'
No arquivo de log, escrevemos a hora da mensagem, o autor (bot ou usuário) e o próprio texto.
#
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])
Exibimos a primeira mensagem de autoria do bot: Hello! Como posso ajudá-lo?
#
print("Bot: "+ text)
log_me(author, text, audio)
E usando este procedimento no Jupyter Notebook, podemos falar através do dispositivo de reprodução padrão, palavras faladas:
# words
def talk(words):
engine.say(words)
engine.runAndWait()
Discutimos acima como dar voz ao texto, mas como podemos transformar nossa voz em texto? Aqui o reconhecimento de fala do Google e algumas manipulações com o microfone nos ajudarão.
#
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
O que nosso assistente pode fazer além de nos ouvir? Tudo é limitado pela nossa imaginação! Vamos dar uma olhada em alguns exemplos interessantes.
Vamos começar com um simples, deixe-o abrir o site com o comando - ele vai abrir o site (não esperava?).
# ,
def makeSomething(text):
if ' ' in text:
print('Bot: NewTechAudit.')
talk(' NewTechAudit.')
log_me('Bot',' NewTechAudit.', Null)
webbrowser.open('https://newtechaudit.ru/')
Às vezes é útil ouvir suas próprias palavras, mas através dos lábios de outra pessoa. Deixe o bot ainda ser capaz de repetir depois de nós:
#
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)
Que ele também seja um interlocutor, mas por enquanto vamos começar apenas por um conhecido:
#
elif ' ' in text or ' ' in text or ' ' in text:
print('Bot: Bot.')
talk(' Bot')
log_me('Bot', ' Bot', Null)
Também podemos pedir ao assistente de voz para nomear um número aleatório dentro dos limites escolhidos por nós no formato: Nomeie um número aleatório de (1º número) a (2º número).
#
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)
Para concluir o programa, você só precisa dizer adeus ao bot:
#
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()
E para fazer tudo funcionar continuamente, criamos um loop infinito.
#
while True:
makeSomething(command())
Vamos conduzir um diálogo de teste:

Na pasta de sessão criada, todos os arquivos de gravação de áudio de nossa voz e um arquivo de registro de texto são armazenados:

O arquivo de registro de texto é escrito:

neste artigo, examinamos o bot de voz mais simples e a principal funcionalidade útil para o trabalho posterior do bot com uma rede neural. Para analisar a qualidade do atendimento prestado e dar continuidade aos trabalhos de melhoria, poderemos consultar o arquivo de log.
Este bot pode ser a base para o seu próprio Jarvis!