Hace unos días estuve leyendo sobre aplicaciones que usan Deep Learning para colorear imágenes en blanco y negro. Para probarlo en mi computadora elegí esta implementación, porque es simple de usar, está bien documentada y tiene buenos resultados.

¿Cómo funciona?

[DISCLAIMER]Voy a tratar de explicar de forma sencilla el funcionamiento de este algoritmo (si quieren algo más complejo lean el link que les compartí previamente).[/DISCLAIMER]

Lo primero que se hizo para implementar este algoritmo es tomar las imágenes de una base de datos llamada Imagenet. Esta base de datos es muy popular para realizar investigaciones y competencias de Deep Learning ya que cuenta con una gran cantidad de imágenes organizadas y categorizadas de forma jerárquica ( perro y gato son categorías que descienden de la categoría animal).

A estas imágenes luego se las pasó por un proceso para representarlas en escala de grises. Una vez logrado esto se procedió a usar las imágenes en escala de grises junto a las imágenes originales para entrenar un algoritmo de Deep Learning (CNN, Convolutional Neural Networks). Con el conjunto de pares de imágenes (imagen grisada, imagen original) este algoritmo aprende patrones de colores relacionados a cada imagen grisada y genera un modelo que puede llevar a cabo el coloreado de las imágenes.

Es por esta razón que una vez que el proceso de entrenamiento ha finalizado, este modelo puede recibir una imagen en blanco y negro y colorearla de acuerdo a lo que aprendió. No siempre funciona bien, pero los resultados son bastante alentadores.

Usando el código para colorear imágenes

Para usar el código pueden clonar/forkear el repositorio de github y seguir las simples instrucciones. Lo que me resulto más complicado a la hora de probarlo fue instalar en mi computadora el framework de Deep Learning Caffe, usado para hacer el entrenamiento del modelo explicado más arriba. No quiero irme por las ramas explicando mis inconvenientes para hacer funcionar esta librería, pero me pueden consultar si así lo desean.

Una vez que tienen todas las dependencias instaladas y los modelos descargados, pueden proceder a probar el modelo ejecutando el siguiente script en la carpeta principal:

python ./colorize.py -img_in [[INPUT_IMG_PATH]] -img_out [[OUTPUT_IMG_PATH]]

Estos son algunos resultados que se pueden obtener con esta implementación:

Otra imagen:

Coloreando videos

Como un video es un conjunto de imágenes que pasan una detrás de otra a cierta velocidad (cuadros por segundo) es perfectamente posible colorear un video, aunque hay que realizar tareas extra para manipular y procesar los datos, por lo que voy a utilizar ffmpeg, una herramienta muy útil para trabajar con videos.

Para simplificar la conversión de todas las imágenes generadas a partir del modelo (¡son muchas!) hice un fork del repositorio original que puede modifica el script colorize.py para recibir como argumento una carpeta, en la cual toma cada imagen y las colorea una por una.

Antes de empezar, creen la carpeta “videos” y guarden ahí el archivo con el que quieran trabajar. Y ya que están ahí corran el siguiente comando para saber cuantos fps (cuadros por segundo) tiene el video, esa información será muy útil más adelante.

ffmpeg -i video.mp4

Van a ver mucha información pero simplemente busquen la parte donde dice “fps” y acuérdense de ese número.

Convertir video a imágenes

mkdir -p videos/stills cd videos/stills ffmpeg -i ../video.mp4 Frame%05d.jpg

Este comando transforma el video en una serie de imágenes.

Colorear imágenes una por una

python ./colorize.py -folder videos/stills/</code>

Corremos el script para colorear todas las fotos, el tiempo de ejecución depende de cuan largo es el video y de cuan rápida es la computadora en la que se ejecuta.

Juntar las imágenes y crear el nuevo video a color

cd colourizedStills ffmpeg -framerate 30 -i Frame%05d.jpg ../colourized.mp4

Cambien el 30 por el número de fps que hayan obtenido de correr el comando que mencioné antes en el post.

Una vez este último comando haya finalizado de ejecutarse van a poder disfrutar de su video a puro color.

Acá les dejo unos ejemplos:

Otro video:

Un paso adicional

Una cosa que se puede hacer tranquilamente es agregar audio al video. ffmpeg tiene comandos para primero extraer el audio del video original y luego agregar ese mismo audio al video coloreado.