Implementação de algoritmos genéticos para evolução de imagens usando formas geométricas primitivas.
Veja algumas evoluções geradas pelo algoritmo genético:
À direita a imagem-alvo, à esquerda a evolução.
Este projeto utiliza algoritmos genéticos para evoluir imagens compostas por formas geométricas simples (círculos, triângulos e retângulos) até que se assemelhem a uma imagem-alvo. O algoritmo emprega conceitos de seleção natural, mutação, crossover e elitismo para gerar arte generativa.
- Suporte GPU: Aceleração CUDA para avaliação de fitness
- Processamento paralelo: Utiliza múltiplos núcleos da CPU
- Interface gráfica: Visualização em tempo real com Pygame
- Paleta inteligente: Extração automática de cores usando K-Means
- Múltiplas estratégias: Seleção por torneio/aleatória, crossover de ponto único/uniforme
├── config.py # Parâmetros de configuração
├── main.py # Aplicação principal
├── individual.py # Classe Individual (cromossomo)
├── shape.py # Classes de formas geométricas
├── genetic_ops.py # Operadores genéticos
├── image_utils.py # Processamento de imagens
└── requirements.txt # Dependências
- Python 3.12+
- CUDA Toolkit (opcional, para aceleração GPU)
pip install -r requirements.txt- Configure os parâmetros no arquivo
config.py - Coloque a imagem-alvo na pasta
images/ - Execute o algoritmo:
python main.pyPrincipais parâmetros em config.py:
# Parâmetros evolutivos
POPULATION_SIZE = 500 # Tamanho da população
NUM_GENERATIONS = 1000 # Número de gerações
MUTATION_RATE = 0.04 # Taxa de mutação
NUM_SHAPES = 20 # Formas por indivíduo
# Seleção e crossover
SELECTION_METHOD = "tournament" # "tournament" ou "random"
CROSSOVER_METHOD = "uniform" # "single_point" ou "uniform"
# Imagem
IMAGE_PATH = "images/alvo1.png" # Caminho da imagem-alvo
IMAGE_SIZE = (128, 128) # Resolução de trabalhoO algoritmo genético implementa:
- Inicialização: Criação da população inicial com formas geométricas aleatórias
- Avaliação: Cálculo de fitness por comparação MSE com a imagem-alvo
- Seleção: Seleção por torneio ou seleção aleatória dos indivíduos
- Crossover: Cruzamento de ponto único ou uniforme entre pais selecionados
- Mutação: Alteração aleatória das propriedades das formas (posição, cor, tamanho)
- Elitismo: Preservação dos melhores indivíduos para a próxima geração
Individual: Representa um cromossomo (lista de formas)Shape: Classe base para formas geométricas (Circle, Rectangle, Triangle)genetic_ops.py: Implementa operadores genéticos (seleção, crossover, mutação)
- Renderização: OpenCV para desenho eficiente das formas
- Fitness: Comparação MSE entre imagem renderizada e imagem-alvo
- Aceleração: Suporte CUDA para avaliação paralela
- Interface: Pygame para visualização em tempo real
O algoritmo gera:
- Imagens da evolução salvas em
output/ - GIF animado do processo evolutivo
- Logs de progresso com estatísticas de fitness
Apesar do bom desempenho ao reproduzir imagens com formas geométricas bem definidas, o algoritmo apresenta dificuldades para reproduzir imagens complexas, como rostos humanos. Além disso, ao aumentar a quantidade de formas, o tempo de processamento cresce consideravelmente.
Desenvolvido como parte do Tech Challenge da Pós-Graduação em Inteligência Artificial da FIAP.





