Skip to content

iaglourenco/van-gogh

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

License

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages