Status: Concluído ✅
Arquitetura: CNN (ResNet50) + Transformer Decoder
Inferência: Beam Search (k=5) + Text-to-Speech
Aplicação: Tecnologia Assistiva para Deficientes Visuais
O Blind Assist AI é uma solução de Engenharia de Machine Learning focada em acessibilidade. O sistema utiliza Deep Learning para "enxergar" o mundo através de imagens e convertê-las em áudio descritivo para pessoas com deficiência visual.
Diferente de implementações básicas, este projeto implementa uma arquitetura Encoder-Decoder do zero, conectando uma ResNet (Visão) a um Transformer (Linguagem) através de mecanismos de Cross-Attention, finalizando com um pipeline de inferência robusto que evita repetições e sintetiza voz.
blind-assist-ai/
│
├── checkpoints/ # Pesos do modelo treinado (.pth)
│
├── data/
│ └── raw/ # Datasets
│
├── src/
│ ├── dataset.py # Custom Dataset (Tokenização CLIP + Padding)
│ ├── model.py # CaptionModel (ResNet + Transformer)
│ ├── train.py # Loop de treinamento
│ └── predict.py # Inferência (Beam Search + TTS)
│
├── requirements.txt # Dependências
│
└── README.md # Este arquivo
- PyTorch: Framework principal de Deep Learning
- Torchvision: ResNet50 pré-treinada
- Transformers (Native): Implementação nativa do Transformer Decoder
- CLIP Tokenizer: Vocabulário de ~49k tokens
- Beam Search: Algoritmo de busca em feixe
- Repetition Penalty: Penalização customizada
- gTTS (Google Text-to-Speech): Síntese de voz
- pydub: Manipulação de áudio
- Matplotlib: Visualizações
- Pillow: Processamento de imagens
- NumPy: Operações numéricas
A deficiência visual afeta milhões de pessoas globalmente. Este projeto demonstra como Deep Learning pode criar tecnologias assistivas que proporcionam maior autonomia e independência, permitindo que pessoas com deficiência visual "vejam" através de descrições auditivas.
Casos de Uso:
- 🏠 Navegação doméstica: Identificar objetos e pessoas
- 📸 Redes sociais: Descrever fotos de amigos e familiares
- 🛒 Compras: Identificar produtos e embalagens
- 🚶 Mobilidade: Descrever ambientes e obstáculos
- 📚 Educação: Acessibilizar conteúdo visual
Impacto:
- ✅ Aumenta autonomia e independência
- ✅ Reduz barreiras de acessibilidade
- ✅ Promove inclusão digital
- ✅ Melhora qualidade de vida
O sistema segue o paradigma Encoder-Decoder com Cross-Attention:
┌─────────────────────────────────────────────────────────────┐
│ INPUT IMAGE (224x224x3) │
└───────────────────────────┬─────────────────────────────────┘
│
┌───────────▼───────────┐
│ VISUAL ENCODER │
│ (ResNet50) │
│ Pretrained ImageNet │
└───────────┬───────────┘
│
[2048 x 7 x 7 features]
│
┌───────────▼───────────┐
│ Feature Projection │
│ 2048 → 512 │
└───────────┬───────────┘
│
[49 x 512 tokens]
│
├─────────────┐
│ │
┌───────────▼─────┐ ┌──▼──────────────┐
│ TRANSFORMER │ │ Cross-Attention│
│ DECODER │◄──┤ Mechanism │
│ (Autoregressive)│ └─────────────────┘
└───────────┬─────┘
│
[Generated Caption]
│
┌───────────▼───────────┐
│ BEAM SEARCH │
│ (k=5 paths) │
└───────────┬───────────┘
│
┌───────────▼───────────┐
│ TEXT-TO-SPEECH │
│ (gTTS) │
└───────────┬───────────┘
│
🔊 Audio Output
Backbone: ResNet50
- Pré-treinada na ImageNet (1.4M imagens)
- Extração de features sem a camada linear final
- Output:
(Batch, 2048, 7, 7)feature maps
Feature Projection:
# Achatar features espaciais: (B, 2048, 7, 7) → (B, 49, 2048)
features = features.flatten(2).permute(0, 2, 1)
# Projetar para dimensão do Transformer
features = linear_projection(features) # (B, 49, 512)Por que preservar informação espacial?
- Cada um dos 49 tokens representa uma região 32x32 da imagem original
- O Transformer pode "focar" em regiões específicas via attention
Tokenização:
- Tokenizer: CLIP (Contrastive Language-Image Pre-training)
- Vocabulário: ~49.000 tokens
- Tokens especiais:
<SOS>(Start),<EOS>(End),<PAD>
Transformer Nativo:
decoder_layer = nn.TransformerDecoderLayer(
d_model=512,
nhead=8,
dim_feedforward=2048,
dropout=0.1
)
decoder = nn.TransformerDecoder(decoder_layer, num_layers=6)Mecanismo de Cross-Attention:
- A cada palavra gerada, o decoder "olha" para regiões específicas da imagem
- Attention weights indicam qual região foi relevante para cada palavra
- Exemplo: "blond" → foca na região do cabelo
Beam Search (k=5):
Em vez de escolher apenas a próxima palavra mais provável (Greedy Decoding), o Beam Search explora 5 caminhos simultâneos:
Iteração 1: <SOS> → [this, a, the, woman, man]
Iteração 2: this → [person, man, woman, girl, boy]
a → [woman, man, person, girl, boy]
... (mantém os 5 melhores)
Iteração N: Score final de cada sequência completa
Seleciona a melhor
Vantagens:
- ✅ Frases mais coerentes globalmente
- ✅ Evita escolhas "míopes" do greedy
- ✅ Melhor qualidade de texto
Text-to-Speech (TTS):
from gtts import gTTS
tts = gTTS(text=caption, lang='en', slow=False)
tts.save('descricao_audio.mp3')CelebA (Celebrity Faces)
- 200k imagens de rostos de celebridades
- Atributos faciais como labels
- Adaptado para geração de descrições
Imagens:
transforms.Compose([
transforms.Resize(256),
transforms.CenterCrop(224),
transforms.ToTensor(),
transforms.Normalize(
mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225]
)
])Texto:
- Tokenização com CLIP Tokenizer
- Padding dinâmico até max_length
- Target shifting (professor forcing durante treino)
Cross-Entropy Loss com masking para padding:
loss = nn.CrossEntropyLoss(ignore_index=PAD_TOKEN)Técnicas Implementadas:
- ✅ Adam Optimizer: lr=1e-4
- ✅ Gradient Clipping: Evita explosão de gradientes (max_norm=5)
- ✅ Teacher Forcing: Durante treino, usa ground truth como entrada
- ✅ Learning Rate Scheduling: ReduceLROnPlateau
- ✅ Early Stopping: Paciência de 5 épocas
O modelo é capaz de capturar:
- ✅ Detalhes físicos: Cor de cabelo, formato de nariz, sobrancelhas
- ✅ Expressões: Sorrindo, sério, pensativo
- ✅ Acessórios: Óculos, chapéus, brincos
- ✅ Maquiagem: Batom, sombra, delineador
- ✅ Idade e gênero: Jovem, adulto, homem, mulher
git clone https://github.com/seu-usuario/blind-assist-ai.git
cd blind-assist-aipip install -r requirements.txtPara treinar do zero:
https://www.kaggle.com/datasets/kashyapkvh/mm-celeba-hq-datasetpython src/train.py --epochs 10 --save_dir ./checkpointsArgumentos de treinamento:
python src/train.py \
--epochs 20 \
--save_dir ./checkpointspython src/predict.py \
--image "caminho/para/imagem.jpg" \
--model_path "checkpoints/model_epoch_10.pth" \
--beam_width 5O script irá:
- ✅ Processar a imagem
- ✅ Gerar a legenda no terminal
- ✅ Salvar
descricao_audio.mp3na raiz do projeto
| Argumento | Descrição | Padrão |
|---|---|---|
--epochs |
Número de épocas | 10 |
--save_dir |
Diretório para salvar checkpoints | ./checkpoints |
| Argumento | Descrição | Padrão |
|---|---|---|
--image |
Caminho da imagem | - |
--model_path |
Caminho do checkpoint | checkpoints/best.pth |
--beam_width |
Largura do beam search | 5 |
# Deep Learning
torch>=2.0.0
torchvision>=0.15.0
# NLP
transformers>=4.30.0
clip>=1.0
# Text-to-Speech
gtts>=2.3.0
pydub>=0.25.0
# Image Processing
pillow>=10.0.0
opencv-python>=4.8.0
# Utilities
numpy>=1.24.0
tqdm>=4.66.0
# Visualization
matplotlib>=3.7.0
- Interface para captura de fotos em tempo real
- Botão de acessibilidade para ativar descrição
- Integração com câmera do smartphone
- Modo offline com modelo otimizado
- Visualizar onde o modelo "focou" para gerar cada palavra
- Heatmaps sobrepondo a imagem original
- Análise de interpretabilidade do modelo
- Tradução automática da descrição para PT-BR
- Síntese de voz em português
- Tokenizer multilíngue (mBERT)
- Pipeline híbrido: YOLO → Detectar objetos → Descrever cena
- Descrições mais estruturadas (lista de objetos + relações espaciais)
- Exemplo: "Na esquerda há uma cadeira, no centro uma mesa..."
- Reinforcement Learning from Human Feedback
- Usuários avaliam qualidade das descrições
- Modelo aprende preferências humanas
- Arquitetura Encoder-Decoder: Implementação completa de multimodalidade (visão + linguagem)
- Cross-Attention: Mecanismo que permite o decoder "focar" em regiões da imagem
- Beam Search: Inferência mais sofisticada que greedy decoding
- Teacher Forcing: Técnica essencial para treinar modelos autoregressivos
- Gradient Clipping: Crucial para estabilidade em Transformers
- Tecnologia Assistiva: Aplicação prática de AI para impacto social positivo
O Blind Assist AI demonstra com sucesso a aplicação de Deep Learning multimodal para criar tecnologia assistiva, conectando visão computacional e processamento de linguagem natural.
Conquistas:
- ✅ Arquitetura Encoder-Decoder completa implementada do zero
- ✅ Beam Search para geração de texto de alta qualidade
- ✅ Pipeline end-to-end: Imagem → Texto → Áudio
- ✅ Mecanismos de atenção para interpretabilidade
Impacto Social:
- 🌍 Potencial de melhorar a vida de milhões de pessoas com deficiência visual
- 🤝 Tecnologia assistiva acessível e escalável
- 📱 Base para aplicativos mobile de acessibilidade
Este projeto serve como demonstração de como Deep Learning pode ser usado para resolver problemas reais de acessibilidade e inclusão, com potencial de impacto social significativo.
Álvaro Braz
Projeto desenvolvido para fins de estudo, pesquisa e portfólio profissional em Deep Learning, Multimodalidade e Tecnologia Assistiva.
- OpenAI CLIP: Por tokenizer e embeddings multimodais
- PyTorch Team: Framework excepcional
- gTTS: Síntese de voz acessível
- Comunidade de Acessibilidade: Por feedback sobre necessidades reais
- Vaswani et al. (2017): Paper original "Attention is All You Need"
- Vaswani, A., et al. (2017). Attention is All You Need. NeurIPS.
- Xu, K., et al. (2015). Show, Attend and Tell: Neural Image Caption Generation with Visual Attention. ICML.
- Anderson, P., et al. (2018). Bottom-Up and Top-Down Attention for Image Captioning. CVPR.
- Radford, A., et al. (2021). Learning Transferable Visual Models From Natural Language Supervision. ICML.
Este projeto é desenvolvido para fins educacionais e de pesquisa. Para uso em produção como tecnologia assistiva real, seria necessário:
- ✅ Validação extensiva com usuários com deficiência visual
- ✅ Certificação de acessibilidade
- ✅ Testes de robustez em diferentes condições
- ✅ Considerações de privacidade e segurança
- ✅ Otimização para dispositivos móveis

