Reconhecimento de Voz com Python: Faça seu primeiro Olá Mundo com Speech Recognition!

Suzana Mota
aibrasil
Published in
5 min readOct 9, 2018

Nos tempos atuais todo mundo já utilizou um Ok Google ou pelo menos já ouviu falar de algum outro assistente pessoal como: a Siri da Apple, a Cortana da Microsoft ou a Alexa da Amazon.

Diante do crescimento destes assistentes pessoais não há dúvidas: Somos fascinados por máquinas que podem nos entender! A base de toda esta tecnologia é o reconhecimento de padrões de voz.

Se você quer entender como isso funciona e adicionar aos seus projetos Python, continue a leitura e veja que é muito mais simples do que você imagina.

Como tudo começou

Os primeiros registros de reconhecimento de fala foram iniciados nos laboratórios do Bell Labs no início dos anos 50. A Audrey, uma máquina criada pela Bell Labs, conseguiu entender os dígitos de 0 a 9, com uma taxa de precisão de 90%.

Testes com a Audrey na Bell Labs

Dez anos depois, a IBM exibiu na Feira Mundial de 1962 a sua máquina “ Shoebox ”, que podia entender 16 palavras faladas em inglês.

Isso pode não parecer muito, mas esses primeiros esforços foram um começo impressionante, especialmente quando se considera o quão primitivos eram os computadores na época.

Nos anos 70 a DARPA ( Departamento de Defesa dos EUA) investiu pesadamente na área e em parceria com a Universidade CarnegieMellon, desenvolveram o sistema de compreensão de fala “Harpy” que podia entender 1011 palavras, mais ou menos o equivalente ao vocabulário de uma criança de três anos.

Um ponto de virada fundamental veio com a popularização dos Modelos Ocultos de Markov (HMMs) em meados da década de 1980. A maioria dos sistemas atuais ainda se baseia nesta técnica de análise estatística.

Em um HMM típico, o sinal de fala é dividido em fragmentos de 10 milissegundos. O espectro de energia de cada fragmento, que é essencialmente um gráfico do poder do sinal em função da freqüência, é mapeado para um vetor de números reais conhecidos como coeficientes cepstrais .

Para decodificar a fala em texto, grupos de vetores são combinados com um ou mais fonemas— uma unidade fundamental da fala, tipo A-BA-CA-TE. Esse cálculo requer treinamento, uma vez que o som de um fonema varia de pessoa para pessoa. Um algoritmo especial é então aplicado para determinar a palavra mais provável que produza a sequência de fonemas dada.

Pode-se imaginar que todo esse processo pode ser computacionalmente caro e é realmente é. Em muitos sistemas modernos de reconhecimento de fala, as redes neurais são usadas para simplificar o sinal de fala, usando técnicas de transformação de recursos e redução de dimensionalidade antes do reconhecimento de HMM. Os detectores de atividade de voz (VADs) também são usados ​​para reduzir um sinal de áudio somente para as partes que provavelmente contêm fala. Isso evita que o reconhecedor perca tempo analisando partes desnecessárias do sinal.

Mãos a obra: Criando o seu Olá Mundo de Reconhecimento de Voz

Neste tutorial utilizamos a linguagem Python na versão 3.6.6, se você não possui o Python instalado em sua máquina, aconselho fortemente a utilizar o ambiente Anaconda, pois torna a instalação fácil e intuitiva. Você pode fazer o download aqui.

1° Passo: Instalação de Bibliotecas

Vamos utilizar a biblioteca speech recognition, para instalar abra o seu prompt de comando e digite:

pip install SpeechRecognition

A biblioteca speech recognition possui a dependencia com a biblioteca PyAudio, por isso também precisamos instalá-la, com o comando.

pip install pyaudio

2° Passo: Código Python

import speech_recognition as sr#Funcao responsavel por ouvir e reconhecer a fala
def ouvir_microfone():
#Habilita o microfone para ouvir o usuario
microfone = sr.Recognizer()
with sr.Microphone() as source:
#Chama a funcao de reducao de ruido disponivel na speech_recognition
microfone.adjust_for_ambient_noise(source)
#Avisa ao usuario que esta pronto para ouvir
print("Diga alguma coisa: ")
#Armazena a informacao de audio na variavel
audio = microfone.listen(source)
try:
#Passa o audio para o reconhecedor de padroes do speech_recognition
frase = microfone.recognize_google(audio,language='pt-BR')
#Após alguns segundos, retorna a frase falada
print("Você disse: " + frase)
#Caso nao tenha reconhecido o padrao de fala, exibe esta mensagem
except sr.UnkownValueError:
print("Não entendi")
return fraseouvir_microfone()

3° Passo: Divirta-se

Agora você testa e brinca a vontade, com a sua nova aplicação. Mas atenção, tenha um pouco de paciência, o reconhecimento não acontece em tempo real e a biblioteca precisa de alguns segundos, até reconhecer o que foi dito.

E se a voz do Google repetisse o que você acabou de dizer?

Vamos criar uma variação da aplicação anterior, agora além de reconhecer o que você diz, a voz do Google repete através do áudio o que foi dito.

1° Passo: Instalação de Bibliotecas

Agora, além da biblioteca speech_recognition vamos utilizar duas outras: a gTTS e a playsound. Para tanto, utilize os comandos:

pip install gTTS
pip install playsound

2° Passo: Código Python

import speech_recognition as sr
from gtts import gTTS
from playsound import playsound
#Funcao responsavel por falar
def cria_audio(audio):
tts = gTTS(audio,lang='pt-br')
#Salva o arquivo de audio
tts.save('audios/hello.mp3')
print("Estou aprendendo o que você disse...")
#Da play ao audio
playsound('audios/hello.mp3')
#Funcao responsavel por ouvir e reconhecer a fala
def ouvir_microfone():
#Habilita o microfone para ouvir o usuario
microfone = sr.Recognizer()
with sr.Microphone() as source:
#Chama a funcao de reducao de ruido disponivel na speech_recognition
microfone.adjust_for_ambient_noise(source)
#Avisa ao usuario que esta pronto para ouvir
print("Diga alguma coisa: ")
#Armazena a informacao de audio na variavel
audio = microfone.listen(source)
try:
#Passa o audio para o reconhecedor de padroes do speech_recognition
frase = microfone.recognize_google(audio,language='pt-BR')
#Após alguns segundos, retorna a frase falada
print("Você disse: " + frase)
#Caso nao tenha reconhecido o padrao de fala, exibe esta mensagem
except sr.UnkownValueError:
print("Não entendi")
return frasefrase = ouvir_microfone()
cria_audio(frase)

3° Passo: Divirta-se

Agora é a hora de testar, tente novas frases e também tenha paciência, o processo não é tempo real.

Se você gostou desse tutorial, deixe a sua palminha, sugestões e comentários!

Você também pode baixar o código no link do github e realizar suas próprias alterações e melhorias: https://github.com/suzanasvm/ReconhecimentoVoz

--

--