El asistente de voz de Python más simple





Para crear un asistente de voz, no es necesario tener muchos conocimientos en programación, lo principal es comprender qué funcionalidad debe poseer. Muchas empresas los crean en la primera línea de comunicación con el cliente por comodidad, optimización de procesos de trabajo y la mejor clasificación de llamadas. Este artículo presenta un programa que puede convertirse en la base de su propio chatbot, o más precisamente, un asistente de voz para el reconocimiento de voz y posterior ejecución de comandos. Con su ayuda, podremos comprender cómo funcionan los asistentes de voz más utilizados.



Primero, declaremos las bibliotecas que necesitamos:



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


Además, no olvidemos mantener un archivo de registro, que necesitaremos si, no obstante, decidimos mejorar el bot para trabajar con una red neuronal. Muchas empresas utilizan una red neuronal en sus asistentes de voz para comprender y responder a las emociones de los clientes.



Además, no olvides que analizando los logs, podremos entender los puntos débiles del algoritmo del bot y mejorar la interacción con los 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 = '!     ?'


En el archivo de registro, escribimos la hora del mensaje, el autor (bot o usuario) y el texto real en sí.



#       
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])


Mostramos el primer mensaje escrito por el bot: ¡Hola! ¿Como puedo ayudarte?



#             
print("Bot: "+ text)
log_me(author, text, audio)


Y con este procedimiento en Jupyter Notebook, podemos hablar a través del dispositivo de reproducción predeterminado, las palabras habladas:



# words
def talk(words):
    engine.say(words)
    engine.runAndWait()


Hablamos anteriormente sobre cómo expresar el texto, pero ¿cómo podemos convertir nuestra voz en texto? Aquí nos ayudará el reconocimiento de voz de Google y algunas manipulaciones con el micrófono.



#     
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


¿Qué puede hacer nuestro asistente además de escucharnos? ¡Todo está limitado por nuestra imaginación! Echemos un vistazo a algunos ejemplos interesantes.



Comencemos con uno simple, déjelo que abra el sitio con el comando: abrirá el sitio (¿no lo esperaba?).



#  ,       
def makeSomething(text):
    if ' ' in text:
        print('Bot:   NewTechAudit.')
        talk('  NewTechAudit.')
        log_me('Bot','  NewTechAudit.', Null)
        webbrowser.open('https://newtechaudit.ru/')


A veces es útil escuchar tus propias palabras, pero a través de los labios de otra persona. Dejemos que el bot pueda repetir después de nosotros:



#  
    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 él también sea el interlocutor, pero por ahora comenzaremos solo con un conocido:



#  
    elif ' ' in text or '  ' in text or ' ' in text:
        print('Bot:   Bot.')
        talk('  Bot')
        log_me('Bot', '  Bot', Null)


También podemos pedirle al asistente de voz que nombre un número aleatorio dentro de los límites elegidos por nosotros en el formato: Nombrar un número aleatorio del (primer número) al (segundo 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 completar el programa, solo necesitas despedirte del 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()


Y para que todo funcione de forma continua, creamos un bucle sin fin.



#   
while True:
    makeSomething(command())


Realicemos un diálogo de prueba:







En la carpeta de sesión creada, se almacenan todos los archivos de grabación de audio de nuestra voz y un archivo de registro de texto:







El archivo de registro de texto está escrito:







En este artículo, examinamos el bot de voz más simple y la principal funcionalidad útil para el trabajo posterior del bot con una red neuronal. Para analizar la calidad de la asistencia proporcionada y seguir trabajando en la mejora, podremos consultar el archivo de registro.



¡Este bot puede ser la base de tu propio Jarvis!



All Articles