Bem-vindo(a) ao post no blog.
E se você pudesse digitar uma pergunta bíblica e receber uma resposta
inteligente, com voz, em tempo real — direto no navegador? 🤯
Foi exatamente isso que construímos aqui na
Academy Code Christ: um
Assistente Bíblico com Inteligência Artificial,
desenvolvido do zero com Python,
Flask e HTML/CSS/JS —
com respostas em voz usando a própria API do navegador.
Neste post, você vai entender como funciona por dentro,
quais tecnologias usamos e como você também pode criar o seu.
Vamos nessa? ✝️💻
🤖 O Que é o Assistente Bíblico IA?
O Assistente Bíblico IA é uma aplicação web que permite
ao usuário fazer perguntas sobre a Bíblia — como:
- 📖 "Qual é o versículo mais famoso da Bíblia?"
- 🙏 "O que a Bíblia fala sobre ansiedade?"
- ✝️ "Quem foi Moisés?"
- 💡 "Qual é a diferença entre graça e misericórdia?"
E receber respostas inteligentes — baseadas em uma base de conhecimento
bíblico — com texto e voz simultâneos. 🎙️
🛠️ Tecnologias Utilizadas
| Tecnologia |
Função no Projeto |
| 🐍 Python 3 |
Backend principal da aplicação |
| ⚙️ Flask |
Servidor web leve e rápido |
| 🗃️ SQLite |
Base de dados com versículos (NVI) |
| 🌐 HTML + CSS |
Interface visual do assistente |
| ⚡ JavaScript |
Comunicação com o servidor + voz |
| 🎙️ Web Speech API |
Leitura das respostas em voz alta |
⚙️ Como Funciona Por Dentro?
A arquitetura do projeto segue um fluxo simples e poderoso:
👤 Usuário digita a pergunta
⬇️
🌐 JavaScript envia via fetch() para o Flask
⬇️
🐍 Python processa a pergunta
⬇️
🗃️ SQLite busca versículos relacionados
⬇️
📄 Arquivos .txt adicionam contexto teológico
⬇️
💬 Resposta é gerada e enviada ao navegador
⬇️
🎙️ Web Speech API lê a resposta em voz alta
💻 Trecho de Código — O Coração do Projeto
Veja como é simples a rota principal no Flask:
from flask import Flask, request, jsonify
import sqlite3
app = Flask(__name__)
# Rota que recebe a pergunta do usuário
@app.route('/perguntar', methods=['POST'])
def perguntar():
dados = request.get_json()
pergunta = dados['pergunta']
# Busca na base bíblica
resposta = buscar_na_biblia(pergunta)
return jsonify({'resposta': resposta})
if __name__ == '__main__':
app.run(debug=True)
E no JavaScript, o envio da pergunta é feito assim:
// Envia pergunta e lê resposta em voz
async function perguntar() {
const pergunta =
document.getElementById('input').value;
const res = await fetch('/perguntar', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({ pergunta })
});
const dados = await res.json();
// Lê em voz alta 🎙️
const voz = new SpeechSynthesisUtterance(dados.resposta);
voz.lang = 'pt-BR';
speechSynthesis.speak(voz);
}
🧠 Como Criar uma IA Bíblica com Python (Passo a Passo Completo)
A inteligência artificial está cada vez mais presente no nosso dia a dia.
Mas você já imaginou usar IA para estudar a Bíblia de forma inteligente?
Neste artigo, você vai aprender como criar uma IA bíblica com Python, capaz de:
- 📖 Encontrar versículos automaticamente
- 🧠 Entender perguntas usando análise de texto
- 🔊 Ler versículos em voz alta
- 🖼️ Gerar imagens com textos bíblicos
E o melhor: tudo isso rodando no seu próprio computador.
Escopo do projeto 1
import pandas as pdimport sqlite3import stringimport unidecodefrom sklearn.feature_extraction.text import TfidfVectorizerfrom sklearn.metrics.pairwise import cosine_similarityfrom colorama import init, Fore, Styleimport tkinter as tkfrom tkinter import messageboximport pyttsx3 # Biblioteca para from PIL import Image, ImageDraw, ImageFontimport os
init(autoreset=True)
# Inicializar o engine de fala (pyttsx3)engine = pyttsx3.init()
# Configuração do som (ajuste de velocidade e volume, se necessário)engine.setProperty('rate', 150) # Velocidadeengine.setProperty('volume', 1) # Volume (0.0 a 1.0)
# Conectar ao banco de dados SQLiteconexao = sqlite3.connect('Projetos-Python/NVI.sqlite')
# Carregar os versículos da tabela 'verse'versos = pd.read_sql("SELECT * FROM verse;", conexao)livros = pd.read_sql("SELECT * FROM book;", conexao)
# Juntar nome do livro aos versículosversiculos_completos = versos.merge(livros, left_on='book_id', right_on='id')
# Normalizar texto (remover acentos, caixa, pontuação etc.)def normalizar(texto): texto = unidecode.unidecode(texto.lower()) texto = texto.translate(str.maketrans('', '', string.punctuation)) return texto
# Transformar textos em vetores TF-IDFtextos_versiculos = versiculos_completos['text'].apply(normalizar).valuestfidf = TfidfVectorizer(stop_words='english')tfidf_matrix = tfidf.fit_transform(textos_versiculos)
# Função para gerar imagem do versículodef gerar_imagem_versiculo(nome, cap, vers, texto): largura = 1080 altura = 1080 margem = 80
# Criar imagem com degradê img = Image.new("RGB", (largura, altura), "#FFFFFF") draw = ImageDraw.Draw(img)
# Degradê vertical (do azul claro pro branco) for y in range(altura): r = int(255 - (y / altura) * 30) g = int(255 - (y / altura) * 80) b = int(255 - (y / altura) * 120) draw.line([(0, y), (largura, y)], fill=(r, g, b))
# Carregar fontes personalizadas try: fonte_versiculo = ImageFont.truetype("fonte.ttf", 50) fonte_referencia = ImageFont.truetype("fonte.ttf", 30) except: fonte_versiculo = ImageFont.load_default() fonte_referencia = ImageFont.load_default()
# Função para quebrar texto def quebra_texto(texto, fonte, largura_max): palavras = texto.split() linhas = [] linha = "" for palavra in palavras: teste = f"{linha} {palavra}".strip() if draw.textlength(teste, font=fonte) <= largura_max: linha = teste else: linhas.append(linha) linha = palavra if linha: linhas.append(linha) return linhas
# Preparar o texto linhas = quebra_texto(texto, fonte_versiculo, largura - 2 * margem) referencia = f"{nome} {cap}:{vers}"
# Centralizar verticalmente altura_texto = len(linhas) * 60 y = (altura - altura_texto) // 2
# Desenhar versículo for linha in linhas: largura_linha = draw.textlength(linha, font=fonte_versiculo) draw.text(((largura - largura_linha) / 2, y), linha, font=fonte_versiculo, fill="white") y += 60
# Desenhar referência no rodapé largura_ref = draw.textlength(referencia, font=fonte_referencia) draw.text(((largura - largura_ref) / 2, altura - 100), referencia, font=fonte_referencia, fill="white")
# Salvar imagem pasta = "versiculos_img" if not os.path.exists(pasta): os.makedirs(pasta) nome_arquivo = f"{pasta}/{nome.replace(' ', '_')}_{cap}_{vers}.png" img.save(nome_arquivo)
return nome_arquivo
# Função para responder perguntadef responder_pergunta(pergunta, ja_mostrados): pergunta_limpa = normalizar(pergunta) pergunta_tfidf = tfidf.transform([pergunta_limpa]) similaridade = cosine_similarity(pergunta_tfidf, tfidf_matrix)
# Pegar os top 3 resultados (que ainda não foram mostrados) indices = similaridade[0].argsort()[::-1] respostas = [] for i in indices: if i not in ja_mostrados: vers = versiculos_completos.iloc[i] respostas.append({ 'nome': vers['name'], 'cap': vers['chapter'], 'vers': vers['verse'], 'texto': vers['text'] }) ja_mostrados.add(i) if len(respostas) == 3: break
return respostas
# Função que atualiza a interface gráfica com os resultadosdef buscar_pergunta(): pergunta = entrada_pergunta.get() if pergunta.lower() == 'sair': janela.quit() return
ja_mostrados = set() respostas = responder_pergunta(pergunta, ja_mostrados)
if respostas: resultado_texto = "" for r in respostas: resultado_texto += f"\n📖 {r['nome']} {r['cap']}:{r['vers']} - {r['texto']}\n" # Exibir os resultados resultado_label.config(text=resultado_texto) # Falar o(s) versículo(s) for r in respostas: versiculo_texto = f"{r['nome']} {r['cap']}:{r['vers']} - {r['texto']}" engine.say(versiculo_texto) # Adiciona o texto à fila de fala engine.runAndWait() # Fala tudo de uma vez # Gerar imagem do primeiro versículo como exemplo imagem_path = gerar_imagem_versiculo(respostas[0]['nome'], respostas[0]['cap'], respostas[0]['vers'], respostas[0]['texto']) messagebox.showinfo("Imagem criada", f"📸 Imagem salva em:\n{imagem_path}")
else: messagebox.showinfo("Resultado", f"{Fore.RED}❌ Nenhum versículo relevante encontrado.")
# Criando a interface gráfica com tkinterjanela = tk.Tk()janela.title("Assistente Bíblico")janela.geometry("500x400")
# Títulotitulo_label = tk.Label(janela, text="🔎 Pergunte algo sobre a Bíblia", font=("Arial", 16))titulo_label.pack(pady=10)
# Caixa de texto para digitar a perguntaentrada_pergunta = tk.Entry(janela, width=40, font=("Arial", 12))entrada_pergunta.pack(pady=10)
# Botão para buscarbotao_buscar = tk.Button(janela, text="Buscar", command=buscar_pergunta, font=("Arial", 12))botao_buscar.pack(pady=10)
# Área para mostrar o resultadoresultado_label = tk.Label(janela, text="", font=("Arial", 12), justify="left", padx=10, pady=10)resultado_label.pack(pady=20)
# Iniciar o loop principal da interfacejanela.mainloop()
⚙️ Tecnologias utilizadas
Para construir esse projeto, utilizamos:
- Python
- SQLite (banco de dados bíblico)
- Pandas (manipulação de dados)
- Scikit-learn (IA simples com TF-IDF)
- Tkinter (interface gráfica)
- pyttsx3 (voz offline)
- Pillow (geração de imagens)
🧠Explicação:
import pandas as pd
👉 Biblioteca pra trabalhar com dados tipo tabela (DataFrame)
👉 Aqui você usa pra ler o banco SQLite
import sqlite3
👉 Permite conectar no banco de dados .sqlite (onde estão os versículos)
import string
👉 Usado pra pegar lista de pontuações (.,!? etc)
import unidecode
👉 Remove acentos
Ex:
“fé” → “fe”
“oração” → “oracao”
from sklearn.feature_extraction.text import TfidfVectorizer
👉 Transforma texto em números (vetores)
👉 É o coração da sua “IA”
from sklearn.metrics.pairwise import cosine_similarity
👉 Mede o quão parecidos dois textos são
from colorama import init, Fore, Style
👉 Cores no terminal (não muito usado aqui na prática)
import tkinter as tk
from tkinter import messagebox
👉 Cria interface gráfica (janelinha)
import pyttsx3
👉 Faz o computador falar (voz offline)
from PIL import Image, ImageDraw, ImageFont
👉 Cria imagens (tipo os versículos bonitos)
import os
👉 Trabalha com arquivos e pastas
⚙️ 2. CONFIGURAÇÃO INICIAL
init(autoreset=True)
👉 Ativa colorama e reseta cores automaticamente
engine = pyttsx3.init()
👉 Inicializa o sistema de voz
engine.setProperty('rate', 150)
👉 Velocidade da fala
engine.setProperty('volume', 1)
👉 Volume máximo
🗄️ 3. BANCO DE DADOS
conexao = sqlite3.connect('Projetos-Python/NVI.sqlite')
👉 Conecta no banco da Bíblia
versos = pd.read_sql("SELECT * FROM verse;", conexao)
👉 Pega todos os versículos
livros = pd.read_sql("SELECT * FROM book;", conexao)
👉 Pega os nomes dos livros
versiculos_completos = versos.merge(livros, left_on='book_id', right_on='id')
👉 Junta tudo
Resultado:
Gênesis 1:1 + texto
🧹 LIMPEZA DE TEXTO (MUITO IMPORTANTE)
def normalizar(texto):
👉 Cria função pra limpar texto
texto = unidecode.unidecode(texto.lower())
👉 Tudo minúsculo + sem acento
texto = texto.translate(str.maketrans('', '', string.punctuation))
👉 Remove pontuação
return texto
👉 Retorna texto limpo
🧠 TRANSFORMAR TEXTO EM “IA”
textos_versiculos = versiculos_completos['text'].apply(normalizar).values
👉 Pega todos os versículos e limpa
tfidf = TfidfVectorizer(stop_words='english')
👉 Cria o modelo
⚠️ OBS: aqui tem erro (depois te explico)
tfidf_matrix = tfidf.fit_transform(textos_versiculos)
👉 Converte TODOS os versículos em números
👉 Isso vira o “cérebro” da busca
🖼️ FUNÇÃO DE GERAR IMAGEM
def gerar_imagem_versiculo(nome, cap, vers, texto):
👉 Função que cria imagem do versículo
img = Image.new("RGB", (largura, altura), "#FFFFFF")
👉 Cria imagem branca
draw = ImageDraw.Draw(img)
👉 Permite desenhar na imagem
🎨 Gradiente
for y in range(altura):
👉 Loop linha por linha
draw.line([(0, y), (largura, y)], fill=(r, g, b))
👉 Desenha cor → cria degradê
🔤 Fonte
ImageFont.truetype("fonte.ttf", 50)
👉 Usa fonte personalizada
Se falhar:
ImageFont.load_default()
🧩 Quebra de texto
def quebra_texto(...)
👉 Divide texto em várias linhas
👉 Pra não estourar a imagem
🧾 Desenhar texto
draw.text(...)
👉 Escreve o versículo na imagem
💾 Salvar
img.save(nome_arquivo)
👉 Salva no computador
🤖 FUNÇÃO PRINCIPAL (IA)
def responder_pergunta(pergunta, ja_mostrados):
👉 Aqui acontece a “mágica”
pergunta_limpa = normalizar(pergunta)
👉 Limpa a pergunta
pergunta_tfidf = tfidf.transform([pergunta_limpa])
👉 Converte pergunta em vetor
similaridade = cosine_similarity(pergunta_tfidf, tfidf_matrix)
👉 Compara com TODOS versículos
indices = similaridade[0].argsort()[::-1]
👉 Ordena do mais parecido → menos parecido
for i in indices:
👉 Loop pelos melhores
vers = versiculos_completos.iloc[i]
👉 Pega versículo correspondente
respostas.append({...})
👉 Guarda resposta
if len(respostas) == 3:
break
👉 Limita a 3 resultados
🖥️ INTERFACE (INTERAÇÃO COM USUÁRIO)
def buscar_pergunta():
👉 Função chamada quando clica no botão
pergunta = entrada_pergunta.get()
👉 Pega o que o usuário digitou
respostas = responder_pergunta(...)👉 Chama a IA
📺 Mostrar resultado
resultado_label.config(text=resultado_texto)
👉 Atualiza a tela
🔊 Falar
engine.say(versiculo_texto)
👉 Adiciona fala
engine.runAndWait()
👉 Executa fala
🖼️ Gerar imagem
gerar_imagem_versiculo(...)
👉 Cria imagem automaticamente
💬 Popup
messagebox.showinfo(...)
👉 Mostra mensagem na tela
CRIAÇÃO DA JANELA
janela = tk.Tk()
👉 Cria app
janela.title("Assistente Bíblico")
👉 Título
janela.geometry("500x400")
👉 Tamanho
🧾 Elementos
Label = texto
Entry = campo de digitação
Button = botão
botao_buscar = tk.Button(..., command=buscar_pergunta)
👉 Quando clicar → roda a função
🔁 LOOP FINAL
janela.mainloop()👉 Mantém o programa rodando
Escopo do projeto 2 ( É o mesmo, mas com algumas alterações)
import osimport pandas as pdimport sqlite3import stringimport unidecodefrom sklearn.feature_extraction.text import TfidfVectorizerfrom sklearn.metrics.pairwise import cosine_similarityfrom colorama import init, Fore, Styleimport tkinter as tkfrom tkinter import messageboximport pyttsx3
📚 O Que Você Aprende Construindo Este Projeto?
🐍 Python
Lógica de programação, funções, leitura de arquivos e banco de dados
⚙️ Flask
Criação de APIs REST, rotas, métodos POST e integração com frontend
⚡ JavaScript
Fetch API, manipulação do DOM e Web Speech API para síntese de voz
🗃️ SQLite
Modelagem e consulta de banco de dados relacional com Python
✝️ Tecnologia a Serviço da Fé
Esse projeto nasceu de uma crença simples:
a tecnologia pode — e deve — servir a propósitos maiores.
Quando um jovem programador percebe que pode usar suas habilidades para
criar algo que aproxima pessoas da Palavra de Deus, o código deixa de
ser apenas código — vira missão. 🙏
É isso que a Academy Code Christ representa:
aprender a programar com propósito, com fé e com impacto real.
🚀 Quer Criar o Seu Próprio Assistente?
Acompanhe a Academy Code Christ e aprenda passo a passo
como construir projetos reais com Python, Flask e muito mais.
📖 Ver mais projetos
📚 Continue Aprendendo:
Esse conteúdo faz parte do projeto Academy Code Christ, criado para ajudar iniciantes a aprender programação de forma gratuita e direta.
Se esse conteúdo te ajudou, você pode me pagar um café ☕
Pix: antropologiacrista@gmail.com
Comentários
Postar um comentário