Ahora que ya tenemos la voz, necesitamos un SST (Speech to Text), o Text Recognition.
De todos los que he probado, me decanto por el de Google. El problema es que para el uso de éste, deberemos guardar en un wav lo que digamos, convertirlo a flac, y enviarlo por la api usando un navegador (menudo pitote).
Después de unas recopilaciones de aquí y de allá lo traigo ya resumido:
Grabamos con el comando "rec" el wav (Aseguraos de que el volumen de la entrada de micrófono del alsamixer está al 100%, si no le costará la vida reconocer que estamos diciendo)
rec -r 16000 -e signed-integer -b 16 -c 1 audio.wav trim 0 4
Convertimos de wav a flac:
sox audio.wav -r 16000 -b 16 -c 1 audio.flac vad reverse vad reverse lowpass -2 2500
Y ahora viene la magia... sin usar el navegador, pero usando una cabecera (simulándolo):
curl --data-binary @audio.flac --header 'Content-type: audio/x-flac; rate=16000' 'http://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang=es-ES&maxresults=1' 1>audio.txt
Almacenamos en un audio.txt lo que nos devuelve la api de Google. Podremos cambiar el idioma en lang=es-ES (por defecto puse España-Español) o si queremos que nos muestre más resultados en vez de 1 (el más acertado).
Para resumir lo que nos devuelve en una simple frase formateamos el resultado:
FILETOOBIG=`cat audio.txt | grep "<HTML>"`
TRANSCRIPT=`cat audio.txt | cut -d"," -f3 | sed 's/^.*utterance\":\"\(.*\)\"$/\1/g'`
CONFIDENCE=`cat audio.txt | cut -d"," -f4 | sed 's/^.*confidence\":0.\([0-9][0-9]\).*$/\1/g'`
Donde el Confidence (por si queremos usarlo) será el porcentaje de probabilidad de acierto en el reconocimiento, y el Transcript lo que entendió.
Ya con esto, procedemos con un simple if la prueba de que funciona:
if echo "$TRANSCRIPT" |grep -q "Hola"; then
aoss espeak -ves "$TRANSCRIPT"
elif echo "$TRANSCRIPT" |grep -q "quién eres"; then
aoss espeak -ves "Soy Yarvis, la máquina de Yuki Sekisan"
elif echo "$TRANSCRIPT" |grep -q "saluda a Alberto"; then
aoss espeak -ves "Hola Alberto, eres muy pesado, vete ya"
elif echo "$TRANSCRIPT" |grep -q "main craft"; then
aoss espeak -ves "Abriendo Maincraft" | java -Xmx1024M -Xms512M -cp /home/yuki/Escritorio/Minecraft.jar #net.minecraft.LauncherFrame
else aoss espeak -ves "No te entiendo";
aoss espeak -ves "$TRANSCRIPT"
fi
Funciona perfectamente :). Ahora el siguiente paso... Migrarlo a una Base de datos! Me he decantado por MYSQL.