Mycroft-core: Recompensa: implementar la cancelación de ruido en dispositivos de hardware basados ​​en RPi-3 (Mark 1 y Picroft)

Creado en 14 mar. 2018  ·  20Comentarios  ·  Fuente: MycroftAI/mycroft-core

_NOTA: este problema reemplaza al número 57_

Planteamiento del problema

El bus de audio actual en las imágenes Mark 1 y Picroft no elimina el audio del altavoz del micrófono. Esto conduce a un comportamiento indeseable del dispositivo, más notablemente cuando se está reproduciendo una transmisión de audio y el usuario no puede "irrumpir" fácilmente con un Hey Mycroft .

El dispositivo es consciente de qué audio se emite desde el altavoz. La idea esencial que se desea es restar la salida de audio del altavoz de la entrada de audio del micrófono utilizando un enfoque apropiado, como cambiar el tiempo del audio de salida y hacer coincidir la entrada de audio del micrófono.

Criterios de aceptación

  • La solución debe funcionar en un dispositivo de hardware de referencia Mark 1. Picroft está bien para pruebas o prueba de concepto, pero la solución debe funcionar en un entorno acústico de caja Mark 1
  • La solución debe funcionar con una transmisión de audio que se reproduce a 3/4 de volumen, como Pandora, Spotify, Mopidy u otra transmisión de audio.
  • La solución debe funcionar con el software de detección Precise Wake Word predeterminado.
  • Un usuario debe poder interrumpir el flujo de entrada / salida de audio diciendo la palabra de activación, es decir, "Hey Mycroft" a un volumen normal (es decir, sin gritar).
  • La solución debe funcionar dentro de las limitaciones de la CPU del hardware RPi 3 (el hardware utilizado tanto para Mark 1 como para Picroft). Es decir, sin exceder un promedio de carga de 3.0 cuando se ejecuta el comando superior.

Información útil

Contacto técnico clave: Steve Penrod (@penrods) (@ steve-mycroft en https://chat.mycroft.ai)

Generosidad

La recompensa por esta solicitud de función es de $ 1000 USD, así como un Mark 1 y una Moneda de desafío de oro Mycroft gratis.

medium Enhancement - proposed help wanted

Comentario más útil

He trabajado en proyectos que utilizan un conjunto de chips Broadcom similar al del BCM2837 (que se utiliza en RPi3) y hemos tenido un gran éxito con el cancelador de eco Opus. Se necesita CPU para hacerlo, pero no fue particularmente malo. Desafortunadamente, no tengo el tiempo libre necesario para contribuir a la búsqueda de recompensas, pero pensé que tal vez sugerir esto ayudaría a alguien más.

Todos 20 comentarios

Voy a echar un vistazo a esto en breve.

Más información útil:
PulseAudio admite cancelación de eco de módulo .
Más información aquí ... https://arunraghavan.net/2016/05/improvements-to-pulseaudios-echo-cancellation/

Algunos enlaces con suerte útiles sobre el módulo de pulso:
https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Modules/#index45h3
https://wiki.archlinux.org/index.php/PulseAudio/Troubleshooting#Enable_Echo.2FNoise -Cancelation
El módulo de cancelación de eco también puede realizar formación de haces ...

@KathyReid @penrods
¿Alguien ha explorado esta opción (cancelación de eco de audio por pulsos) anteriormente? Estoy dispuesto a intentarlo, aunque solo tengo un picroft con el que trabajar.

Creo que se intentó hace un par de años, pero la tensión de la CPU era bastante alta. (Esto es lo que he escuchado, así que no tengo experiencia personal en el Pi). La cancelación de eco de audio de pulso funciona muy bien en mi estación de trabajo, por lo que sería genial si también pudiera funcionar en el Pi. Si es demasiado intensivo en el hardware, tal vez se puedan hacer ajustes.

Pruébelo y vea cuál es el resultado.

He trabajado en proyectos que utilizan un conjunto de chips Broadcom similar al del BCM2837 (que se utiliza en RPi3) y hemos tenido un gran éxito con el cancelador de eco Opus. Se necesita CPU para hacerlo, pero no fue particularmente malo. Desafortunadamente, no tengo el tiempo libre necesario para contribuir a la búsqueda de recompensas, pero pensé que tal vez sugerir esto ayudaría a alguien más.

Gracias por tus comentarios, @roadriverrail - ¡gran sugerencia!

Potencialmente interesante:
https://github.com/xiph/rnnoise
y en base a eso:
https://github.com/werman/noise-suppression-for-voice
(lo anterior es significativamente más lento de lo viable, por desgracia: aumento de ~ 8: 1 en el procesamiento)

@forslund , cuando se trabaja en una estación de trabajo con la fuente mycroft, ¿la cancelación de eco de pulso se carga automáticamente o tenemos que hacerlo nosotros mismos?

¿Los dispositivos de altavoz USB como el Jabra 410 (popular en los foros) cancelan el eco? Estoy usando uno con RPi 3B + y "Hey Mycroft, pare" parece funcionar. Aunque, no estoy seguro de si funciona "bien" a "volumen normal".

Actualmente, ninguna distribución carga la cancelación de eco de pulso (que yo sepa).
Según https://www.jabra.com/business/speakerphones/jabra-speak-series/jabra-speak-410 "Tecnología de procesamiento de señal digital (DSP)
Sonido cristalino sin ecos o sonidos distorsionados incluso al nivel de volumen máximo "que suena como si tuviera algún tipo de cancelación de eco.

@tlc como @ el-tocino indica que la cancelación de eco no se carga por defecto. Al cargarlo, se crea un micrófono virtual que debe configurar como predeterminado para usar con mycroft. (básicamente seleccionándolo en el control de volumen de audio de pulso)

¿Cómo vamos con este? ¿Alguna pregunta? ¿Alguna información que podamos proporcionar para ayudar?

No es mi trabajo, pero me encontré con él;

https://github.com/voice-engine/ec

Parece interesante y marca las casillas.

He experimentado con voice-engine / ec (que es básicamente un contenedor para speex) y el módulo de cancelación de eco de PulseAudio (para eso tienes que instalar PA 7.1 desde Debian-Jessie-Backports) usando los algoritmos "webrtc" y "speex" (Adrian no se puede usar en absoluto) pero no ha tenido suerte hasta ahora. Veo principalmente dos razones:
1) cuando se reproduce música a través del altavoz Mark-I, el micrófono del Mark-I casi solo capta la música (esto se debe a la construcción física), además, el micrófono / preamplificador capta mucho ruido eléctrico / de radio . Esto hace que sea realmente difícil para cualquier algoritmo de cancelación de ruido / eco.
2) La sincronización RPI3 del reloj interno no es lo suficientemente estable para este tipo de procesamiento en tiempo real; la deriva de tiempo permanente también confunde los algoritmos de cancelación de eco.
Daré una oportunidad a "rnnoise" en breve (ya lo tengo compilado para RPI pero algunos problemas para configurarlo para PA) pero no tengo una gran expectativa por las razones anteriores

