Uma das maiores vantagens de se saber programar é poder usar nossos dons em benefício próprio. Nesse post, vamos utilizar esta capacidade para criar um assistente virtual escrito em Python para uso pessoal. Essa tarefa inclui uma viagem pelo reino da inteligência artificial e da automação.
Com um toque do poder do Python, vamos criar nosso próprio companheiro digital que poderá ser utilizado depois para agilizar tarefas, responder perguntas e tornar nossas vidas mais eficientes.
O que é um assistente virtual escrito em Python?
Assistentes virtuais desenvolvidos em Python são aplicativos projetados para executar tarefas e fornecer serviços aos usuários de maneira conversacional e interativa. Um assistente virtual escrito em Python é criado usando várias bibliotecas, estruturas e APIs. Ele pode ser desenvolvido para executar uma ampla gama de funções, incluindo:
- Responder a perguntas
- Automação de tarefas repetitivas
- Recuperação de dados
- Reconhecimento de voz para interações verbais com usuários
- Processamento de linguagem natural para que o assistente virtual tenha conversas mais humanas
- Agendamento de tarefas
- Integração com APIs
- Personalização
Para este post, iremos desenvolver um assistente virtual com reconhecimento de fala para aceitar comandos linguísticos e realizar algumas tarefas.
Bibliotecas para interações linguísticas
Utilizaremos as seguintes bibliotecas para realizar interações linguísticas com nosso assistente virtual.
- gtts
- playsound
- speech_recognition
A biblioteca speech_recognition realiza reconhecimento de fala acessando várias APIs de inteligência artificial. Já a biblioteca gtts converte textos em áudios e será utilizada para que o assistente virtual seja capaz de falar. A biblioteca playsound executa áudios em Python. Após instalar as bibliotecas, crie um arquivo do Python e faça as importações necessárias como mostrado abaixo.
from gtts import gTTS
from playsound import playsound
import speech_recognition as sr
Reconhecimento de fala
A primeira função do código realiza a escuta de sons e o reconhecimento de fala. Ela recebe áudios diretamente do microfone. Essa função utiliza uma API de inteligência artificial (recognize_google). Por isso, é preciso testar se o acesso à API foi bem-sucedido e também se o reconhecimento da fala ocorreu.
def escuta():
r = sr.Recognizer()
with sr.Microphone() as source:
print("Escutando ...")
audio = r.listen(source)
data = ""
try:
data = r.recognize_google(audio, language='pt')
except sr.UnknownValueError:
print("Google Speech Recognition não entendeu o que voce falou")
except sr.RequestError as e:
print("Houve um problema com sua solicitação")
return data
Acorda e fala
Para que o assistente possa interagir de forma conversacional, ele precisa ter uma fala. Isso é realizado através da função abaixo.
def fala_assistente(fala):
language = 'pt'
audio = gTTS(text=fala, lang=language, slow=False)
audio.save("audio.mp3")
playsound("audio.mp3")
Também é importante que o assistente apenas acorde, ou seja, interaja, quando uma palavra específica é mencionada (wakeword). A palavra escolhida para este post é “assistente”. A função para acordar o assistente é mostrada abaixo. Ela identifica a palavra “assistente” no áudio recebido e muda o status de uma variável chamada escutando para True.
def acorda(data, escutando, wakeword="assistente"):
data2 = " "
palavras = data.split()
for i in range(len(palavras)):
if palavras[i].lower() == wakeword:
escutando = True
return escutando
Definindo alguns comportamentos
Depois vamos definir alguns comportamentos para nosso assistente. O primeiro comportamento é uma saudação, o segundo é informar a hora e o terceiro e terminar a interação.
No código abaixo, quando o assistente está acordado (status de escutando é True), as palavras “como vai” fazem ele responder “tudo bem”. A palavra horas faz ele informar o horário atual. Já a palavra terminar encerra a interação (status de escutando atualizado para False) até que o assistente seja acordado de novo.
from time import ctime
def assistente_virtual(data, escutando):
if "como vai" in data:
escutando = True
fala_assistente("Tudo bem")
if "horas" in data:
escutando = True
fala_assistente(ctime())
if "terminar" in data:
escutando = False
return escutando
As funções são chamadas com os comandos abaixo. Note que o assistente apenas começará a interagir depois que a palavra “assistente” for mencionada.
escutando = False
while True:
data = escuta()
escutando = acorda(data, escutando, wakeword="assistente")
if escutando == True:
escutando = assistente_virtual(data, escutando)
Adicionando comportamentos mais complexos
O próximo passo é inserir comportamentos mais elaborados para nosso assistente. Neste post, realizaremos uma busca com o Google. Para isso, será necessário instalar o selenium e baixar um webdriver como chomedriver.
O primeiro passo para essa expansão no código é inserir um item a mais na função assistente_virtual definida anteriormente (linhas em destaque abaixo). Esse item identifica a palavra “procure” e chama duas funções. A primeira, busca_google_alvo, é responsável por identificar a palavra-alvo que será buscada. A palavra-alvo é então passada para a função que realiza a busca (busca_google).
def assistente_virtual(data, escutando):
if "como vai" in data:
escutando = True
fala_assistente("Tudo bem")
if "horas" in data:
escutando = True
fala_assistente(ctime())
if "procure" in data:
escutando = True
fala_assistente("procurando")
alvo = busca_google_alvo(data)
print(alvo)
busca_google(alvo)
if "terminar" in data:
escutando = False
return escutando
Identificando a palavra-alvo
A função busca_google_alvo é mostrada abaixo. Ela simplesmente cria uma lista com as palavras no arquivo de áudio e, mediante um loop, busca a palavra “procure”. A palavra imediatamente após “procure” é considerada a palavra-alvo.
def busca_google_alvo(data):
alvo = ''
palavras = data.split()
for i, palavra in enumerate(palavras):
palavra = palavra.lower()
if palavra == "procure":
alvo = palavras[i+1]
break
return alvo
Realizando a busca
A função busca_google utiliza a palavra-alvo com o webdriver do selenium para acessar o Google e realizar a busca solicitada. Usamos time.sleep() para que a página retornada com os resultados da busca fique aberta por 5 segundos, mas esse valor pode ser modificado.
import time
from selenium import webdriver
def busca_google(alvo):
browser = webdriver.Chrome()
browser.get("https://www.google.com/search?q="+alvo)
time.sleep(5)
Com a inserção dessas novas funções, a execução do código completo possibilita a realização de buscas na web através de interações com nosso assistente virtual. E tudo isso via comandos de voz.
Conclusão
Neste post, criamos um pequeno assistente virtual que reconhece fala, responde linguisticamente e executa comandos a partir das instruções recebidas. Nosso assistente pode ser facilmente modificado para adquirir uma interface de usuário e várias outras funcionalidades.
Algumas funcionalidades que podem ser inseridas são agendas de compromissos, execuções de tarefas repetitivas e realizações de interações linguísticas mais complexas com processamento de linguagem natural. Além disso, também é possível usar redes neurais para aprimorar a captação do áudio e adicionar reconhecimento de voz personalizado.