paint-brush
Como colorir uma foto em preto e brancopor@alexk0
615 leituras
615 leituras

Como colorir uma foto em preto e branco

por Aleksandr Korepanov4m2024/06/07
Read on Terminal Reader

Muito longo; Para ler

DeOldify é uma ferramenta que permite colorir fotos antigas com apenas alguns cliques. É gratuito e de código aberto, e tudo que você precisa fazer é escrever um pouco de código Python.
featured image - Como colorir uma foto em preto e branco
Aleksandr Korepanov HackerNoon profile picture
0-item

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 .

Preparando o Meio Ambiente

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.

Colorir tudo

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:

Foto em preto e branco

Foto colorida

Foto original