VIXI, O ROBÔ OUVIU TUDO!

🎤 Reconhecimento de Fala

"O robô ouviu tudo! Agora ele responde" — implementando Speech-to-Text com gírias paranaenses e modo Libras textual.

Duração: 100 min (2 aulas)
Google Speech Recognition + Vosk
BNCC: EM13LGG101 | EM13LGG304 | EM13LP16
🎤👂🤖
⬇️⬇️⬇️
"FALA AÍ!"
🎬

Abertura · 10min

Vídeo: como funciona reconhecimento de voz (explicação simples do Speech-to-Text).

🗣️

Conceituação · 15min

Dicionário de gírias paranaenses — turma contribui (vixi, piá, guria, ó o trem, etc.).

💻

Codificação · 40min

Implementar speech_recognition + dicionário de respostas + modo Libras textual.

🧪

Teste · 20min

Alunos falam frases no microfone; robô responde com meme e traduz para Libras textual.

⚖️

Fechamento · 15min

Debate ético: "O robô pode guardar o que ouviu? Isso é fofoca ou dado?"

Adaptações inclusivas

Alunos com fala reduzida podem usar input de texto manual. Lista de frases prontas disponível.

Dicionário de Gírias Paranaenses — "O trem vai ficar doido" 🤣 Bagulho doido
vixi
😲 expressão de surpresa
piá
🧒 garoto, rapaz
guria
👧 garota, moça
ó o trem
👀 olha a coisa, presta atenção
tchê
🤝 companheiro, amigo
bagulho doido
🤪 coisa louca
égua
🐴 expressão de espanto
bah
😮 expressão de surpresa
robo_fofoqueiro_fala.py — Código completo da aula download disponível
# -*- coding: utf-8 -*-
# ============================================================
# ROBÔ FOFOQUEIRO DA ACESSIBILIDADE - AULA 3: RECONHECIMENTO DE FALA
# "O robô ouviu tudo! Agora ele responde"
# ============================================================

import speech_recognition as sr
from datetime import datetime
import random
import os
import time

# ============================================================
# LISTA DE RESPOSTAS IRREVERENTES
# ============================================================
RESPOSTAS_IRREVERENTES = [
    "Ah pronto, agora tão falando '{}'... vou contar pra todo mundo",
    "Isso foi profundo... ou não, sei lá, sou só um robô fofoqueiro",
    "Anotado! '{}' - disse o aluno misterioso",
    "Huuum, interessante... vou salvar no meu banco de fofocas",
    "😈 Hehehe... '{}'... isso vai render altas fofocas!",
    "Conta mais, conta mais... tô gravando tudo aqui 🎙️",
    "Vixi, falou '{}'! Égua, isso é bagulho doido!",
    "Piá, cê tá ligado que eu anotei isso né? '{}'",
    "Ó o trem, guria! '{}' - anotado com sucesso!"
]

# ============================================================
# DICIONÁRIO DE GÍRIAS PARANAENSES
# ============================================================
DICIONARIO_GIRIAS = {
    "vixi": "😲 expressão de surpresa ou susto",
    "piá": "🧒 garoto, rapaz",
    "guria": "👧 garota, moça",
    "ó o trem": "👀 olha a coisa, presta atenção",
    "tchê": "🤝 companheiro, amigo",
    "bagulho doido": "🤪 coisa louca, situação complicada",
    "égua": "🐴 expressão de espanto",
    "trem": "📦 coisa, objeto",
    "bah": "😮 expressão de surpresa",
    "mas qué isso": "😯 expressão de indignação"
}

# ============================================================
# DICIONÁRIO DE TRADUÇÃO PARA LIBRAS TEXTUAL (EMOJI)
# ============================================================
LIBRAS_EMOJI = {
    "bom dia": "🤟 BOM DIA 🤟",
    "boa tarde": "🌅 BOA TARDE 🌅",
    "boa noite": "🌙 BOA NOITE 🌙",
    "ajuda": "🆘 AJUDA 🆘",
    "obrigado": "🙏 OBRIGADO 🙏",
    "amigo": "🤝 AMIGO 🤝",
    "escola": "📚 ESCOLA 📚",
    "professor": "👨‍🏫 PROFESSOR 👨‍🏫",
    "fofoca": "👂 FOFOCA 👂",
    "segredo": "🤫 SEGREDO 🤫",
    "amor": "❤️ AMOR ❤️",
    "triste": "😢 TRISTE 😢",
    "feliz": "😊 FELIZ 😊",
    "legal": "👍 LEGAL 👍",
    "ruim": "👎 RUIM 👎",
    "programar": "💻 PROGRAMAR 💻",
    "python": "🐍 PYTHON 🐍",
    "robô": "🤖 ROBÔ 🤖"
}

