Mise en œuvre
Notre assistant travaillera selon le principe suivant:
- «Écoutez» constamment le microphone
- Reconnaître les mots sur Google
- 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.