Início > DSP, Programação > Simple VAD (Voice activity detection) Based in Threshold Energy

Simple VAD (Voice activity detection) Based in Threshold Energy

Fim das Férias…

Post passado mostrei um exemplo simples de como integrar o Voice Search do google usando Python, comentei que seria interessante desenvolver um VAD para automatizar o processo etc, e então no final do ano passado desenvolvi um novo protótipo, escrevi algo bem simples para adquirir o conceito, e em cada passo da implementação me deparava com um problema, a maneira mais básica para identificar a atividade de sons é por meio do RMS (Root mean square), com ele conseguimos medir a magnitude do sinal, isso nos dá a possibilidade de calcular o volume em um grupo de frames no sinal e o pesadelo começa aqui como encontrar um valor global para definir o que é silencio ou não ???

As Variáveis são muitas e mais uma vez qualquer componente externo pode atrapalhar nos resultados, Qualidade do Microfone,  Nível do Volume e Boost configurados para o seu Microfone, etc.

Pensando em amenizar o problema inclui um Simples Extrator de Tom para tentar encontrar frequências maiores do que 80 Hz, a voz humana é capaz de reproduzir sons que vão de 80 até 1100Hz, para trabalhar em real-time o desempenho é fundamental então parti para um extrator de Freqüência bem veloz apesar de não funcionar com muita eficiência em ondas complexas utilizar zero-crossing se torna útil para este projeto.

No projeto passado para efetuar as conversões em .flac utilizei a biblioteca audiolab, o audiolab é excelente para Linux, mas neste novo projeto iniciei os testes em solo Windows e tive muitas incompatibilidades, resolvi então utilizar um binário externo para efetuar os encodes (flac.exe) você pode baixar no seguinte link.

Como o protótipo funciona?

  • Ao Executar ele fica escutando o sinal de áudio do microfone
  • Ao perceber atividade de voz inicia a gravação
  • Ao iniciar a gravação continua analisando os últimos blocos dos frames para tomar a decisão se a fala cessou ou não
  • Se cessou finaliza a entrada de áudio converte para .flac e envia para o google neste caso o framerate já esta no formato correto pois a gravação feita pelo microfone já se encontra em 16000.

Para o meu caso consegui melhores resultados configurando meu microfone no windows com 100% de nível e com boost de +10dB

Tela:

Source:

https://gist.github.com/1589531

Eng Eder de Souza

  1. Manab
    janeiro 29, 2013 às 3:01 pm

    do u have a linux version for it?

    • ederwander
      janeiro 29, 2013 às 6:58 pm

      i believe that it can work in linux🙂

  2. fevereiro 28, 2016 às 12:33 pm

    Estou no começo do meu TCC e resolvi fazer uma assistente virtual para Android,o meu problema é que não sei onde conseguir(e usar) uma boa API para esta função.Você poderia me indicar alguma?Desde já agradeço,
    Nina Fonseca.

  3. Diego Molina
    fevereiro 29, 2016 às 10:56 am

    Bom dia Eder,
    Conseguiria entrar em contato para sanar umas duvidas relacionadas a reconhecimento, leitura e reprodução.
    Grato desde já

  1. junho 17, 2012 às 10:51 am

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: