En primer lugar, necesitamos instalar PocketSphinx en Raspberry Pi para hacer el reconocimiento de voz. Estoy usando una cámara USB estándar con micrófono (compatible con Raspberry Pi) y sigo las instrucciones disponibles aquí: Reconocimiento de voz con Raspberry Pi: observación. En esencia, esto es lo que he hecho (como root en la Raspberry Pi), consulte el enlace de arriba para obtener detalles adicionales: apt-get install rpi-update apt-get install git-core rpi-update -> Conecte su USB micrófono (o cámara + micrófono) y -> reinicie el RPi en este punto vi /etc/modprobe.d/alsa-base.conf # cambie de la siguiente manera: # Comente esta línea # opciones snd-usb-audio index = -2 # y agregue lo siguiente: opciones snd-usb-audio index = 0 -> cierre el archivo y vuelva a cargar alsa: alsa force-reload
Página wget en sourceforge.net0.8 / sphinxbase-0.8.tar.gz / download
mv download sphinxbase-0.8.tar.gz wget Página en sourceforge.netpocketsphinx / 0.8 / pocketsphinx-0.8.tar.gz / download mv download pocketsphinx-0.8.tar.gz tar -xzvf sphinxbase-0.8.tar.gz tar -xzvf pocketsphinx -0.8.tar.gz apt-get install bison apt-get install libasound2-dev cd sphinxbase-0.8 ./configure –enable-fixed make make install cd ../pocketsphinx-0.8/ ./configure make sudo make install
- ¿Está bien construir un proyecto a nivel comercial / industrial con Arduino o Raspberry Pi? ¿Cuáles son los problemas?
- ¿Cómo se puede desarrollar un producto basado en Beagleboard si el costo por AM3359 IC es mayor de $ 47?
- ¿Por qué es bueno aprender a programar en Raspberry Pi en comparación con una computadora normal?
- ¿Qué lenguaje de programación sería mejor para enseñar a los adolescentes a través de Raspberry Pi - Python o Java?
- ¿Puedo ajustar una consola Speedo de KTM Duke 200 con Raspberry Pi?
ahora está listo para probar su instalación de PocketSphinx. Vaya a pocketsphinx-0.8 / src / programs y ejecute:
./pocketsphinx_continuous
Si tiene suerte, debería recibir un mensaje de texto … No tengo espacio aquí (y tiempo) para entrar en los detalles de la esfinge (de bolsillo). Pruebe algunas palabras simples y vea si son reconocidas. Terminé construyendo un modelo de lenguaje muy simple usando la herramienta en línea en este enlace: Sphinx Knowledge Base Tool VERSIÓN 3. Utilizo solo “verde”, “rojo” y “apagado” y parecen funcionar bien a pesar de mi acento italiano
En el siguiente paso, necesitamos conectar la salida de PocketSphinx con Racket. Hago esto de una manera muy primitiva:
Modifico el código fuente de pocketsphinx_continous para generar solo la palabra que se reconoce. Esto es muy simple: simplemente modifique continous.c en pocketsphinx-0.8 / src / programas, comente toda la declaración printf y envíe solo la palabra reconocida (envíeme un correo electrónico si no sabe cómo hacerlo). Agrego una cadena “RACKET:” al comienzo de la cadena impresa para asegurarme de que esto es algo que he generado. Luego puede ejecutar pocketsphinx y redirigir la salida a un archivo con algo como:
./pocketsphinx_continuous -lm /home/pi/sphinx/simple/4867.lm \ -dict /home/pi/sphinx/simple/4867.dic> /tmp/capture.txt
(observe que estoy usando el modelo de idioma + diccionario generado en línea)
Es hora de volver a Racket. Supongo que sabe cómo conectar una Raspberry Pi con una placa Arduino y hablar con Racket usando Firmata (si este no es el caso, consulte las instrucciones disponibles en Raspberry Pi, Arduino y Firmata). En el siguiente archivo Racket, simplemente leo el archivo /tmp/capture.txt y envío instrucciones a la pizarra de acuerdo con las instrucciones recibidas. Si no se reconoce un comando, imprimo un mensaje en la pantalla. El código para esto es el siguiente:
#lang racket (requiere “firmata.rkt”) (define verde 12) (define rojo 13) (define en (open-input-file “/tmp/capture.txt”)) (define (process-input str) (printf “procesamiento de entrada ~ a \ n ” str) (set! str (substring str 8)) (cond ((string =? (string-upcase str) “RED”) (printf “Estoy configurando rojo \ n “) ( set-arduino-pin! red)) ((string =? (string-upcase str) “GREEN”) (printf “Estoy configurando green \ n “) (set-arduino-pin! green)) ((string = ? (string-upcase str) “OFF”) (printf “Estoy borrando los PIN \ n “) (clear-arduino-pin! rojo) (clear-arduino-pin! green)) (más (printf “Lo siento, no puede entender: ~ a \ n “str) (salida de descarga)))) (define (read-loop) (define str (read-line in)) (a menos que (eof-object? str) (process-input str) ) (read-loop)) (define (start-everything) (open-firmata “/ dev / ttyACM0”) (set-pin-mode! green OUTPUT_MODE) (set-pin-mode! rojo OUTPUT_MODE) (read-loop)) (inicio-todo)
Trabajo hecho. Ahora verifique eso:
- La versión modificada de pocketsphinx_continuous se está ejecutando y redirigiendo la salida a /tmp/capture.txt
- Inicie el archivo de arriba con algo como raqueta sphinx-arduino.rkt
- Compruebe que su placa Arduino esté conectada y cableada adecuadamente
y deberías obtener algo como esto:
Trabajo futuro:
- No creo que sea necesario escribir en un archivo … ¿quizás pocketsphinx puede redirigir a un puerto y Racket puede escucharlo?
- Mejore el modelo de idioma para un dominio de su elección
- Agregue un par de altavoces al Raspberry Pi para que Racket pueda decirle qué está haciendo, si algo no ha sido reconocido, etc.