L'assistant vocal Python le plus simple





Pour créer un assistant vocal, vous n'avez pas besoin d'avoir beaucoup de connaissances en programmation, l'essentiel est de comprendre quelles fonctionnalités il doit posséder. De nombreuses entreprises les créent sur la première ligne de communication avec le client pour plus de commodité, l'optimisation des processus de travail et la meilleure classification des appels. Cet article présente un programme qui peut devenir la base de votre propre chatbot, ou plus précisément, un assistant vocal pour la reconnaissance vocale et l'exécution ultérieure des commandes. Avec son aide, nous pourrons comprendre comment fonctionnent les assistants vocaux les plus fréquemment utilisés.



Tout d'abord, déclarons les bibliothèques dont nous avons besoin:



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


N'oublions pas non plus de conserver un fichier journal, dont nous aurons besoin si nous décidons néanmoins d'améliorer le bot pour travailler avec un réseau de neurones. De nombreuses entreprises utilisent un réseau de neurones dans leurs assistants vocaux pour comprendre et répondre aux émotions des clients.



N'oubliez pas non plus qu'en analysant les logs, nous pourrons comprendre les points faibles de l'algorithme du bot et améliorer l'interaction avec les clients.



# 
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 = '!     ?'


Dans le fichier journal, nous écrivons l'heure du message, l'auteur (bot ou utilisateur) et le texte lui-même.



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


Nous affichons le premier message rédigé par le bot: Hello! Comment puis-je vous aider?



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


Et avec cette procédure dans Jupyter Notebook, nous pouvons parler via le périphérique de lecture par défaut, les mots prononcés:



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


Nous avons discuté ci-dessus de la façon d'exprimer le texte, mais comment pouvons-nous transformer notre voix en texte? Ici, la reconnaissance vocale de Google et certaines manipulations avec le microphone nous aideront.



#     
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


Que peut faire notre assistant en plus de nous écouter? Tout est limité par notre imagination! Jetons un coup d'œil à quelques exemples intéressants.



Commençons par un simple, laissez-le ouvrir le site avec la commande - il ouvrira le site (ne vous attendiez-vous pas?)



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


Parfois, il est utile d'écouter vos propres mots, mais à travers les lèvres de quelqu'un d'autre. Que le bot puisse toujours répéter après nous:



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


Qu'il soit également un interlocuteur, mais pour l'instant, nous ne commencerons qu'avec une connaissance:



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


Nous pouvons également demander à l'assistant vocal de nommer un nombre aléatoire dans les limites que nous avons choisies dans le format: Nommez un nombre aléatoire de (1er numéro) à (2ème numéro).



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


Pour terminer le programme, il vous suffit de dire au revoir au 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()


Et pour que tout fonctionne en continu, nous créons une boucle sans fin.



#   
while True:
    makeSomething(command())


Conduisons un dialogue de test:







dans le dossier de session créé, tous les fichiers d'enregistrement audio de notre voix et un fichier journal texte sont stockés:







Le fichier journal texte est écrit:







dans cet article, nous avons examiné le bot vocal le plus simple et la principale fonctionnalité utile pour le travail ultérieur du bot avec un réseau neuronal. Pour analyser la qualité de l'assistance fournie et poursuivre les travaux d'amélioration, nous pourrons consulter le fichier journal.



Ce bot peut être la base de votre propre Jarvis!



All Articles