Descartando frames repetidos con un script en Python

A veces uno necesita hacer alguna operación con imagenes y no encuetra software que pueda ayudarle. En concreto a mi me ha surgido la necesidad de poder revisar una secuencia de frames y eliminar los frames repetidos.

La solución más sencilla parecía hacer un script con python, uno de esos homúnculos modernos que realizan tareas automáticas para su creador. Y un día despues, parece que lo ha sido.

El otro día al volver de telenoika de debatir el asunto con eduard, me puse a buscar la manera de abordar el tema con python (es mi primera incursión mas alla de leer/escribir ficheros txt y lejos de la api de blender).

Grata sorpresa número uno: La famosa Python Imaging Library (PIL) acude al rescate. Una manera elegante y simple de manejar imagenes con Python:

import Image

im = Image.open(“lena.ppm”)

y ya tenemos la imagen ahí.

Grata sorpresa número dos: El modulo ImageChops, una colección de operaciones clasicas, entre ellas la que yo necesito para comparar frames: subtract (diferencia)

import ImageChops


ImageChops.subtract(image1, image2, scale, offset) => image

Por lo que parece la libreria PIL esta incluida de serie en python, asi que directamente, me pude poner a hacer un sketch del script en la consola. Unas cuantas busquedas en google, que casi siempre acaban resueltas en stackoverflow.com y el script está funcionando.

Es una solución un poco engorrosa, pero es lo que tiene el spaguetti code…  En cuanto aprenda a guardar frames sueltos en el gstreamer espero no tener que usarla más.

INSTRUCCIONES:

ejecutar el script dentro de una carpeta que contenga frames numerados consecutivos con extension .jpg (el script tiene apenas 50 lineas y no caben florituras) si no se cumplen las condiciones fallará.
Tambien se puede meter el script en la carpeta de nautilus scripts y ejecutar en una carpeta de nautilus tras seleccionar los ficheros a cribar.

El script es muy simple, nada de multithreat. Es bueno tenerlo en cuenta, si quereis usar dos o mas cpus para calcular, habrá que dividir la tarea en dos o mas carpetas y lanzarla dos o mas veces…
Enlaces:

http://www.pythonware.com/library/pil/handbook/index.htm

http://www.pythonware.com/library/pil/handbook/imagechops.htmdiference-frames3.py