# ============================================================
# FUNÇÃO PARA SALVAR FOFOCO NO ARQUIVO
# ============================================================
def salvar_fofoca(texto):
    timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    with open("fofocas.txt", "a", encoding="utf-8") as arquivo:
        arquivo.write(f"[{timestamp}] - {texto}\n")
    print(f"💾 Fofoca salva com sucesso!")

# ============================================================
# FUNÇÃO PARA TRADUZIR PARA LIBRAS TEXTUAL
# ============================================================
def traduzir_libras_textual(texto):
    texto_lower = texto.lower()
    for palavra, traducao in LIBRAS_EMOJI.items():
        if palavra in texto_lower:
            return texto.replace(palavra, traducao)
    return texto

# ============================================================
# FUNÇÃO PARA GERAR RESPOSTA COM GÍRIAS
# ============================================================
def gerar_resposta_com_girias(texto):
    texto_lower = texto.lower()
    for giria, significado in DICIONARIO_GIRIAS.items():
        if giria in texto_lower:
            return f"Vixi, você usou '{giria}'! {significado} Égua, sabia nem que existia isso! 🤯"
    return random.choice(RESPOSTAS_IRREVERENTES).format(texto)

# ============================================================
# FUNÇÃO PRINCIPAL DE RECONHECIMENTO DE FALA
# ============================================================
def escuta_fofoqueiro(modo_libras=False):
    print("\n🎤 Robô Fofoqueiro: 'Tô te ouvindo... fala aí que eu tô anotando tudo'")
    
    recognizer = sr.Recognizer()
    recognizer.energy_threshold = 300
    recognizer.pause_threshold = 0.8
    
    try:
        with sr.Microphone() as source:
            print("🔴 Gravando... fale alguma coisa!")
            recognizer.adjust_for_ambient_noise(source, duration=0.5)
            audio = recognizer.listen(source, timeout=5, phrase_time_limit=5)
            print("✅ Áudio capturado! Processando...")
            
            try:
                texto = recognizer.recognize_google(audio, language="pt-BR")
                print(f"👂 OUVI ALGO: {texto}")
            except sr.UnknownValueError:
                print("❌ Google não entendeu o áudio!")
                return None
            except sr.RequestError as e:
                print(f"❌ Erro na requisição ao Google: {e}")
                return None
    
    except sr.WaitTimeoutError:
        print("⏰ Tempo esgotado! Você demorou para começar a falar.")
        return None
    except Exception as e:
        print(f"❌ Erro inesperado: {e}")
        return None
    
    if texto:
        if modo_libras:
            texto_original = texto
            texto = traduzir_libras_textual(texto)
            if texto != texto_original:
                print(f"🦾 TRADUÇÃO LIBRAS: {texto}")
        
        salvar_fofoca(texto)
        resposta = gerar_resposta_com_girias(texto)
        print(f"🤖 {resposta}")
        return texto
    return None

# ============================================================
# FUNÇÃO PARA TESTE SIMULADO (SEM MICROFONE)
# ============================================================
def teste_simulado(modo_libras=False):
    print("\n" + "="*60)
    print("🧪 MODO TESTE SIMULADO - Robô Fofoqueiro em ação!")
    print("="*60)
    
    frases_teste = [
        "bom dia professor, como você está?",
        "preciso de ajuda com o exercício",
        "você ouviu a última fofoca da escola?",
        "estou feliz hoje!",
        "isso é um segredo entre nós",
        "vixi, que bagulho doido!",
        "ó o trem, piá!"
    ]
    
    print("\n🎭 Simulando reconhecimento de fala com frases pré-definidas:\n")
    
    for i, frase_simulada in enumerate(frases_teste, 1):
        print(f"📝 Teste {i}/{len(frases_teste)}:")
        print(f" 🎭 Frase simulada: '{frase_simulada}'")
        texto = frase_simulada
        print(f"👂 OUVI ALGO: {texto}")
        
        if modo_libras:
            texto_original = texto
            texto = traduzir_libras_textual(texto)
            if texto != texto_original:
                print(f"🦾 TRADUÇÃO LIBRAS: {texto}")
        
        salvar_fofoca(f"[SIMULADO] {texto}")
        resposta = gerar_resposta_com_girias(texto)
        print(f"🤖 {resposta}")
        print("-"*40)
        time.sleep(1)
    
    print("\n✅ Teste simulado concluído!")
    print("📁 Verifique o arquivo 'fofocas.txt' para ver as fofocas salvas!")

