Mycroft-core: Bounty: Implementar cancelamento de ruído em dispositivos de hardware baseados em RPi-3 (Mark 1 e Picroft)

Criado em 14 mar. 2018  ·  20Comentários  ·  Fonte: MycroftAI/mycroft-core

_NOTA: Este problema substitui o número 57_

Declaração do problema

O barramento de áudio atual nas imagens Mark 1 e Picroft não elimina o áudio do alto-falante do microfone. Isso leva a um comportamento indesejável do dispositivo, mais perceptível quando um fluxo de áudio está sendo reproduzido e o usuário não consegue “invadir” facilmente com Hey Mycroft .

O dispositivo está ciente de qual áudio está sendo emitido pelo alto-falante. A ideia essencial desejada é subtrair a saída de áudio do alto-falante da entrada de áudio do microfone usando uma abordagem apropriada - como alterar o tempo do áudio de saída e combiná-lo com a entrada de áudio do microfone.

Critérios de aceitação

  • A solução deve funcionar em um dispositivo de hardware de referência Mark 1. Picroft é adequado para teste ou prova de conceito, mas a solução deve funcionar em um ambiente acústico de gabinete Mark 1
  • A solução deve funcionar com um fluxo de áudio reproduzido em 3/4 do volume, como Pandora, Spotify, Mopidy ou outro fluxo de áudio
  • A solução deve funcionar com o software de detecção Precise Wake Word padrão.
  • O usuário deve ser capaz de interromper o fluxo de entrada / saída de áudio falando o Wake Word - ou seja, 'Hey Mycroft' no volume normal (ou seja, sem gritar).
  • A solução deve funcionar dentro das limitações da CPU do hardware RPi 3 (o hardware usado para Mark 1 e Picroft). Ou seja, não exceder uma média de carga de 3,0 ao executar o comando top.

Informação útil

Contato técnico principal - Steve Penrod (@penrods) (@ steve-mycroft em https://chat.mycroft.ai)

Recompensa

O Bounty para esta solicitação de recurso é de US $ 1.000, bem como uma Mark 1 gratuita e uma Gold Mycroft Challenge Coin.

medium Enhancement - proposed help wanted

Comentários muito úteis

Eu trabalhei em projetos usando um chipset Broadcom não muito diferente do BCM2837 (que é usado em RPi3) e tínhamos visto um bom sucesso usando o cancelador de eco Opus. É preciso CPU para fazer, mas não foi particularmente ruim. Infelizmente, não tenho o tempo livre necessário para contribuir com a caça às recompensas, mas pensei que talvez sugerir isso ajudasse outra pessoa.

Todos 20 comentários

Eu vou dar uma olhada nisso em breve

Mais informações úteis:
PulseAudio suporta cancelamento de eco de módulo .
Mais informações aqui ... https://arunraghavan.net/2016/05/improvements-to-pulseaudios-echo-cancellation/

Alguns links úteis sobre o módulo de pulso:
https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Modules/#index45h3
https://wiki.archlinux.org/index.php/PulseAudio/Trouwagen#Enable_Echo.2FNoise -Cancelation
O módulo de cancelamento de eco também pode fazer beamforming ...

@KathyReid @penrods
Alguém já explorou essa opção (cancelamento de eco de áudio de pulso) anteriormente? Estou disposto a tentar, embora só tenha um picroft para trabalhar.

Acredito que tenha sido tentado há alguns anos, mas a deformação da CPU estava bastante alta. (Isso é o que eu ouvi, então nenhuma experiência pessoal no Pi). O cancelamento de eco de áudio de pulso funciona muito bem na minha estação de trabalho, então seria legal se pudesse funcionar no Pi também. Se for muito intensivo no hardware, talvez haja ajustes que possam ser feitos.

Experimente e veja qual é o resultado!

Eu trabalhei em projetos usando um chipset Broadcom não muito diferente do BCM2837 (que é usado em RPi3) e tínhamos visto um bom sucesso usando o cancelador de eco Opus. É preciso CPU para fazer, mas não foi particularmente ruim. Infelizmente, não tenho o tempo livre necessário para contribuir com a caça às recompensas, mas pensei que talvez sugerir isso ajudasse outra pessoa.

Obrigado pelo seu feedback, @roadriverrail - ótima sugestão!

Potencialmente interessante:
https://github.com/xiph/rnnoise
e com base nisso:
https://github.com/werman/noise-suppression-for-voice
(os itens acima são significativamente mais lentos do que viáveis, infelizmente: aumento de ~ 8: 1 no processamento)

@forslund , ao trabalhar em uma estação de trabalho com a fonte mycroft, o cancelamento de eco de pulso é carregado automaticamente ou temos que fazer isso nós mesmos?

Os dispositivos de viva-voz USB, como o Jabra 410 (popular nos fóruns), cancelam o eco? Estou usando um com RPi 3B + e "Ei Mycroft, pare" parece funcionar. Embora eu não tenha certeza se funciona "bem" no "volume normal".

Atualmente, nenhuma distros carrega o cancelamento de eco de pulso (que eu conheço).
Por https://www.jabra.com/business/speakerphones/jabra-speak-series/jabra-speak-410 "Tecnologia de processamento digital de sinal (DSP)
Som cristalino sem ecos ou sons distorcidos, mesmo no nível de volume máximo ", que soa muito como se tivesse algum tipo de cancelamento de eco.

@tlc como @ el-tocino afirma que o cancelamento de eco não é carregado por padrão. Carregá-lo cria um microfone virtual que você precisa definir como padrão para usar com mycroft. (basicamente selecionando-o no controle de volume de áudio de pulso)

Como estamos todos indo com este - alguma dúvida? Alguma informação que possamos fornecer para ajudar?

Não é meu trabalho, mas apenas corri para ele;

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

Parece interessante e marcando as caixas.

Eu experimentei com voice-engine / ec (que é basicamente um wrapper para speex) e o módulo echo-cancel do PulseAudio (você precisa instalar o PA 7.1 do Debian-Jessie-Backports para isso) usando algoritmos "webrtc" e "speex" (adrian não pode ser usado) mas não teve sorte até agora. Vejo principalmente duas razões:
1) quando a música é tocada no alto-falante Mark-I, o microfone do Mark-I quase só capta a música (isso é causado pela construção física), além do microfone / pré-amplificador capta muito ruído elétrico / de rádio . Isso torna muito difícil para qualquer algoritmo de cancelamento de ruído / eco.
2) O tempo RPI3 do relógio interno não é estável o suficiente para este tipo de processamento em tempo real - o timedrift permanente confunde os algoritmos de cancelamento de eco também.
Vou dar uma chance ao "rnnoise" em breve (já compilado para RPI, mas alguns problemas para configurá-lo para PA), mas não tenho muita expectativa pelas razões acima

