Añadir color a imágenes y vídeos con Machine Learning

Posted on by

Añadir color a imágenes con Machine Learning.

Si alguna vez has intentado añadir color a una imagen en blanco y negro sabrás que es una tarea tediosa y, a no ser que seas un experto, los resultados no serán del todo convincentes. A continuación explicaremos una solución a este problema basada en machine learning.

Mediante las técnicas que nos ofrece el machine learning podemos entrenar un sistema de manera que puede realizar tareas basándose en la experiencia en la que ha sido entrenado. Richard Zhang, Phillip Isola y Alexei A. Efros. proponen una solución en ECCV, 2016. En su proyecto Colorful Image Colorization comparten un sistema que ha sido entrenado con un millón de muestras de Imagenet para que pueda añadir color a imágenes en blanco y negro de manera automática.

Instalar caffe y librerías básicas de Python

Antes de instalar el repositorio de Colorization tenemos que instalar caffe y las librerías de Python numpy, pyplot, skimage, scipy.

sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev
git clone https://github.com/BVLC/caffe.git
cd caffe
cp Makefile.config.example Makefile.config
make all
make test
make runtest
make pycaffe
make distribute
mkdir ../python
mv distribute/python/caffe/ ~/python/
export PYTHONPATH="${PYTHONPATH}:${HOME}/python:${HOME}/caffe/build/"
export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${HOME}/caffe/build/lib"

Para que PYTHONPATH y LD_LIBRARY_PATH preserven los valores habrá que añadir las siguientes líneas a ~/.bashrc

export PYTHONPATH="${PYTHONPATH}:${HOME}/python:${HOME}/caffe/build/"
export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${HOME}/caffe/build/lib"

Instalar Colorful Image Colorization

Ahora solo nos queda clonar el proyecto Colorization y ejecutarlo. Hay que tener en cuenta que el archivo de salida es siempre un PNG.

git clone -b master --single-branch https://github.com/richzhang/colorization.git
cd colorization/
./models/fetch_release_models.sh
python ./colorize.py -img_in test_in.jpg -img_out test_out.png

Estas son algunas de las pruebas que hemos realizado para comprobar el funcionamiento:

El pase de diapositivas requiere JavaScript.

Colorful Image Colorization modo solo CPU

Si compilaste caffe solo para CPU tendrás que hacer la siguiente modificación al script colorize.py para que use la CPU en vez de la GPU.

 caffe.set_mode_cpu()
 #caffe.set_mode_gpu()
 #caffe.set_device(args.gpu)

Script para vídeos en blanco y negro

Ahora que hemos comprobado que podemos añadir color a imágenes el siguiente paso es añadir color a vídeos en blanco y negro, ya que un vídeo no es más que una sucesión de imágenes. Para esta tarea utilizaremos un script en bash que en primer lugar extrae todos los frames del vídeo, les añade color uno a uno y lo vuelve a componer en un vídeo añadiendole el audio del vídeo original. Para que funcione tendremos que tener instalado ffmpeg.

#!/bin/bash

VIDEOIN=$1
VIDEOOUT=$2

mkdir /tmp/bw/
mkdir /tmp/color/
ffmpeg -i $VIDEOOUT -r 25/1 /tmp/bw/output%09d.jpg

for file in /tmp/bw/*;
do
  echo ${file}
  filename=$(basename $file)
  python ~/colorization/colorize.py -img_in $file -img_out /tmp/color/$filename
done;

ffmpeg -r 25 -f image2 -s 1280x720 -i /tmp/color/output%09d.png -vcodec libx264 -crf 25  -pix_fmt yuv420p /tmp/colorized.mp4
ffmpeg -i /tmp/colorized.mp4 -i $VIDEOIN -map 0:v -map 1:a -c copy -shortest $VIDEOOUT

rm /tmp/colorized.mp4
rm /tmp/bw/*
rm /tmp/color/* 

Para ejecutarlo solo tenemos que guardar este script con el nombre videocolor.sh (u otro que nos guste más) y ejecutarlo con el nombre y la ruta del vídeo de entrada y el del salida, como por ejemplo:

bash ./videocolor.sh ~/Downloads/test.mp4 ~/Downloads/test_color.mp4

A continuación podemos ver un par de vídeos a los que se le ha añadido color y sus originales en blanco y negro:

Arnold Schwarzenegger gana Mr Universo 1969 en blanco y negro:

Arnold Schwarzenegger gana Mr Universo 1969 en color:

Noticiario Madrileño 1966 en blanco y negro

Noticiario Madrileño 1966 en color

Añadiendo color a imágenes Infrarrojas

Hoy en día hay pocas imágenes que se generen originalmente en blanco y negro pero uno de esos ejemplos son las imágenes captadas por cámaras infrarrojas. A continuación vemos unas cuantas capturas de estas cámaras y su correspondiente conversión, los resultados son sorprendentes.

El pase de diapositivas requiere JavaScript.

Casos curiosos

No podemos decir que el sistema sea perfecto ya que en algunos casos la experiencia proporcionada por un millon de imágenes no es suficiente. Cuando el sistema se enfrenta a algo para lo que no ha sido entrenado tiende a resolverlo como si fuera una imagen para la que si tiene experiencia. Por ejemplo en la siguiente galería vemos que cuando se le pide colorear la imagen de la chica con el pelo de color arcoiris la imagen que devuelve es el de la chica completamente rubia. Esto de debe a que en su dataset de imágenes no aparece nadie con esa particularidad, pero sin embargo seguro que aparacen muchas fotos con chicas rubias, por lo que automáticamente le deja el pelo rubio.

El pase de diapositivas requiere JavaScript.

 

Comments are disabled