Skip to content

Repository files navigation

AG Van Gogh

Python OpenCV GPU License

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.

Formas geométricas

Evolução 1 Evolução 3

Evolução 4 Evolução 5

Rosto humano

Evolução 6 Evolução 7

Descriçã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.

Características

  • 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

Estrutura do Projeto

├── 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

Instalação

Pré-requisitos

  • Python 3.12+
  • CUDA Toolkit (opcional, para aceleração GPU)

Dependências

pip install -r requirements.txt

Como Usar

  1. Configure os parâmetros no arquivo config.py
  2. Coloque a imagem-alvo na pasta images/
  3. Execute o algoritmo:
python main.py

Configuração

Principais 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 trabalho

Algoritmo

O algoritmo genético implementa:

  1. Inicialização: Criação da população inicial com formas geométricas aleatórias
  2. Avaliação: Cálculo de fitness por comparação MSE com a imagem-alvo
  3. Seleção: Seleção por torneio ou seleção aleatória dos indivíduos
  4. Crossover: Cruzamento de ponto único ou uniforme entre pais selecionados
  5. Mutação: Alteração aleatória das propriedades das formas (posição, cor, tamanho)
  6. Elitismo: Preservação dos melhores indivíduos para a próxima geração

Implementação

Classes Principais

  • 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)

Componentes

  • 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

Resultados

O algoritmo gera:

  • Imagens da evolução salvas em output/
  • GIF animado do processo evolutivo
  • Logs de progresso com estatísticas de fitness

Problemas Conhecidos

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.

Contexto Acadêmico

Desenvolvido como parte do Tech Challenge da Pós-Graduação em Inteligência Artificial da FIAP.


Licença

MIT License

About

Implementação de algoritmos genéticos para evolução de imagens usando formas geométricas primitivas.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Used by

Contributors

Languages