Eu estaria disposto a considerar uma solução que requer um pequeno e barato add-on ou modificação para o Mark 1, por exemplo, espuma acústica separando o microfone do alto-falante ou redirecionamento do fio. Mas não mudanças no nível do conselho.

Beamforming com base na posição do microfone mais um microfone USB barato pode ser uma opção. Um ou dois desses mini microfones (pesquise "overfly portable usb 2.0 mic") ajustados nas portas combinados com o áudio do microfone existente executado por um formador de feixe deve ser capaz de fazer aec e melhorar a audição. Ainda não experimentei, infelizmente.

Depois de mais algumas experiências, tenho uma configuração com o módulo de cancelamento de eco PulseAudio que funciona razoavelmente * com níveis de volume de até 5 (o máximo de Mark-1 é 11) a uma distância de aprox. 4 pés. Há mais espaço para ajustes de parâmetros que podem aumentar a confiabilidade.
Ainda não experimentei os ajustes de hardware (espuma acústica). Além disso, estou considerando mudanças no Mycroft Audioservices, por exemplo, música abafada / muda assim que o wake-word for detectado para obter uma expressão clara ...

* depende do material da música, quanto mais compactado (consulte " guerra de volume ") menos confiável ele funciona.

Eu acredito que @forslund já fez algum trabalho na parte de

Com você, esse AEC deve ser combinado com redução de áudio.

Eu usei um pouco de espuma isolante de porta / janela (semelhante: 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 fazer uma barreira em torno da frente do microfone entre a placa de circuito e o painel frontal. Em segundo lugar, cobri a parte de trás do alto-falante com espuma também.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

ryanleesipes picture ryanleesipes  ·  4Comentários

InconsolableCellist picture InconsolableCellist  ·  8Comentários

KathyReid picture KathyReid  ·  8Comentários

WSLUser picture WSLUser  ·  9Comentários

tiagochiavericosta picture tiagochiavericosta  ·  6Comentários