Implementaci贸n
Nuestro asistente trabajar谩 de acuerdo con el siguiente principio:
- Constantemente "escucha" el micr贸fono
- Reconocer palabras en google
- 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.