Todos nós temos um tesouro de fotos antigas transmitidas por nossos pais, avós e assim por diante. Muitas vezes, essas fotos são em preto e branco e, às vezes, desejamos dar vida a elas em cores. Existem vários sites online onde você pode conseguir isso com apenas alguns cliques diretamente no seu navegador. No entanto, o problema com estes sites reside nas suas muitas restrições em termos de quantidade e qualidade.
Além disso, esses serviços geralmente exigem registro e assinaturas, o que pode ser bastante frustrante.
Neste post, gostaria de compartilhar como você pode colorir qualquer número de fotos usando a fantástica ferramenta DeOldify , sem o incômodo de limitações, registros ou assinaturas.
O DeOldify tem uma introdução incrível e você pode usá-la, mas para pessoas não preparadas pode parecer um pouco difícil. Aqui, gostaria de demonstrar uma maneira mais simples de usar DeOldify .
Para começar, você precisará de um computador com Linux ou macOS . Se estiver usando o Windows , você ainda pode continuar utilizando o Windows Subsystem for Linux (WSL) .
Há uma lista de pacotes necessários para o Ubuntu :
sudo apt update sudo apt install python3-pip wget git ffmpeg libsm6 libxext6
Você pode usar a lista como referência se tiver outra distribuição Linux .
Para macOS (infelizmente, esta é uma lista aproximada, pois não tenho um macOS claro para teste):
brew install python wget git ffmpeg libsm libxext
A próxima etapa é criar uma pasta separada chamada Sandbox para fazer tudo. Você pode escolher qualquer outro nome ou até mesmo optar por não criar nada e pular esta etapa completamente.
# Optional mkdir Sandbox cd Sandbox
Em seguida, clone o DeOldify :
git clone https://github.com/jantic/DeOldify.git
DeOldify não possui releases ou tags, o que significa que trabalhamos com o branch master . Acredito que tudo deve funcionar com o master mais recente a qualquer momento. Mas, por precaução, aqui está um número de revisão com o qual testei tudo:
be725ca6c5f411c47550df951546537d7202c9bc . Se quiser, você pode conferir:
# Optional cd DeOldify git checkout be725ca6c5f411c47550df951546537d7202c9bc cd ..
Depois disso, instale todas as dependências do Python:
pip3 install --user -r DeOldify/requirements.txt pip3 install --user -r DeOldify/requirements-colab.txt pip3 install --user -r DeOldify/requirements-dev.txt
A seguir, crie um diretório para os modelos e baixe o modelo:
mkdir -p DeOldify/models wget https://data.deepai.org/deoldify/ColorizeArtistic_gen.pth -O DeOldify/models/ColorizeArtistic_gen.pth
É isso! O ambiente está pronto; a parte mais difícil ficou para trás. Agora, vamos escrever um pouco de código Python.
A função mais interessante e útil para nós é ModelImageVisualizer.plot_transformed_image() .
Tudo o que precisamos fazer é escrever código em torno disso.
Aqui está minha implementação:
#!/usr/bin/python3 from deoldify import device from deoldify.device_id import DeviceId # choices: CPU, GPU0...GPU7 device.set(device=DeviceId.GPU0) from deoldify.visualize import * import warnings import sys import os warnings.filterwarnings("ignore", category=UserWarning, message=".*?Your .*? set is empty.*?") # Play with this constant! render_factor = 35 input_dir = sys.argv[1] output_dir = sys.argv[2] if not os.path.isdir(input_dir): print("input directory is not a directory or not exist") sys.exit(1) if os.path.exists(output_dir): print("out directory is already exist") sys.exit(1) os.makedirs(output_dir) root_dir = Path(os.environ['PYTHONPATH']) colorizer = get_image_colorizer(root_folder=root_dir, artistic=True) for filename in os.listdir(input_dir): f = os.path.join(input_dir, filename) if os.path.isfile(f) and (f.endswith(".png") or f.endswith(".jpg") or f.endswith(".jpeg")): image_path = colorizer.plot_transformed_image( path=f, results_dir=Path(output_dir), render_factor=render_factor, compare=True, watermarked=False ) print("{} ready".format(image_path))
Sinta-se à vontade para copiar, colar e modificá-lo como quiser.
O script lê todas as imagens .png
, .jpg
e .jpeg
do diretório passado como o primeiro argumento do script e as colore, salvando os resultados no diretório passado como o segundo argumento do script. Observe que o diretório de saída não deve existir; o script o cria sozinho. Salvei o script no arquivo Sandbox/runner.py
, mas você pode usar um local e nome diferentes, se preferir.
Vamos tentar! Coloquei uma foto em preto e branco em Sandbox/photos/in
, e o diretório de saída é Sandbox/photos/out
:
# from Sandbox directory PYTHONPATH=./DeOldify/ python3 runner.py photos/in/ photos/out/
A variável de ambiente PYTHONPATH deve fazer referência ao diretório DeOldify .
Aqui está o resultado: