Aprenda a Programar IA Bíblica

           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 pd
import sqlite3
import string
import unidecode
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
from colorama import init, Fore, Style
import tkinter as tk
from tkinter import messagebox
import pyttsx3  # Biblioteca para 
from PIL import Image, ImageDraw, ImageFont
import 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)  # Velocidade
engine.setProperty('volume', 1)  # Volume (0.0 a 1.0)

# Conectar ao banco de dados SQLite
conexao = 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ículos
versiculos_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-IDF
textos_versiculos = versiculos_completos['text'].apply(normalizar).values
tfidf = TfidfVectorizer(stop_words='english')
tfidf_matrix = tfidf.fit_transform(textos_versiculos)

# Função para gerar imagem do versículo
def 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 pergunta
def 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 resultados
def 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 tkinter
janela = tk.Tk()
janela.title("Assistente Bíblico")
janela.geometry("500x400")

# Título
titulo_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 pergunta
entrada_pergunta = tk.Entry(janela, width=40, font=("Arial", 12))
entrada_pergunta.pack(pady=10)

# Botão para buscar
botao_buscar = tk.Button(janela, text="Buscar", command=buscar_pergunta, font=("Arial", 12))
botao_buscar.pack(pady=10)

# Área para mostrar o resultado
resultado_label = tk.Label(janela, text="", font=("Arial", 12), justify="left", padx=10, pady=10)
resultado_label.pack(pady=20)

# Iniciar o loop principal da interface
janela.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 os
import pandas as pd
import sqlite3
import string
import unidecode
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
from colorama import init, Fore, Style
import tkinter as tk
from tkinter import messagebox
import 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

Postagens mais visitadas