Javierd
Posts: 8
Joined: Wed Mar 25, 2015 4:24 pm
Contact: Website

Asistente Virtual

Wed Mar 25, 2015 4:50 pm

Buenas, estoy empezando con python y creando un asistente virtual en español.
Dado que no hay ningún asistente virtual/personal para la raspberry pi (pero que funcionaría en cualquier distro de linux, e incluso en otros SO) que me convenza, y mucho menos en español, estoy creando uno propio basado en el idioma español pero que estará también disponible en ingles, y que publicaré tanto el hardware como todo el software en una fecha límite que es el día 30 de abril.
Estoy empezando con python como ya he dicho, y ya tengo tda la estructura del programa. Es capaz de estar siempre escuchando y reaccionar al decir un nombre personalizable, reproducir canciones aletorias, proporcionar información de cualquier personaje, cualquier definición, hacer cualquier operación matemática, contar chistes, y estoy preparando un módulo para que funcione de traductor además de otros varios para twitter etc.
Sin embargo tengo un pequeño problema con el reconocimiento de voz, así que si alguien con conocimientos en este lenguaje pudiese ayudarme se lo agradecería muchísimo.
PD: Necesito también más chistes cortos y sencillos xD

raspdroid
Posts: 1603
Joined: Thu Nov 06, 2014 9:15 am
Location: Gran Canaria :: España

Re: Asistente Virtual

Thu Mar 26, 2015 8:40 am

Hola tocayo,

Puedes probar Jasper.

Hay dos STT que pueden funcionar off-line, PocketSphinx (una versión light para Raspi de CMUsphinx) y Julius, yo he intentado instalar PocketSphinx y no he podido pasar de la instalación de SphinxBase (creo que tengo un problemilla de dependencias). Julius si que lo he podido instalar sin problemas , está escrito en C y es posible comunicarse con Java vía XML (supongo que con Python también a no ser que haya otra manera mejor de hacerlo).

Saludos

SeeN
Posts: 65
Joined: Sun Aug 05, 2012 6:34 pm

Re: Asistente Virtual

Thu Mar 26, 2015 12:34 pm

Hola, para esto estoy utilizando http://www.google.com/speech-api/ , funciona bastante bien, con arecord grabo el audio y con wget lo subes, luego recoges el resultado.

raspdroid
Posts: 1603
Joined: Thu Nov 06, 2014 9:15 am
Location: Gran Canaria :: España

Re: Asistente Virtual

Thu Mar 26, 2015 3:57 pm

Cierto si va a usar Twitter usará internet por lo que el de google, at&t, etc. le pueden servir.

Aquí hay una explicación que te puede interesar:
http://jasperproject.github.io/document ... ation/#stt

Javierd
Posts: 8
Joined: Wed Mar 25, 2015 4:24 pm
Contact: Website

Re: Asistente Virtual

Fri Mar 27, 2015 8:56 am

Sí, he visto lo de jasper pero no está en español, y el mío tiene diversas cosas que jasper no tiene. Actualmente utilizo el reconocimiento de voz de Google, que es el más preciso el problema es que no sé como hacer para que funcione igual de bien que el de jasper, que usa jasper para que esté siempre escuchando y sea tan rápido reconociendo el nombre.
Yo estoy usando unas librerías de python : https://pypi.python.org/pypi/SpeechRecognition/
Pero por algún motivo fallan bastante, luego desde el pc OS enseño el código que tengo usando esas librerías a ver si alguno me puede ayudar a hacer uno similar o directamente a conseguir el de jasper, porque por mucho que he buscado no sé donde está y como lo puedo implementar en él mío, y es lo único que me queda.

Javierd
Posts: 8
Joined: Wed Mar 25, 2015 4:24 pm
Contact: Website

Re: Asistente Virtual

Fri Mar 27, 2015 10:02 am

vale, este es todo el código del reconocimiento de voz, uso pygame para reproducir sonidos y hay dos funciones, una para que reconozca el nombre, sin ningún sonido, y otra para que reconozca el resto de los comandos, que ya si que tiene sonido. Por otro lado hay una función que elimina las tildes para evitar problemas con python.

Code: Select all

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
import pyaudio
import speech_recognition as sr
import pygame
import unicodedata

def play(file): #PLAY A SOUND
    pygame.mixer.music.load(file)
    pygame.mixer.music.play()
    while pygame.mixer.music.get_busy() == True:
        continue

def remove_tildes(s):
   # Remove spanish tildes so there won't be errors with ascii
   return ''.join([
       c for c in unicodedata.normalize('NFD', s or u'')
       if unicodedata.category(c) != 'Mn'])



