Quiero hacer procesamiento de voz en Raspberry Pi para detectar personas específicas (algo así como una identificación única).
Preferiría usar solo el procesador de a bordo para esto, podría suponer que Internet no es accesible.
Además, ¿cuáles son las limitaciones con el Raspberry Pi que realiza el procesamiento de voz? Si quiero usar esto como una máquina de asistencia automática, ¿cómo debo proceder?
audio
home-automation
input-device
speech-recognition
speech-synthesis
Ruthvik Vaila
fuente
fuente
Respuestas:
Este es el proyecto principal al que se dedica mi Raspberry Pi en este momento, así que creo que puedo agregar mis dos centavos. Tenga en cuenta que este proyecto sigue siendo un trabajo en progreso.
Elegí usar el lenguaje de programación C para este proyecto exclusivamente en el sistema operativo Raspbian, y eso puede haber afectado algunas de mis decisiones e instrucciones. Solo voy a enumerar software libre y de código abierto , ya que eso es todo lo que uso.
Para las instrucciones de instalación, supondré que tiene un sistema completamente actualizado .
Reconocimiento de voz
Estas son algunas opciones para los motores de reconocimiento de voz :
Pocketsphinx : una versión de Sphinx que se puede usar en sistemas integrados (por ejemplo, basado en un procesador ARM).
Pros : En desarrollo activo e incorpora características tales como aritmética de punto fijo y algoritmos eficientes para computación GMM . Todo el procesamiento se lleva a cabo en la Raspberry Pi, por lo que puede usarse sin conexión. Es compatible con el reconocimiento de voz en tiempo real
Contras : es complicado de configurar y comprender para principiantes. Para mí, era demasiado impreciso para mi aplicación. Todo el procesamiento tiene lugar en la Raspberry Pi, lo que lo hace un poco más lento.
Instrucciones de instalación :
Descargue las últimas versiones estables de Sphinxbase y Pocketsphinx :
Extrae los archivos descargados:
Para compilar estos paquetes, necesitará instalar bison y los encabezados de desarrollo de ALSA.
NOTA : Es importante que los encabezados ALSA se instalen antes de compilar Sphinxbase. De lo contrario, Sphinxbase no utilizará ALSA. También parece que ALSA no se usará si PulseAudio está instalado (algo malo para desarrolladores como yo).
cd
en el directorio de Sphinxbase y escriba los siguientes comandos:cd
en el directorio Pocketsphinx y escriba los siguientes comandos:Pruebe Pocketsphinx ejecutando:
Si desea modificarlo, le recomiendo que lea algo de información en el CMUSphinx Wiki .
libsprec : una biblioteca de reconocimiento de voz desarrollada por H2CO3 (con pocas contribuciones de mi parte, principalmente correcciones de errores).
Pros : Utiliza la API de Google Speech , lo que lo hace más preciso. El código es más fácil de entender (en mi opinión).
Contras : tiene dependencias de otras bibliotecas que H2CO3 ha desarrollado (como libjsonz ). El desarrollo es irregular. Utiliza la API de Google Speech, lo que significa que el procesamiento no tiene lugar en la Raspberry Pi en sí misma, y requiere una conexión a Internet. Requiere una pequeña modificación al código fuente antes de que la compilación funcione correctamente en la Raspberry Pi.
Instrucciones de instalación :
Instale libflac , libogg y libcurl :
Descargue la versión más reciente de libsprec
Descomprima el paquete descargado:
Ahora debería tener una carpeta nombrada
libsprec-master
en su directorio actual.Descargue la versión más reciente de libjsonz :
Descomprima el paquete descargado:
Ahora debería tener una carpeta nombrada
libjsonz-master
en su directorio actual.cd
en ellibjsonz-master
directorio, compilar e instalar:cd
fuera dellibjsonz-master
directorio y dentro dellibsprec-master/src
directorio. Editar línea 227:Necesitamos esto para decir:
Esto es para que el programa use ALSA para apuntar al micrófono USB.
Compilar e instalar:
Ahora puede usar la biblioteca en sus propias aplicaciones. Busque en la carpeta
libsprec-master
de ejemplos para ver ejemplos.Julius : unsoftware decodificador dereconocimiento de voz continuo ( LVCSR ) dealto rendimiento y vocabulario grande de dos pasadaspara investigadores y desarrolladores relacionados con el habla.
Pros : puede realizar el reconocimiento de voz casi en tiempo real en la propia Raspberry Pi. Los formatos de modelo de voz estándar se adoptan para hacer frente a otros kits de herramientas de modelado gratuitos.
Contras : desarrollo irregular, con su última actualización hace más de un año. Su reconocimiento también es demasiado inexacto y lento para mi uso. Largo tiempo de instalación
Instrucciones de instalación :
Hay algunos paquetes que necesitamos instalar para que el sistema funcione correctamente:
Descargue Julius de la fuente CVS:
Establezca los indicadores del compilador por las variables de entorno:
cd
en la carpetajulius4
y escriba los siguientes comandosJulius necesita una variable de entorno llamada
ALSADEV
para indicarle qué dispositivo usar para un micrófono:Descargue un modelo acústico gratuito para que lo use Julius. Una vez que lo haya descargado,
cd
ingrese al directorio y ejecute:Después de eso, debería poder comenzar la entrada de voz.
Haga rodar su propia biblioteca : para mi proyecto específico, elijo crear mi propia biblioteca de reconocimiento de voz que graba audio de un micrófono USB usando ALSA a través de PortAudio , lo almacena en un archivo FLAC a través de libsndfile y lo envía a Google para que lo procesen eso. Luego me envían un archivo JSON bien empaquetado que luego proceso para obtener lo que le dije a mi Raspberry Pi.
Pros : controlo todo (lo que me gusta). Aprendo mucho (que me gusta).
Contras : es mucho trabajo. Además, algunas personas pueden argumentar que en realidad no estoy haciendo ningún procesamiento en la Raspberry Pi con esta biblioteca de reconocimiento de voz. Yo se eso . Google puede procesar mis datos con mucha más precisión que yo en este momento. Estoy trabajando en la construcción de una opción de reconocimiento de voz fuera de línea precisa.
Síntesis de voz
Estas son algunas opciones para los motores de síntesis de voz :
tritium : un motor de síntesis de voz de calidad premium gratuito, escrito completamente en C (y desarrollado por los suyos).
Pros: Extremadamente portátil (sin dependencias además de CMake para construir), extremadamente pequeño (el más pequeño que pude encontrar), fácil de construir.
Contras: la salida de voz en sí misma puede ser inexacta a veces. Falta el soporte para una amplia variedad de idiomas, ya que soy el único desarrollador en este momento con poco tiempo libre, pero este es uno de los objetivos futuros del proyecto. Además, a partir de ahora solo se genera una biblioteca cuando se compila y no se puede usar / ejecutar ejecutable.
eSpeak : un sintetizador de voz de software de código abierto compacto para Linux, Windows y otras plataformas.
Pros : Utiliza un método de síntesis formante , que proporciona muchos idiomas hablados en un tamaño pequeño. También es muy preciso y fácil de entender. Originalmente usé esto en mi proyecto, pero debido a las desventajas tuve que cambiar a otro motor de síntesis de voz.
Contras : tiene algunas dependencias extrañas en X11 , lo que a veces tartamudea. La biblioteca también es considerablemente grande en comparación con otras.
Instrucciones de instalación :
Instale el software eSpeak:
Para decir lo que quieres en eSpeak:
Para leer de un archivo en eSpeak:
Festival : un sistema general de síntesis de voz multilingüe.
Pros : está diseñado para admitir múltiples idiomas hablados. Puede usar el proyecto Festvox que tiene como objetivo hacer que la construcción de nuevas voces sintéticas sea más sistemática y mejor documentada, haciendo posible que cualquiera pueda construir una nueva voz.
Contras : está escrito en C ++ (más una desventaja para mí específicamente). También tiene una base de código más grande, por lo que sería difícil para mí entender y portar el código.
Instrucciones de instalación :
Instala el software del Festival:
Para ejecutar Festival, canalice el texto o el archivo que desea que lea:
Flite : un pequeño motor de síntesis de voz en tiempo de ejecución derivado del Festival y el proyecto Festvox.
Pros : En constante desarrollo en la Universidad Carnegie Mellon. Motor muy pequeño en comparación con otros. También tiene una base de código más pequeña, por lo que es más fácil de recorrer. Casi no tiene dependencias (un gran profesional para mí, y otra razón por la que decidí usar este motor en mi proyecto).
Contras : la salida de voz en sí no siempre es precisa. El discurso tiene un sonido muy metálico, no humano (más que los otros motores). No es compatible con muchos idiomas.
Instrucciones de instalación :
Instale el software Flite:
Para ejecutar Flite:
Respuestas a sus preguntas específicas :
Los programadores no tienen límites.
:P
En una nota más seria, la Raspberry Pi tiene muchos recursos para manejar el procesamiento de voz. Mientras la persona que realiza el procesamiento del habla sepa lo que está haciendo, la Raspberry Pi debería ser capaz de manejarlo bien.
Ninguna de estas opciones es lo suficientemente precisa como para distinguir la diferencia entre personas específicas todavía . Eso es algo en lo que estoy trabajando en mi proyecto (y probablemente lo será por un tiempo). Si está buscando una mejor opción para la asistencia automática, buscaría en el reconocimiento facial . Sin embargo, existen más limitaciones en el reconocimiento facial para Raspberry Pi, así que tenlo en cuenta.
fuente
Fui con pocketsphinx_continuous y una tarjeta de sonido de $ 4 .
Para manejar el hecho de que necesita dejar de escuchar cuando se usa el sintetizador de voz, utilicé un mezclador para manejar el volumen de entrada al micrófono (esta fue la mejor práctica recomendada por CMU, ya que el motor de arranque de parada dará lugar a un reconocimiento más pobre)
Con un comando coincidente para silenciar la escucha cuando se reproduce el sintetizador de voz
Para calcular los tiempos correctos para silenciar, simplemente ejecuto soxi a través de lua y luego configuro el unmute.sh (opuesto al mute.sh) para ejecutar "x" segundos desde el inicio. No hay duda de muchas maneras de manejar esto. Estoy contento con los resultados de este método.
SNIPPET LUA:
Para realmente captar la voz en el pi que uso:
Nuevamente, hay otras formas, pero me gusta mi salida de esta manera.
Para el sintetizador, utilicé la solución Pi Cepstrals incipiente, pero no está disponible en línea, debe contactarlos directamente para organizar la compra y cuesta alrededor de $ 30. Los resultados son aceptables, sin embargo, el discurso crea algunos clics desagradables, la compañía respondió que ya no tienen un RaspPi y no están dispuestos a mejorar el producto. YMMV
El reconocimiento de voz se encuentra en alrededor del 12% de la CPU cuando está "inactivo", y se dispara brevemente cuando se realiza una porción de reconocimiento.
La creación de voz aumenta a aproximadamente 50-80% cuando se procesa.
El play / sox pesa bastante, pero aplico efectos en tiempo real a las voces renderizadas mientras las toco;)
El pi se elimina en gran medida utilizando todas las guías que pude encontrar para detener los servicios no necesarios y se ejecuta en modo CLI completo. 800mhz over-clocked (el más pequeño).
scaling_governor establecido en: rendimiento
Cuando funciona completamente: funciona a aproximadamente 50ºC a la luz solar directa y a 38ºC a la sombra. Tengo disipadores de calor instalados.
Último punto: en realidad ejecuto todo este equipo a la IA "impulsada por Internet" como un buen extra.
El pi maneja todo esto a la perfección, y reproduce cualquier audio en red en tiempo real, y audio en bucle completo a cualquier otra caja de Unix. etc.
Para manejar la gran carga de la CPU de voz, he implementado un sistema de almacenamiento en caché basado en md5sum para que las mismas expresiones no se procesen dos veces. (alrededor de 1000 archivos a 220 mb en total cubren el 70% de las expresiones que generalmente obtengo de la IA), esto realmente ayuda a reducir la carga total de la CPU en general.
En resumen, todo esto es totalmente factible. sin embargo, el reconocimiento de voz solo será tan bueno como la calidad de sus micrófonos, su modelo de idioma, qué tan específicamente están las voces de sus sujetos con la audiencia original (uso un modelo en_US en niños en_UK, no perfecto) y otros detalles minuciosos que con esfuerzo puedes reducir a un resultado decente.
Y para que conste, ya hice todo esto una vez antes con un Kindle (y eso también funcionó con cmu sphinx y flite). Espero que esto ayude.
fuente
Sí. use PocketSphinx para reconocimiento de voz, Festvox para texto a voz (TTS) y algo de audio USB con entrada de línea (o una cámara web antigua compatible que también tiene entrada de línea).
Google busca estos paquetes de software y "Raspberry Pi" proporciona muchos ejemplos y tutoriales para configurarlo.
fuente
Como lo señaló Lenik, necesitará alguna forma de grabar audio o posiblemente enviar archivos de audio a la Raspberry Pi para que se decodifiquen de alguna manera.
fuente
Raspberry Pi no tiene ADC incorporado ni entrada de micrófono. A menos que esté planeando usar un micrófono USB externo, básicamente no hay forma de llevar su transmisión de audio al dispositivo. Además de eso, no hay limitaciones serias, la CPU es lo suficientemente potente como para cualquier procesamiento de sonido que intente implementar.
fuente
En primer lugar, debe seleccionar un conjunto de palabras para el proceso de clasificación. Después de eso, debe recopilar los datos de los usuarios / sujetos. Será señal no estacionaria. Debe reducir sus datos para reducir los costos computacionales / mejorar la relación de éxito con los métodos de extracción de características, por lo que debe buscar métodos de extracción de características adecuados para su aplicación. Puede obtener un vector de características como resultado de estos métodos (valor absoluto medio, RMS, longitud de forma de onda, cruce por cero, valor absoluto integrado, coeficientes AR, frecuencia media, frecuencia media, etc.). Luego, debe usar un método de clasificación como knn, redes neuronales, etc. para clasificar sus datos. Por último, debe verificar su precisión. Para resumir:
He visto proyectos de procesamiento de video con RPi en Internet para que pueda hacer esta clasificación.
Puede usar NI 6009 USB DAQ (que admite RPi) para recopilar datos analógicos, pero son un poco caros.
fuente
Esto puede ser útil para reconocer al orador:
https://code.google.com/p/voiceid/
fuente