# ============================================================
# FUNÇÃO PRINCIPAL
# ============================================================
def main():
    print("="*60)
    print("🤖 ROBÔ FOFOQUEIRO - AULA 3: RECONHECIMENTO DE FALA")
    print("="*60)
    
    print("\n📌 Como você quer testar o robô?")
    print("1 - Teste com microfone real (precisa de microfone)")
    print("2 - Teste simulado (usa frases pré-definidas, recomendado para Colab)")
    print("3 - Apenas ver fofocas salvas")
    
    try:
        opcao = input("\n👉 Escolha uma opção (1/2/3): ").strip()
        modo_libras_input = input("🦾 Ativar tradução para Libras textual? (s/n): ").strip().lower()
        modo_libras = modo_libras_input == 's'
        
        if opcao == '1':
            print("\n🎙️ Iniciando teste com microfone real...")
            print("Pressione Ctrl+C para parar...")
            try:
                while True:
                    texto = escuta_fofoqueiro(modo_libras=modo_libras)
                    if texto:
                        print(f"✅ Texto salvo: {texto}")
                    print("\n" + "-"*40)
                    time.sleep(1)
            except KeyboardInterrupt:
                print("\n\n👋 Robô Fofoqueiro desligado! Até a próxima fofoca!")
        elif opcao == '2':
            teste_simulado(modo_libras=modo_libras)
        elif opcao == '3':
            try:
                with open("fofocas.txt", "r", encoding="utf-8") as arquivo:
                    print(arquivo.read())
            except FileNotFoundError:
                print("📭 Nenhuma fofoca salva ainda!")
        else:
            print("❌ Opção inválida! Executando teste simulado padrão...")
            teste_simulado(modo_libras=modo_libras)
    except Exception as e:
        print(f"❌ Erro: {e}")
        teste_simulado(modo_libras=False)

if __name__ == "__main__":
    main()

print("\n" + "="*60)
print("👋 Robô Fofoqueiro encerrado!")
print("😈 Lembre-se: tudo que você falou está salvo em 'fofocas.txt'")
print("="*60)

Checklist de avaliação - Aluno

  • Conseguiu implementar o reconhecimento de fala funcional?
  • O robô responde com gírias paranaenses corretamente?
  • Modo Libras textual está traduzindo palavras-chave?
  • As falas são salvas no arquivo 'fofocas.txt'?
  • Participou do debate ético sobre privacidade?
  • Testou com microfone real ou modo simulado?
Prazos & alertas

Entrega do projeto: 30/04/2026

Validar reconhecimento de fala antes do próximo encontro.


Dica: "Se o microfone não funcionar no Colab, use o modo simulado!"

Plano de Aula - Docente

Códigos BNCC: EM13LGG101, EM13LGG304, EM13LP16 | RCP - Paraná: Língua Portuguesa - Oralidade, Pensamento Computacional - Algoritmos

Materiais: Chromebooks, contas Google, projetor, microfones.


Dicas de mediação
  • Use a analogia "Robô fofoqueiro precisa de ouvidos (microfone) e cérebro (algoritmo)".
  • Peça que os alunos criem novas gírias para adicionar ao dicionário.
  • Promova um "Torneio de fofoca controlada" para testar o robô.
  • Debate ético: "O robô pode guardar o que ouviu? Isso é fofoca ou dado?"
  • Para alunos com fala reduzida, use input de texto manual (modo alternativo).
👩‍🏫🧑‍🏫

Kit do Professor

Simulador de Reconhecimento de Fala

🎤🤖 "FALA AÍ, PIÁ!"
Clique no botão abaixo e permita o acesso ao microfone.
Resposta do Robô Fofoqueiro
Robô Fofoqueiro:
"Vixi, ainda não falou nada, piá! Fala alguma coisa aí!"
Tradução para Libras Textual
😶 Nada para traduzir...
Privacidade: As falas são processadas localmente pelo navegador. Nada é enviado para servidores externos (além da API de reconhecimento do Google).