Identificando pessoas através da voz

Neto Oliveira
Apr 24 · 7 min read
Testing my system. Imagem pertence a dvsgamming

Qual o problema?

Suponha que a privacidade de seu quarto é super importante para você e que a todo custo você queira mantê-lo trancado e só destrancar em sua presença. Para aumentar a segurança, você deseja que a porta só se abra após o reconhecimento de sua voz e com aquela palavra específica.

Cena de Os incríveis 1, pertence a: Walt Disney

Afinal, o que é a voz?

Sabemos que a voz humana é imitável, pelo menos para os nossos ouvidos, porém nosso ouvido não consegue ouvir todas as frequências e tem a péssima mania de associar ao próximo o suficiente, ou seja, se a voz for minimamente parecida com alguma que já conhecemos começamos a ouvi-la mais parecido com a nossa memória.

Am I a joke to you ?

Sinal digital

É um sinal mais eficiente por permitir compactação, porém só pode assumir um número pré-determinado de valores discretos, ou seja, danifica o valor do sinal pelo fato de uns e zeros não representarem fielmente o sinal original (analógico).

Miau em sinal digital. Mentira, imagem retirada do Wikipédia

Técnica

Para trabalhar com sons há diversas técnicas e diversos estudos a respeito na área, nossa abordagem será mais tradicional e eficiente. Nós iremos tratar o som como imagens, sim… isso mesmo, mas como ? Para isso alguns conceitos para facilitar o entendimento.

Thank you, next

Transformada de Fourier

A transformada de Fourier é uma técnica para a análise de frequência em uma distribuição de sinal, ou seja, resulta nas frequências decompostas a partir do tempo. A transformação tem como consequência a perda da informação relativa ao tempo, porém há técnicas para resolver esse problema, são algoritmos que operam em seguimentos curtos do sinal, permitindo a localização das frequências no tempo. Para o STFT (Short-time Fourier Transform), a analise do sinal é baseado em janelas deslizantes de tempo curto, ou seja, mostra características de frequência do sinal.

Imagem pertencente à nti-audio

Espectrograma

O espectrograma fornece informações sobre a energia do sinal em relação ao tempo e a frequência. É uma ferramenta capaz de extrair diversos atributos e características do som, formado a partir do cálculo de STFT aplicado ao sinal digital do som.

Espectrograma pertencente à librosa

Desenvolvimento

Para facilitar nosso desenvolvimento vamos utilizar as seguintes bibliotecas na linguagem Python 3.6:

Captura do áudio

Para a captura e posteriormente classificação do áudio, será necessário obter o áudio proveniente de algum microfone no seu dispositivo. Para essa tarefa, criei uma biblioteca que nos permite gravar áudio de acordo com algumas configurações que iremos falar em breve.

pip install loop-listen
./output/audio/

Processamento do áudio

É a parte fundamental do problema, a configurações que iremos utilizar são:

  • Duração do áudio: 2 segundos
  • Frequência Logarítmica
  • Sample Rate de processamento: 16kHz
  • STFT Window: 0,025
  • Hop Length: 40%
  • Número de bandas: 64
  • Aproveitamento central do áudio: 96%
Você pode plotar a variável processed a partir da função plt.matshow()

Combinação de dataset

Para que faça sentido a sua frase, iremos complementar nosso dataset com outro para que a rede aprenda exatamente qual a frase que você está falando. O dataset que iremos utilizar é o: Commom Voice, mas o que é esse conjunto de dados ?

Construção do Modelo

Agora que temos todos os passos acima cumpridos, precisamos dar vida ao nosso modelo. Ele será baseado em uma rede neural convolucional proposta por Yuma Sakashita e Masaki Aono.

.::Parâmetros::.Total params: 1,829,446
Trainable params: 1,828,036
Non-trainable params: 1,410
Representação visual do modelo porposto por Sakashita e Aono
precision    recall  f1-score   support           0       1.00      0.98      0.99       105
           1       0.83      1.00      0.91        10   micro avg       0.98      0.98      0.98       115
   macro avg       0.92      0.99      0.95       115
weighted avg       0.99      0.98      0.98       115

Conclusão

É possível com poucos dados distinguir vozes, ou seja, permite agora que você crie aplicações para dispositivos embarcados como raspberry, beaglebone ou até mesmo um arduino através de um servidor.

Consideração final

Testei com mais 20 vozes de pessoas reais falando a mesma frase que eu, o resultado foi semelhante, ou seja, ele aprendeu a frase em si, bem como minha voz falando-a.



Ensina.AI

Tudo sobre Inteligência Artificial em Português

Neto Oliveira

Written by

Desenvolvedor WEB a 2 anos, atualmente se aventurando em desenvolvimento para internet das coisas e machine learning. GitHub: https://github.com/netoolii

Ensina.AI

Ensina.AI

Tudo sobre Inteligência Artificial em Português