paint-brush
Cómo colorear una fotografía en blanco y negropor@alexk0
465 lecturas
465 lecturas

Cómo colorear una fotografía en blanco y negro

por Aleksandr Korepanov4m2024/06/07
Read on Terminal Reader

Demasiado Largo; Para Leer

DeOldify es una herramienta que te permite colorear fotografías antiguas con unos pocos clics. Es gratuito y de código abierto, y todo lo que necesitas hacer es escribir un pequeño código Python.
featured image - Cómo colorear una fotografía en blanco y negro
Aleksandr Korepanov HackerNoon profile picture
0-item

Todos tenemos un tesoro escondido de fotografías antiguas heredadas de nuestros padres, abuelos, etc. A menudo, estas fotografías son en blanco y negro y, a veces, deseamos darles vida en color. Existen numerosos sitios web en línea donde puede lograr esto con solo unos pocos clics directamente en su navegador. Sin embargo, el problema de estos sitios radica en sus numerosas restricciones en cantidad y calidad.


Además, estos servicios suelen requerir registro y suscripciones, lo que puede resultar bastante frustrante.


En esta publicación, me gustaría compartir cómo puedes colorear cualquier cantidad de fotos usando la fantástica herramienta DeOldify , sin la molestia de limitaciones, registros o suscripciones.


DeOldify tiene una introducción increíble y puedes usarla, pero para personas no preparadas puede parecer un poco difícil. Aquí, me gustaría demostrar una forma más sencilla de utilizar DeOldify .

Preparando el medio ambiente

Para comenzar, necesitará una computadora con Linux o macOS . Si está utilizando Windows , aún puede continuar utilizando el Subsistema de Windows para Linux (WSL) .


Hay una lista de paquetes necesarios para Ubuntu :

 sudo apt update sudo apt install python3-pip wget git ffmpeg libsm6 libxext6


Puede utilizar la lista como referencia si tiene otra distribución de Linux .


Para macOS (desafortunadamente, esta es una lista aproximada ya que no tengo un macOS claro para probar):

 brew install python wget git ffmpeg libsm libxext


El siguiente paso es crear una carpeta separada llamada Sandbox para hacer todo. Puede elegir cualquier otro nombre o incluso elegir no crear nada y omitir este paso por completo.

 # Optional mkdir Sandbox cd Sandbox


Luego clona DeOldify :

 git clone https://github.com/jantic/DeOldify.git


DeOldify no tiene lanzamientos ni etiquetas, lo que significa que trabajamos con la rama master . Creo que todo debería funcionar con el último master en cualquier momento. Pero por si acaso, aquí tenéis un número de revisión con el que probé todo:


be725ca6c5f411c47550df951546537d7202c9bc . Si quieres puedes consultarlo:

 # Optional cd DeOldify git checkout be725ca6c5f411c47550df951546537d7202c9bc cd ..


Después de eso, instale todas las dependencias de 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 continuación, cree un directorio para los modelos y descargue el modelo:

 mkdir -p DeOldify/models wget https://data.deepai.org/deoldify/ColorizeArtistic_gen.pth -O DeOldify/models/ColorizeArtistic_gen.pth


¡Eso es todo! El entorno está preparado; La parte más difícil ya quedó atrás. Ahora, escribamos un poco de código Python.

colorear todo

La función más interesante y útil para nosotros es ModelImageVisualizer.plot_transformed_image() .


Todo lo que tenemos que hacer es escribir código a su alrededor.


Aquí está mi implementación:

 #!/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))


Siéntete libre de copiarlo, pegarlo y modificarlo como quieras.


El script lee todas las imágenes .png , .jpg y .jpeg del directorio pasado como primer argumento del script y las colorea, guardando los resultados en el directorio pasado como segundo argumento del script. Tenga en cuenta que el directorio de salida no debe existir; el guión lo crea por sí mismo. Guardé el script en el archivo Sandbox/runner.py , pero puedes usar una ubicación y un nombre diferentes si lo prefieres.


¡Vamos a intentarlo! Coloqué una foto en blanco y negro en Sandbox/photos/in y el directorio de salida es Sandbox/photos/out :

 # from Sandbox directory PYTHONPATH=./DeOldify/ python3 runner.py photos/in/ photos/out/


La variable de entorno PYTHONPATH debe hacer referencia al directorio DeOldify .


Aquí está el resultado:

Foto en blanco y negro

Foto coloreada

Foto original