Speech recognition com Python

Já conversou com seu celular hoje? Há alguns tempos esta seria uma pergunta bastante estranha, você não acha? Mas hoje em dia, talvez você até tenha utilizado um “Ok Google” agorinha mesmo. Mais ainda: talvez você até tenha uma assistente virtual na sua sala, bem agora. Mas já parou pra pensar como isso é criado computacionalmente? Se você pensou em algoritmos e cálculos complicadíssimos, você está correto, mas não se assuste! Python nos permite usar essa tecnologia de uma forma bem mais simples. Vamos ver como fazer isso?

 

O que é “speech recognition”?

 

O termo “speech recognition”, ou “reconhecimento de fala” em português, é um campo da Ciência da Computação que tem como objetivo desenvolver tecnologias que permitam o reconhecimento e a transcrição da linguagem falada pelos nossos computadores. Você também encontrará outros nomes para este mesmo campo, como automatic speech recognition (reconhecimento automático de fala), computer speech recognition (reconhecimento de fala por computador) ou STT, de speech to text (fala para texto).

Apesar de a ideia de um computador entender o que falamos parecer bastante ligada à tecnologias ultramodernas, os primeiros sistemas de reconhecimento de fala datam da década de 1950. Esses primeiros sistemas eram bem simples, claro, sendo capazes de reconhecer a pronúncia de números. Mas rapidamente essa tecnologia evoluiu, surgindo novos sistemas capazes de reconhecer algumas dezenas de sílabas na década de 1960, depois milhares de sílabas na década seguinte. Na década de 1980, um grupo de pesquisadores da IBM conseguiu criar uma máquina de escrever, chamada Tangora, ativada por voz e capaz de reconhecer cerca de 20.000 palavras! De lá pra cá, com ajuda dos avanços da inteligência artificial, esses sistemas evoluíram para nossos celulares, computadores pessoais, carros, assistentes virtuais, por aí vai.

 

Como isso funciona?

 

O ato de falar nada mais é que criar vibrações no ar. Por meio de um conversor analógico-digital (ADC), essas vibrações podem ser convertidas em dados digitais, que o computador pode entender. Para fazer isso, ele coleta ou digitaliza o som fazendo medições precisas da onda em intervalos de frequência. Um algoritmo filtra o som digitalizado para remover ruídos indesejados e, às vezes, separá-lo em diferentes faixas de frequência (frequência é o comprimento que as ondas sonoras tem, percebidas pelos seres humanos como diferenças de afinação). Esse algoritmo também ajusta o som a um nível de volume constante. As pessoas nem sempre falam na mesma velocidade, por isso o som também passa por um ajuste para corresponder à velocidade das amostras de som do modelo já armazenadas na memória do sistema.

Depois dessa etapa inicial, o sinal é dividido em pequenos segmentos tão curtos quanto alguns centésimos de segundo, ou, dependendo do caso, milésimos de segundo. O algoritmo então combina esses segmentos com fonemas conhecidos no idioma apropriado. Um fonema é o menor elemento de uma linguagem, ou seja, uma representação dos sons que produzimos para formar palavras e expressões significativas.

O último passo trata de examinar os fonemas no contexto dos outros fonemas ao seu redor. Para isso, o algoritmo analisa estatisticamente os fonemas capturados e os compara a uma grande biblioteca de palavras, frases e sentenças conhecidas. O programa determina o que o usuário provavelmente estava dizendo e o envia como texto ou emite um comando do computador.

 

Speech recognition usando Python

 

Todo o processo (brevemente) descrito no tópico anterior já está convenientemente implementado em Python. Coisa boa, não? Vamos agora botar a mão na massa!

Primeiramente, precisamos instalar o módulo SpeechRecognition:

pip install SpeechRecognition

Também precisaremos do pyaudio:

pip install pyaudio

Agora, usando seu ambiente de programação favorito, vamos importar o módulo de reconhecimento de fala:

import speech_recognition as sr

Vamos criar uma função para capturar o áudio do nosso microfone:

#Função para ouvir e reconhecer a fala
def ouvir_microfone():
    #Habilita o microfone do usuário
    microfone = sr.Recognizer()
    
    #usando o microfone
    with sr.Microphone() as source:
        
        #Chama um algoritmo de reducao de ruidos no som
        microfone.adjust_for_ambient_noise(source)
        
        #Frase para o usuario dizer algo
        print("Diga alguma coisa: ")
        
        #Armazena o que foi dito numa variavel
        audio = microfone.listen(source)
        
    try:
        
        #Passa a variável para o algoritmo reconhecedor de padroes
        frase = microfone.recognize_google(audio,language='pt-BR')
        
        #Retorna a frase pronunciada
        print("Você disse: " + frase)
        
    #Se nao reconheceu o padrao de fala, exibe a mensagem
    except sr.UnkownValueError:
        print("Não entendi")
        
    return frase

Prontinho! Para usarmos essa função, passamos para o python:

ouvir_microfone()

Após executar a função, você verá no seu interpretador Python a frase “Diga alguma coisa:”. Daí, depois de falar alguma coisa, aparecerá a transcrição do que foi dito. No meu caso aqui: “olá máquina”. Legal, não?

Agora, vamos criar uma implementação que faz o computador repetir, usando áudio, aquilo que dissemos a ele. É isso mesmo, vamos falar algo, o computador identificará o que dissemos e, depois, repetirá nossas palavras. Vamos fazer?

pip install --user gTTS
pip install --user playsound

Agora, vamos criar uma função que captura o áudio da nossa fala e salva em um arquivo em nossa máquina:

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('hello.mp3')
    print("Estou aprendendo o que você disse...")
    #Da play ao audio
    playsound('hello.mp3')

Pronto. Combinando o uso da função criada anteriormente com essa última função que criamos, podemos passar para o python:

frase = ouvir_microfone()
cria_audio(frase)

Como resultado, o que foi dito pelo usuário aparecerá como um texto na tela e também será executado usando a voz da moça do Google!

Concluindo

Neste post você aprendeu como usar Python para criar uma aplicação de reconhecimento de fala. Como você viu, o Python facilita bastante a nossa vida para a implementação deste tipo de aplicação, nos permitindo apoiar nos ombros de gigantes, como Google (veja o módulo gTTS, por exemplo).

Ao fazermos com que o computador seja capaz de converter em texto informações que estão em áudio abre um universo de possibilidades, em termos de aprendizagem de máquina. Há algumas semanas, tivemos aqui um post sobre processamento de linguagem natural (PLN). A combinação de técnicas de speech recognition com técnicas de PLN torna possível converter em informação “analisável” a fala de pessoas em áudios de podcasts ou vídeos do youtube, por exemplo. Que tal experimentar algumas coisas com o que você aprendeu aqui? Bons estudos!