O assistente de voz Python mais simples





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!



All Articles