Construyendo un asistente de voz en Python, parte 1

Buenas tardes. Probablemente, todos vieron pel铆culas sobre el hombre de hierro y quer铆an un asistente de voz similar a Jarvis. En esta publicaci贸n, te mostrar茅 c贸mo hacer un asistente de este tipo desde cero. Mi programa estar谩 escrito en Python 3 en el sistema operativo Windows. 隆Entonces vamos!



Implementaci贸n



Nuestro asistente trabajar谩 de acuerdo con el siguiente principio:



  1. Constantemente "escucha" el micr贸fono
  2. Reconocer palabras en google
  3. Ejecuta el comando o responde


1) S铆ntesis del habla



Primero, instalaremos voces rusas en el sistema de Windows. Para hacer esto, siga el enlace y descargue las voces en la secci贸n SAPI 5 -> Ruso. Hay 4 voces, puedes elegir la que m谩s te guste. Instalar y seguir adelante.



Necesitamos proporcionar la biblioteca pyttsx3 para la s铆ntesis de voz:



pip install pyttsx3


Luego, puede ejecutar el programa de prueba y verificar si se est谩 ejecutando correctamente.



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) Reconocimiento de voz



Existen muchas herramientas de reconocimiento de voz, pero todas son de pago. 隆As铆 que intent茅 encontrar una soluci贸n gratuita para mi proyecto y la encontr茅! Esta es la biblioteca speech_recognition.



pip install SpeechRecognition


Tambi茅n necesitamos la biblioteca PyAudio para trabajar con el micr贸fono.



pip install PyAudio


Algunas personas tienen problemas para instalar PyAudio, por lo que debe seguir este enlace y descargar la versi贸n de PyAudio que necesita. Luego ingrese a la consola:



pip instal   


Luego ejecuta el programa de prueba. Pero antes de eso, debe corregir device_index = 1 en el valor de 铆ndice de su micr贸fono. Puede averiguar el 铆ndice del micr贸fono usando este programa:



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


Prueba de reconocimiento de voz:



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 todo est谩 bien, sigue adelante.



Si desea que el asistente solo hable con usted (sin IA), puede hacerlo utilizando la herramienta gratuita DialogFlow de Google. Despu茅s de iniciar sesi贸n, ver谩 una pantalla donde ya puede crear su primer bot. Haga clic en Crear agente. Creamos un nombre para el bot (nombre del agente), seleccionamos el idioma (idioma predeterminado) y hacemos clic en Crear. 隆El bot ha sido creado!



Para agregar nuevas respuestas a diferentes preguntas, debe crear una nueva intenci贸n. Para hacer esto, en la secci贸n de intenciones, haga clic en Crear intenci贸n. Rellenamos los campos "T铆tulo" y Frases de formaci贸n, y luego las respuestas. Clic en Guardar. Eso es todo.



Para controlar un bot en Python, debe escribir el siguiente c贸digo. En mi programa, el bot da voz a todas las respuestas.



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


Eso es todo por hoy. En la siguiente parte te dir茅 c贸mo hacer un bot inteligente, es decir para que no solo pueda responder, sino tambi茅n hacer algo.



All Articles