Mycroft-core: Bounty: implémentation de l'annulation du bruit sur les périphériques matériels basés sur RPi-3 (Mark 1 et Picroft)

Créé le 14 mars 2018  ·  20Commentaires  ·  Source: MycroftAI/mycroft-core

_REMARQUE: ce problème remplace le numéro 57_

Énoncé du problème

Le bus audio actuel sur les images Mark 1 et Picroft n'élimine pas le son du haut-parleur du microphone. Cela conduit à un comportement indésirable de l'appareil, surtout lorsqu'un flux audio est en cours de lecture et que l'utilisateur ne peut pas «intervenir» facilement avec un Hey Mycroft .

L'appareil sait quel son est émis par le haut-parleur. L'idée essentielle souhaitée est de soustraire la sortie audio du haut-parleur de l'entrée audio du microphone en utilisant une approche appropriée - telle que le décalage temporel de l'audio sortant et l'adapter à l'entrée audio du microphone.

Critères d'acceptation

  • La solution doit fonctionner sur un périphérique matériel de référence Mark 1. Picroft convient aux tests ou à la preuve de concept, mais la solution doit fonctionner dans un environnement acoustique d'enceinte Mark 1
  • La solution doit fonctionner avec un flux audio en cours de lecture à 3/4 de volume, tel que Pandora, Spotify, Mopidy ou tout autre flux audio
  • La solution doit fonctionner avec le logiciel de détection par défaut Precise Wake Word.
  • Un utilisateur doit être capable d'interrompre le flux d'entrée / sortie audio en prononçant le Wake Word - c'est-à-dire «Hey Mycroft» à un volume normal (c'est-à-dire sans crier).
  • La solution doit fonctionner dans les limites du processeur du matériel RPi 3 (le matériel utilisé à la fois pour Mark 1 et Picroft). À savoir, ne pas dépasser une moyenne de charge de 3,0 lors de l'exécution de la commande top.

Informations utiles