Estaría dispuesto a considerar una solución que requiera un complemento o modificación menor y económico al Mark 1, por ejemplo, espuma acústica que separa el micrófono y el altavoz o el desvío de cables. Pero no cambios de nivel de tablero.

La formación de haces basada en la posición del micrófono más un micrófono USB económico podría ser una opción. Uno o dos de estos mini micrófonos (busque "overfly portable usb 2.0 mic") colocados en los puertos combinados con el audio del micrófono existente a través de un beamformer deberían poder hacer aec y mejorar la escucha. Por desgracia, todavía no lo he probado yo mismo.

Después de experimentar un poco más, tengo una configuración con el módulo de cancelación de eco PulseAudio que funciona razonablemente * con niveles de volumen de hasta 5 (el máximo de Mark-1 es 11) dentro de una distancia de aprox. 4 pies. Hay más espacio para ajustar parámetros que podrían aumentar la confiabilidad.
Todavía no probé el ajuste de hardware (espuma acústica). Además, estoy considerando cambios en Mycroft Audioservices, por ejemplo, pato / silenciar música tan pronto como se detecte la palabra de activación para obtener una expresión limpia ...

* Depende del material musical, cuanto más comprimido (ver " guerra de sonoridad "), menos confiable funciona.

Creo que @forslund ya hizo un trabajo en la parte de agacharse. Creo que ya está en la sección PR / Issue en alguna parte.

Con usted, ese AEC debe combinarse con la atenuación de audio.

Utilicé un poco de espuma aislante para puertas / ventanas (similar: https://www.homedepot.com/p/Frost-King-3-4-in-x-5-16-in-x-10-ft-Black-Rubber -Foam-Weatherseal-Tape-R534H / 202262324) para hacer una barrera alrededor de la parte frontal del micrófono entre la placa de circuito frontal y la placa frontal. En segundo lugar, también cubrí la parte posterior del altavoz con espuma.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

el-tocino picture el-tocino  ·  4Comentarios

damorosodaragona picture damorosodaragona  ·  5Comentarios

krisgesling picture krisgesling  ·  3Comentarios

beemorris picture beemorris  ·  6Comentarios

WSLUser picture WSLUser  ·  9Comentarios