def name(): #JUST TO RECOGNISE THE NAME
    r = sr.Recognizer(language = "es-ES", key = "AIzaSyBOti4mM-6x9WDnZIjIeyEU21OpBXqWBgw")
    with sr.Microphone() as source:
        audio = r.listen(source)
    try:
        print r.recognize(audio)
        return r.recognize(audio)
    except LookupError:
    	print("Could not understand audio")
    	name() #It starts again so it should recognize the name

def stt(): #SPEECH TO TEXT
    r = sr.Recognizer(language = "es-ES", key = "AIzaSyBOti4mM-6x9WDnZIjIeyEU21OpBXqWBgw")
    with sr.Microphone() as source:
        audio = r.listen(source)
    try:
        return remove_tildes(r.recognize(audio))
        play("./sounds/recognized.wav")
    except LookupError:
        play("./sounds/error.wav")
        stt()

raspdroid
Posts: 1603
Joined: Thu Nov 06, 2014 9:15 am
Location: Gran Canaria :: España

Re: Asistente Virtual

Fri Mar 27, 2015 12:02 pm

En eso no te puedo ayudar yo estoy usando Java, esta librería https://github.com/cmusphinx/sphinx4.

http://cmusphinx.sourceforge.net/

También puedes usar pocketSphinx con Python http://cmusphinx.sourceforge.net/2014/0 ... g-example/
https://mattze96.safe-ws.de/blog/?p=640

Javierd
Posts: 8
Joined: Wed Mar 25, 2015 4:24 pm
Contact: Website

Re: Asistente Virtual

Sat Mar 28, 2015 1:18 pm

raspdroid wrote:Hola tocayo,

Puedes probar Jasper.

Hay dos STT que pueden funcionar off-line, PocketSphinx (una versión light para Raspi de CMUsphinx) y Julius, yo he intentado instalar PocketSphinx y no he podido pasar de la instalación de SphinxBase (creo que tengo un problemilla de dependencias). Julius si que lo he podido instalar sin problemas , está escrito en C y es posible comunicarse con Java vía XML (supongo que con Python también a no ser que haya otra manera mejor de hacerlo).

Saludos
Puesto que no consigo mejorar el reconocimiento de voz, creo que me voy a basar en jasper y a partir de ahí crear módulos que quiero. Como puedo configurar jasper en español??

raspdroid
Posts: 1603
Joined: Thu Nov 06, 2014 9:15 am
Location: Gran Canaria :: España

Re: Asistente Virtual

Sat Mar 28, 2015 3:49 pm

Tienes que crear tu modelo de lenguaje y diccionario y modelo acústico aunque este último es posible adaptar el del inglés. Hay un modelo de voxforge en español, yo lo voy a probar, en inglés me funciona bien, pero con un tts on-line con mi inglés ni lo reconoce http://www.readspeaker.com/voice-demo/

http://cmusphinx.sourceforge.net/wiki/tutorial

raspdroid
Posts: 1603
Joined: Thu Nov 06, 2014 9:15 am
Location: Gran Canaria :: España

Re: Asistente Virtual

Sun Mar 29, 2015 9:03 am

Este es el ejemplo Dialog de Sphinx4

https://drive.google.com/file/d/0Bz3s-4 ... sp=sharing

Para ejecutarlo simplemente -> java -jar dialogdemo-0.0.1-SNAPSHOT-jar-with-dependencies.jar

Para probar utilizo este tts http://text-to-speech.imtranslator.net/speech.asp

Lo que en la Raspberry va muy lento. Uso clase 4, supongo que para este tipo de aplicaciones sea mucho mejor clase 10 pero no sé si eso resolverá el problema. El overclock lo tengo en Turbo (en la Pi B+) y el memory split a 128.

Con -Xms256M -Xmx512M noto que va algo más rápido pero algo justo.

raspdroid
Posts: 1603
Joined: Thu Nov 06, 2014 9:15 am
Location: Gran Canaria :: España

Re: Asistente Virtual

Sun Mar 29, 2015 6:52 pm

No había visto este artículo ahi explican ls diferencia entre sphinx4 y pocketsphinx http://cmusphinx.sourceforge.net/wiki/t ... eforestart

raspdroid
Posts: 1603
Joined: Thu Nov 06, 2014 9:15 am
Location: Gran Canaria :: España

Re: Asistente Virtual

Mon Mar 30, 2015 8:42 pm

Hola,

¿Cómo lo llevas?, Creé un hilo nuevo sobre PocketSphinx y Raspberry Pi, si tienes problemas con el inglés con la instalación o algo te echo una mano por ahí. (no es que sea experto en ninguna de las dos cosas pero me difiendo un poco).

Las dependencias que me faltaban eran bison y los headers de alsa libsound2-dev, al parecer hay que instalarlas antes de compilar sphinxbase. También hay que tener en cuenta de no tener instalado pulseaudio.