Contact technique clé - Steve Penrod (@penrods) (@ steve-mycroft à https://chat.mycroft.ai)

Prime

La prime pour cette demande de fonctionnalité est de 1000 USD, ainsi qu'un Mark 1 gratuit et une pièce de défi Gold Mycroft.

medium Enhancement - proposed help wanted

Commentaire le plus utile

J'ai travaillé sur des projets utilisant un chipset Broadcom pas sans rappeler celui du BCM2837 (qui est utilisé dans RPi3) et nous avions connu un bon succès en utilisant l'annuleur d'écho Opus. Il faut du CPU pour le faire, mais ce n'était pas particulièrement mauvais. Malheureusement, je n'ai pas le temps libre nécessaire pour contribuer à la chasse aux primes, mais j'ai pensé que peut-être suggérer que cela aiderait quelqu'un d'autre.

Tous les 20 commentaires

Je vais jeter un oeil à ceci sous peu

Informations plus utiles:
PulseAudio prend en charge l' annulation d'écho de module .
Plus d'informations ici ... https://arunraghavan.net/2016/05/improvements-to-pulseaudios-echo-cancellation/

Quelques liens, espérons-le, utiles sur le module d'impulsion:
https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Modules/#index45h3
https://wiki.archlinux.org/index.php/PulseAudio/Troubleshooting#Enable_Echo.2FNoise -Annulation
Le module d'annulation d'écho peut également faire du beamforming ...

@KathyReid @penrods
Quelqu'un a-t-il déjà exploré cette option (annulation d'écho audio d'impulsion)? Je suis prêt à essayer, même si je n'ai qu'un picroft avec lequel travailler.

Je crois que cela a été essayé il y a quelques années, mais la tension du processeur était assez élevée. (C'est ce que j'ai entendu donc pas d'expérience personnelle sur le Pi). L'annulation de l'écho audio d'impulsion fonctionne très bien sur ma station de travail, ce serait donc cool si cela pouvait également fonctionner sur le Pi. Si le matériel est trop intensif, il y a peut-être des ajustements à apporter.

Essayez-le et voyez quel est le résultat!

J'ai travaillé sur des projets utilisant un chipset Broadcom pas sans rappeler celui du BCM2837 (qui est utilisé dans RPi3) et nous avions connu un bon succès en utilisant l'annuleur d'écho Opus. Il faut du CPU pour le faire, mais ce n'était pas particulièrement mauvais. Malheureusement, je n'ai pas le temps libre nécessaire pour contribuer à la chasse aux primes, mais j'ai pensé que peut-être suggérer que cela aiderait quelqu'un d'autre.

Merci pour vos commentaires, @roadriverrail - excellente suggestion!

Potentiellement intéressant:
https://github.com/xiph/rnnoise
et sur cette base:
https://github.com/werman/noise-suppression-for-voice
(les éléments ci-dessus sont nettement plus lents que viables, hélas: augmentation d'environ 8: 1 du traitement)

@forslund , Lorsque vous travaillez sur un poste de travail avec la source mycroft, l'annulation d'écho d'impulsion est-elle chargée automatiquement ou devons-nous le faire nous-mêmes?

Les haut-parleurs USB tels que le Jabra 410 (populaire dans les forums) effectuent-ils une annulation d'écho? J'en utilise un avec un RPi 3B + et "Hey Mycroft, stop" semble fonctionner. Cependant, je ne suis pas sûr que cela fonctionne "bien" à "volume normal".

Actuellement, aucune distribution ne charge l'annulation d'écho d'impulsion (à ma connaissance).
Selon https://www.jabra.com/business/speakerphones/jabra-speak-series/jabra-speak-410 "Technologie de traitement numérique du signal (DSP)
Un son cristallin sans échos ou sons déformés même au niveau de volume maximum "qui ressemble beaucoup à une sorte d'annulation d'écho.

@tlc as @ el-tocino indique que l'annulation d'écho n'est pas chargée par défaut. Le charger crée un microphone virtuel que vous devez définir par défaut pour l'utiliser avec mycroft. (essentiellement en le sélectionnant dans le contrôle du volume audio d'impulsion)

Comment allons-nous tous avec celui-ci - des questions? Des informations que nous pourrions fournir pour vous aider?

Pas mon travail, mais je suis tombé dessus;

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

Ça a l'air intéressant et en cochant les cases.

J'ai expérimenté le moteur vocal / ec (qui est essentiellement un wrapper pour speex) et le module d'annulation d'écho de PulseAudio (vous devez installer PA 7.1 à partir de Debian-Jessie-Backports pour cela) en utilisant les algorithmes "webrtc" et "speex" (Adrian n'est pas du tout utilisable) mais n'a pas eu de chance jusqu'à présent. Je vois principalement deux raisons:
1) lorsque la musique est lue sur le haut-parleur Mark-I, le micro du Mark-I ne capte presque que la musique (cela est dû à la construction physique), en plus le micro / préampli capte beaucoup de bruit électrique / radio . Cela rend très difficile tout algorithme d'annulation de bruit / d'écho.
2) La synchronisation RPI3 de l'horloge interne n'est pas suffisamment stable pour ce type de traitement en temps réel - la dérive temporelle permanente confond également les algorithmes d'annulation d'écho.
Je vais essayer "rnnoise" sous peu (je l'ai déjà compilé pour RPI mais quelques problèmes de configuration pour PA) mais je n'ai pas trop d'attentes pour les raisons ci-dessus

Je serais prêt à envisager une solution qui nécessite un ajout ou une modification mineure et bon marché du Mark 1, par exemple une mousse acoustique séparant le micro et le haut-parleur ou un réacheminement des câbles. Mais pas les changements au niveau du conseil.

La formation de faisceaux basée sur la position du micro plus un micro USB bon marché pourrait être une option. Un ou deux de ces mini-micros (recherche "overfly portable usb 2.0 mic") placés dans les ports combinés avec l'audio du micro existant passant par un beamformer devraient être capables de faire AEC et d'améliorer l'écoute. Je n'ai pas encore essayé moi-même, hélas.

Après quelques expériences supplémentaires, j'ai une configuration avec le module d'annulation d'écho PulseAudio qui fonctionne raisonnablement * avec des niveaux de volume jusqu'à 5 (le maximum de Mark-1 est de 11) à une distance d'env. 4 pieds. Il y a encore de la place pour peaufiner les paramètres qui pourraient augmenter la fiabilité.
Je n'ai pas encore essayé le réglage du matériel (mousse acoustique). De plus, j'envisage des changements dans Mycroft Audioservices, par exemple la musique de canard / muet dès qu'un mot de réveil est détecté afin d'obtenir un énoncé clair ...

* dépend du matériel musical, plus il est compressé (voir « guerre du volume »), moins il fonctionne.

Je crois que @forslund a déjà travaillé sur la partie esquive. Croyez que c'est déjà quelque part dans la section PR / Issue.

Avec vous, l'AEC doit être combiné avec le ducking audio.

J'ai utilisé de la mousse isolante pour porte / fenêtre (similaire: https://www.homedepot.com/p/Frost-King-3-4-in-x-5-16-in-x-10-ft-Black-Rubber -Foam-Weatherseal-Tape-R534H / 202262324) pour faire une barrière autour de l'avant du micro entre le circuit imprimé frontal et la façade. En second lieu, j'ai également recouvert l'arrière de l'enceinte de mousse.

Cette page vous a été utile?
0 / 5 - 0 notes