El problema
Aprovechar las capacidades de procesamiento paralelo de los múltiples unidades de procesamiento de la GPU de la tarjetas de video o los varios núcleos de la CPU de un computador portátil o de escritorio típicos para una aplicación sencilla.La aplicación sencilla es la reducción de colores de un video, empleando para ello el algoritmo k-means. En la ejecución de este algoritmo debemos aprovechar las capacidades antes mencionadas.
K-means se emplea para determinar los colores con los que se reduce el video. Así, si un video queremos reducirlo a 16 colores, k-means deberá encontrar 16 clusters: el centro de cada cluster es uno de los 16 colores buscados.
Los detalles y especificaciones del problema pueden verse aquí.
El video de prueba que usamos fue un clip de 30 segundos del cortometraje Big Buck Bunny:
La solución
Aprovechamos los 8 núcleos de la GPU de la tarjeta gráfica NVIDIA GeForce 8400 GS instalada en nuestro computador de escritorio. Estos núcleos sirvieron para paralelizar el cómputo de la asignación de cada pixel al cluster más cercano en cuanto a su color RGB, cómputo que es parte de la aplicación del algoritmo k-means para resolver el problema.En cuanto a la implementación, instalamos CUDA y empleamos el lenguaje C++, trabajando con el IDE Eclipse 3.7.2 sobre Linux 2.6. Se utiliza además OpenCL para la paralelización en la GPU de parte del algoritmo k-means usado en su desarrollo, y las librerías libavcodec, libavformat y libswscale para la decodificación, y llamadas al sistema a la aplicación ffmpeg para la codificación.
He aquí un video de salida reducido a 8 colores:
Y acá un video de salida reducido a 8 colores, pero que luce mejor aprovechando lo que sabemos del frame anterior (iniciamos k-means inicializando los 8 clusters con los 8 colores del frame anterior):
Pueden ver el código acá, un manual de uso aquí, y una bitácora que registró el avance hacia la solución.
Evaluación de la solución
De las 11 personas que tenían que desarrollar una solución, la nuestra fue la mejor:Valió la pena el esfuerzo. Saludos.
No hay comentarios:
Publicar un comentario