Javierd
Posts: 8
Joined: Wed Mar 25, 2015 4:24 pm
Contact: Website

Re: Asistente Virtual

Mon Apr 06, 2015 7:33 am

De momento sigo con el mio que es bastanta mas sencillo que Jasper. Os pongo un video del otro dia. Decir que todo lo de las tildes esta solucionado. Asistente Personal Código abierto: http://youtu.be/ltFSfjpz9ik

raspdroid
Posts: 1603
Joined: Thu Nov 06, 2014 9:15 am
Location: Gran Canaria :: España

Re: Asistente Virtual

Mon Apr 06, 2015 8:49 am

Yo tampoco he usado Jasper aún. Estoy usando PocketSphinx y MaryTTS. Con PocketSphinx estoy usando Java pero puedes usar Python, hay un ejemplo para cada lenguaje dentro de la carpeta swig. Solo hay que compilar con make y listo, eso sí hay que compilar con el mismo jdk que usa la Pi (en el caso de java claro).

Como te decía y como comentas en el vídeo el trabajo duro es el modelo de lenguaje, yo estoy usando el de voxforge-es, creo que te puede servir también para tu app en python. Yo lo que hice fue una adaptación con mis grabaciones porque además del problema del ididoma en-us en es-es tengo el problema del acento porque el del español penínsular es diferente al canario, y para mejorar la presición le hice una adaptación y unos test los cuales me dieron 100% de accuracy, ahora tengo que hacer lo mismo pero con la voces a través de una emisora VHF. Para las grabaciones uso un samprate de 16kHz y 16bits (con 32bits me daba problemas) y mono (1 canal).

Para el tts en español con MaryTTS lo puedes hacer.

Este es un proyecto similar al que está haciendo desarrollado en Java utilizando Pocketsphinx y Marytts. https://sites.google.com/site/ilavoiceassistant/home

Saludos

User avatar
hiddenotebook
Posts: 68
Joined: Fri Oct 02, 2015 7:52 pm
Contact: Website

Re: Asistente Virtual

Thu Oct 15, 2015 6:31 pm

Javierd wrote:De momento sigo con el mio que es bastanta mas sencillo que Jasper. Os pongo un video del otro dia. Decir que todo lo de las tildes esta solucionado. Asistente Personal Código abierto: http://youtu.be/ltFSfjpz9ik
Hola compañero he visto el vídeo y mencionas que no sabes poner las voces por defecto en festival de la junta de Andalucia.

Comparto lo poco que se, para poner una voz por defecto en festival seria editando el archivo:

Code: Select all

sudo nano /etc/festival.scm
Y se añade esta linea para la voz de Silvia.

Code: Select all

(set! voice_default 'voice_JuntaDeAndalucia_es_sf_diphone)
instalar la voz de silvia y su descarga. Ojo esto edita por si mismo el archivo festival.scm y añade la linea que te comento para que no tengas que editarlo a mano.

Code: Select all

wget http://forja.guadalinex.org/frs/download.php/154/festvox-sflpc16k_1.0-1_all.deb
dpkg -i festvox-sflpc16k_1.0-1_all.deb
Para que coja los acentos y signos de puntuación podemos usar.

Code: Select all

echo Me compraría un camión y me iría a Maón | iconv -f utf-8 -t iso-8859-1|festival --tts
Espero que te ayude esto con tu proyecto pinta muy bien yo quiero usar julius y festival orientado a reconocimiento de voz para un robot aquí deje un manual de festival por si quieres verlo.

Un saludo y suerte con el proyecto.

por cierto ayer mismo vi un vídeo sobre algo parecido te dejo el enlace https://www.youtube.com/watch?v=6NHklmXMouY

Si puedo ayudar en algo mas no dudes en preguntar.

Yo estoy empezando con mi proyecto y no tengo claros algunos conceptos, como cual es la mejor opción para capturar voz offline y eso que has hecho de preguntar y que busque las respuestas en la web esta muy bien compañero te felicito creo que podemos ayudarnos si te parece bien.

jdavidguerrero
Posts: 4
Joined: Sat Nov 28, 2015 3:13 pm

Re: Asistente Virtual

Fri Dec 04, 2015 9:32 pm

Buen dia muchachos, me gustaria crear mi propio asistente virtual, no se si me pudiesen ayudar con los primeros pasos o cuales son los contenidos como he leido son los tts y esas cosas, gracias

saludos!!! :) :)

User avatar
hiddenotebook
Posts: 68
Joined: Fri Oct 02, 2015 7:52 pm
Contact: Website

Re: Asistente Virtual

Sat Aug 27, 2016 9:44 am

Si a mi también me gustaria crear un grupo o un hilo y trabajar en ello entre todos porque a quien no le gustaria manejar todo con la voz.

Return to “Español”