Como Criar um Sistema de Recomendação Baseado em Imagens com Python e IA
Sistemas de recomendação tradicionais dependem fortemente de metadados textuais, tags e histórico de cliques. No entanto, em setores como e-commerce de moda, decoração e marketplaces de produtos visuais, as palavras-chave raramente capturam nuances estéticas como textura, padrão, corte ou proporção. Quando o catálogo cresce, a anotação manual torna-se inviável e propensa a inconsistências, resultando em recomendações imprecisas e perda de conversão.
A solução técnica para essa lacuna é a recomendação puramente visual orientada por Deep Learning. Ao extrair representações matemáticas diretamente dos pixels de uma imagem, o sistema consegue identificar similaridades visuais complexas sem depender de uma única linha de texto descritivo.
Como Funciona a Recomendação Visual: Do Pixel ao Vetor
O núcleo de um sistema de recomendação por imagem baseia-se em Image Embeddings (vetores de características densos). Uma rede neural convolucional (CNN) pré-treinada ou um modelo de visão computacional moderno (como Vision Transformers ou CLIP) processa a imagem e transforma seus atributos visuais em um vetor numérico de dimensões fixas (por exemplo, 512 ou 2048 dimensões).
Imagens com características semelhantes (como dois tênis esportivos pretos com sola branca) são projetadas em regiões próximas dentro desse espaço vetorial multidimensional.
[Imagem de Entrada]↓ (Rede Neural / Feature Extractor)
[Vetor de Características (Embedding)]
↓ (Índice de Busca Vetorial / Faiss)
[K-Vizinhos Mais Próximos (Recomendações)]
Arquitetura e Pipeline em Python
Para construir uma solução de alto desempenho e baixa latência de inferência, o pipeline divide-se em duas etapas: Extração de Embeddings (Offline/Batch) e Busca por Similaridade em Tempo Real (Online).
1. Extração de Características com PyTorch
Utilizamos uma arquitetura consolidada, como uma ResNet50 ou EfficientNet, removendo a última camada de classificação (a camada densa final) para obter diretamente o vetor de atributos:
python
import torch
import torchvision.models as models
import torchvision.transforms as transforms
from PIL import Image
Carregando modelo pré-treinado sem a camada final de classificação
model = models.resnet50(weights=models.ResNet50Weights.DEFAULT)
model.eval()
featureextractor = torch.nn.Sequential(*list(model.children())[:-1])
transform = 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]),
])
def extractfeatures(imagepath):
image = Image.open(imagepath).convert(‘RGB’)
tensor = transform(image).unsqueeze(0)
with torch.nograd():
embedding = feature_extractor(tensor)
return embedding.squeeze().numpy()
2. Busca Rápida de Similaridade com Faiss
Calcular a distância euclidiana ou similaridade de cosseno de forma bruta contra milhões de imagens em tempo real degrada o tempo de resposta da aplicação. Para garantir consultas em milissegundos, utilizamos bibliotecas de busca vetorial aproximada (ANN – Approximate Nearest Neighbors), como o Faiss (Facebook AI Similarity Search):
python
import faiss
import numpy as np
dimension = 2048 # Dimensão do embedding da ResNet50
index = faiss.IndexFlatIP(dimension) # Similaridade por Produto Interno (Normalizado = Cosseno)
Supondo embeddings_matrix como array float32 já normalizado
faiss.normalizeL2(embeddingsmatrix)
index.add(embeddings_matrix)
Busca das 5 imagens mais similares para um novo item
def findsimilar(queryembedding, k=5):
query = np.expanddims(queryembedding, axis=0).astype(‘float32’)
faiss.normalize_L2(query)
distances, indices = index.search(query, k)
return indices[0], distances[0]
Otimização para Ambientes de Produção
Como especialista em IA, observo com frequência que protótipos funcionais falham ao enfrentar catálogos reais com centenas de milhares de produtos. Para assegurar estabilidade e baixo custo operacional, algumas práticas de engenharia são fundamentais:
- Indexação HNSW ou IVF: Para bases com mais de 100 mil itens, índices quantizados (
IndexIVFFlatouIndexHNSWFlat) reduzem o consumo de memória RAM em até 80% mantendo uma precisão superior a 95%. - Extração Assíncrona: A geração de embeddings de novos produtos deve ocorrer em segundo plano (via filas assíncronas com Celery ou Redis), evitando travar operações de inventário.
- Quantização de Modelos (TensorRT/ONNX Runtime): Otimizar o modelo de visão com ONNX acelera a inferência da imagem de consulta de dezenas de milissegundos para menos de 10ms por requisição.
Transforme seu Catálogo em um Motor de Vendas Inteligente
Implementar uma infraestrutura de recomendação baseada em imagens não apenas melhora a experiência de navegação do usuário, mas aumenta a retenção e o ticket médio ao exibir produtos genuinamente relevantes no momento certo.
Se a sua empresa precisa de uma arquitetura personalizada de Inteligência Artificial e busca vetorial de alta precisão integrada aos seus sistemas legados, entre em contato para uma consultoria técnica especializada e descubra como desenhar a solução ideal para a sua infraestrutura.


