google guetzli jpeg


Hace ya unos cuantos meses escribía por la intranet de mecenas una pieza sobre el valor del background que hay detrás de la inteligencia artificial (ES).

En él, ejemplificaba el asunto con un vídeo sobre el funcionamiento de RAISR, el algoritmo que estaba diseñando Google para reducir el peso de las imágenes sin que éstas perdieran información. A saber:

Hablamos de que una máquina sea capaz de comprender qué da valor y qué no a un conjunto de pixeles, para luego, y en base a continuas capas de bajada de calidad (para que por ejemplo pese menos y cargue más rápido en conexiones más lentas), ser capaz de mantener la información crítica de la imagen.

En el artículo intentaba vaticinar qué aplicaciones podría llegar a tener una tecnología como ésta, y recientemente hemos conocido la primera: Guetzli JPEG encoder.

Algunos apuntes sobre Guetzli

Bajo este nombre un tanto enrevesado se encuentra un codificador de imágenes en JPEG (uno de los estándares más utilizados en contenido multimedia), que asegura poder crear imágenes en alta calidad dentro de archivos que son un 35% más pequeños que los ya habituales .jpg y .jpeg.

Repito por si no se ha entendido: imágenes en máxima calidad (sin pérdida visible) un 35% más pequeñas. Ideal para un escenario de movilidad digital como es el actual, con servicios digitales cada vez más pesados y una navegación limitada a un ancho de banda y un número de GBs contratados de antemano con la operadora.

Quizás para un neófito en materia el asunto no le parezca trascendente, pero cualquier desarrollador web sabe que lo que más pesa, de lejos, en el servidor, es el contenido multimedia. Es decir, los vídeos, las imágenes, y si compete, el audio.


Tanto los vídeos como el audio han terminado por delegarse en plataformas de terceros (Youtube, Vimeo, SoundCloud, iTunes…), habida cuenta de que estas plataformas tienen sistemas hiper-eficientes para suministrar el contenido a los visitantes de manera escalada (tienes tanto ancho de banda, te envío tanta resolución, pudiendo, de forma completamente abstracta al usuario, aumentar o disminuirla en tiempo real), y cuentan además con widgets o plugins capaces de embeber el reproductor en páginas de terceros.

Sencilla y llanamente han ganado la batalla al ofrecer una suerte de externalización que, aunque conlleva sus hándicaps (como toda externalización, te vuelves de facto dependiente de los designios futuros de dicho servicio), ofrece muchísimas más garantías de suministro óptimo ahí donde nuestro limitado servidor, y las limitaciones propias del cliente que va a consumir ese contenido, entran en juego.

Pero con las imágenes no ocurre tal cosa. Descontando casos extremos como el que llevaba a los usuarios de herramientas tan masivas como JetPack a alojar sus imágenes en los servidores de la compañía para luego suministrarlas en las páginas, o aquellos que siguen empeñados en tirar del ancho de banda de servidores de terceros copiando imágenes no almacenadas en el suyo propio (ganarán espacio, pero también pierden velocidad de carga), lo más normal es que todo servicio digital almacene en su propio servidor las imágenes, teniendo a veces que replicarlas hasta tres o cuatro veces en distintas dimensiones para disponer de copias más pequeñas enfocadas a dispositivos de menor tamaño (como hace, por cierto, WordPress).

Sin ir más lejos, en esta santa casa la carpeta de contenido multimedia ocupa ya unos 2GBs. Teniendo en cuenta que el kernel de WordPress ocupa algo menos de 10MBs, y que la base de datos no superará los 30MBs, las diferencias son notables.

E imagínese qué pasaría si el día de mañana podemos reducir en hasta un 35% el tamaño de las imágenes. En mi caso, unos 700 megas menos, que no es poco. Y ya no solo con la idea de reducir el tamaño que ocupamos en el servidor, que sinceramente es lo de menos, sino considerando que un 35% menos de peso en todas y cada una de las imágenes de una página supone tranquilamente que el servicio web cargará un tercio más rápido en cada cliente.

1/3, que se dice pronto. Ya quisiera poder optimizar de golpe tantísimo la carga de esta página. Me he peleado lo suyo por arañar apenas unos milisegundos, imagínese quitar casi medio segundo…

Y esto es solo el principio

Conseguir que, de golpe, Internet vaya de media un tercio más rápido podría ser una verdadera revolución. Lo fue, de facto, ese cambio que desde hace unos meses vivimos con la continua expansión de tres grandes tecnologías: HTTP2/SSL/PHP7, y como en ese caso, lo mejor de todo es que Guetzli es compatible con todo lo que sea compatible ya con JPEG (navegadores, aplicaciones, programas multimedia…), por lo que el único que va a tener que trabajar migrando todo será el administrador.


En GitHub (EN) tenemos la documentación oportuna, que como cabría esperar, está aún algo lejos de ese escenario de estandarización que seguramente en algún momento acabe por darse.

Pero como ya hice en su día, me gustaría señalar la potencialidad que tiene un sistema como éste ya no solo de cara a optimizar una imagen para que, aún pesando mucho menos, mantenga la información necesaria para que el ojo humano no note diferencia, sino justo al contrario.

Y me vuelvo a autocitar, que para eso esto sigue siendo un blog personal:

Estoy pensando en el camino opuesto. Uno en el que partiendo de una imagen en mala calidad, en base a ese aprendizaje precio, se saque qué hay de interés en ella.

Algo que tranquilamente se podría utilizar para reconocimiento de sospechosos en vídeos de seguridad (reconocer la cara y mejorar la calidad de la misma para facilitar el trabajo de los cuerpos de seguridad), o, como no, para mejorar la experiencia global de visionado de nuestra galería de fotos antigua.

El de que un algoritmo él solito sea capaz de revivir aquellas fotos que, bien sea por el paso del tiempo (modificaciones, copias y pegas, cambios de formato…), bien sea por la baja resolución de la tecnología de aquel entonces (pruebe ahora, en una pantalla 4K, a abrir esas fotos sacadas con aquel móvil cuya cámara tenía 1,2 megapixeles, o aquellas otras que escaneó en su día de un positivo físico…), hayan perdido valor informativo.

Que la inteligencia artificial de RAISR, en este caso, sea capaz de entender entre un mar de pixeles tan grandes como la cabeza de un clavo que ese pixel es importante y éste no, pudiendo darle un tamaño adecuado a los tiempos que corren, y que en su suma, la imagen vuelva a ser comprensible para el usuario. Hacer que los guionistas de CSI se mojen las bragas al ver materializada una de sus múltiples licencias tecno-creativas. Luchar contra los cada vez más limitados ciclos de vida informativos, un mal endémico que amenaza con minimizar el impacto cultural de nuestra sociedad.


Por ahí deberían ir los tiros para que en efecto las IAs sean valiosas para nuestra sociedad. Pequeños adelantos, que en suma, facilitan la vida de millones de personas.

 

P.D.: Dejo para terminar el paper sobre RAISR (EN/PDF), por si hay algún investigador interesado en profundizar más en las matemáticas de este algoritmo.