Construire un assistant vocal en Python, partie 1

Bonne après-midi. Tout le monde a probablement regardé des films sur l'homme de fer et voulait un assistant vocal comme Jarvis. Dans cet article, je vais vous montrer comment créer un tel assistant à partir de zéro. Mon programme sera écrit en python 3 sur le système d'exploitation Windows. Alors allons-y!



Mise en œuvre



Notre assistant travaillera selon le principe suivant:



  1. «Écoutez» constamment le microphone
  2. Reconnaître les mots sur Google
  3. Exécutez la commande ou répondez


1) Synthèse de la parole



Tout d'abord, nous installerons des voix russes dans le système Windows. Pour ce faire, suivez le lien et téléchargez les voix dans la section SAPI 5 -> Russe. Il y a 4 voix, vous pouvez choisir celle que vous aimez. Installez et continuez.



Nous devons fournir la bibliothèque pyttsx3 pour la synthèse vocale:



pip install pyttsx3


Ensuite, vous pouvez exécuter le programme de test et vérifier s'il fonctionne correctement.



import pyttsx3

text = '- '
tts = pyttsx3.init()
rate = tts.getProperty('rate') # 
tts.setProperty('rate', rate-40)

volume = tts.getProperty('volume') # 
tts.setProperty('volume', volume+0.9)

voices = tts.getProperty('voices')

#    
tts.setProperty('voice', 'ru') 

#    
for voice in voices:
    if voice.name == 'Anna':
        tts.setProperty('voice', voice.id)

tts.say(text)
tts.runAndWait()


2) Reconnaissance vocale



Il existe de nombreux outils de reconnaissance vocale, mais ils sont tous payants. J'ai donc essayé de trouver une solution gratuite pour mon projet et je l'ai trouvée! Il s'agit de la bibliothèque speech_recognition.



pip install SpeechRecognition


Nous avons également besoin de la bibliothèque PyAudio pour fonctionner avec le microphone.



pip install PyAudio


Certaines personnes ont un problème pour installer PyAudio, vous devez donc suivre ce lien et télécharger la version de PyAudio dont vous avez besoin. Entrez ensuite dans la console:



pip instal   


Ensuite, vous exécutez le programme de test. Mais avant cela, vous devez corriger device_index = 1 avec la valeur d'index de votre microphone. Vous pouvez trouver l'index du microphone en utilisant ce programme:



import speech_recognition as sr
for index, name in enumerate(sr.Microphone.list_microphone_names()):
    print("Microphone with name \"{1}\" found for `Microphone(device_index={0})`".format(index, name))


Test de reconnaissance vocale:



import speech_recognition as sr

def record_volume():
    r = sr.Recognizer()
    with sr.Microphone(device_index = 1) as source:
        print('.')
        r.adjust_for_ambient_noise(source, duration=0.5) #  
        print('...')
        audio = r.listen(source)
    print('.')
    try:
        query = r.recognize_google(audio, language = 'ru-RU')
        text = query.lower()
        print(f' : {query.lower()}')
    except:
        print('Error')

while True:
    record_volume()


Si tout va bien, passez à autre chose.



Si vous voulez que l'assistant vous parle simplement (pas d'IA), cela peut être fait à l'aide de l'outil gratuit DialogFlow de Google. Après vous être connecté, vous verrez un écran où vous pouvez déjà créer votre premier bot. Cliquez sur Créer un agent. Nous proposons un nom pour le bot (nom de l'agent), sélectionnez la langue (langue par défaut) et cliquez sur Créer. Le bot a été créé!



Pour ajouter de nouvelles réponses à différentes questions, vous devez créer un nouvel intent. Pour ce faire, dans la section Intents, cliquez sur Créer un intent. Nous remplissons les champs "Titre" et Phrases de formation, puis les réponses. Cliquez sur Enregistrer. C'est tout.



Pour contrôler un bot en python, vous devez écrire le code suivant. Dans mon programme, le bot exprime toutes les réponses.



import apiai, json, re
import pyttsx3
import speech_recognition as sr

tts = pyttsx3.init()
rate = tts.getProperty('rate')
tts.setProperty('rate', rate-40)
volume = tts.getProperty('volume')
tts.setProperty('volume', volume+0.9)
voices = tts.getProperty('voices')
tts.setProperty('voice', 'ru')
for voice in voices:
    if voice.name == 'Anna':
        tts.setProperty('voice', voice.id)

def record_volume():
    r = sr.Recognizer()
    with sr.Microphone(device_index = 1) as source:
        print('.')
        r.adjust_for_ambient_noise(source, duration=1) 
        print('...')
        audio = r.listen(source)
    print('.')
    try:
        query = r.recognize_google(audio, language = 'ru-RU')
        text = query.lower()
        print(f' : {query.lower()}')
        textMessage( text )
    except:
        print(' .')

def talk( text ):
    tts.say( text )
    tts.runAndWait()

def textMessage( text ):
    request = apiai.ApiAI(' ').text_request() #  API  Dialogflow
    request.lang = 'ru' #      
    request.session_id = ' id' # ID   (,    )
    request.query = text #        
    responseJson = json.loads(request.getresponse().read().decode('utf-8'))
    response = responseJson['result']['fulfillment']['speech'] #  JSON   
    #      -  ,   -    
    if response:
        request.audio_output = response
        talk(response)
    else:
        talk('.     .')

while True:
    record_volume()


C'est tout pour aujourd'hui. Dans la partie suivante, je vais vous dire comment créer un robot intelligent, c'est-à-dire afin qu'il puisse non seulement répondre, mais aussi faire quelque chose.



All Articles