Activa las notificaciones para estar al tanto de lo más nuevo en tecnología.

Experimentos con WebAssembly y visión por computadora

Con WebAssembly es posible programar en ensamblador para una página web. La idea suena muy atractiva e interesante de probra por su eficiencia, comparada contra asm.js y Javascript.

De acuerdo con la Wikipedia, WebAssembly (abreviado como wasm), es un formato de código binario portátil (bytecode) para la ejecución de scripts en el navegador (del lado del cliente). Hablamos pues de un lenguaje de bajo nivel, diseñado inicialmente como formato destino en la compilación desde C y C++.

La cuestión es si esta idea de programar “en bajo nivel” puede cambiar la manera en como se hacen aplicaciones web. Hay ejemplos interesantes de ello, como WebSight, que corre unas 20 veces más rápido que Javascript en la detección de rostros y además, es el doble de rápido que asm.js.

Es claro que Javascript es un lenguaje con sus complicaciones y no es fácil implementarlo de forma que sea rápido y eficiente, limitando de alguna manera lo que se puede hacer en el navegador, que de alguna manera es digamos, la plataforma donde se ejecuta dicho código. Mozilla implementó asm.js como un subconjunto de Javascript estándar pata optimizar los programas, eliminando de alguna manera los problemas de velocidad, pero no parece ser suficiente en algunas aplicaciones.

Por ello, en los últimos dos años, con el apoyo de Microsoft, Google y Apple, así como Mozilla, WebAssembly (WASM) se convirtió en un lenguaje intermedio que puede ser procesado por Javascript, el cual sigue estando en desarrollo.

WebAssembly, el siguiente paso para acelerar la web

Tomemos entonces el caso de WebSight.js, un proyecto de Brian Feldman, Debra Do, Yervant Bastikian y Mark Romano, que sirve para demostrar las capacidades de WebAssembly comparado con asm.js y Javascript. El proyecto se puede encontrar en GitHub en donde están las instrucciones para usarlo y el cómo trabaja.

WebSight demuestra el desempeño comparativo entre Javascript, asm.js y WebAssembly. Un usuario sube una imagen estática o un video en vivo, el cual se despliega en pantalla. El desempeño se mide como la cantidad de tiempo que se requiere para detectar rostros u ojos en la imagen o el video.

Cada objetivo trabaja en su propio “web worker”. Se usa la biblioteca OpenCV, que se compiló usando Emscripten a asm.js y wasm (un módulo de WebAssembly), para utilizar el algoritmo Viola-Jones para la detección de objetos. HAAR.js se modificó para quitar la manipulación DOM, de forma que pudiese usarse en el web worker de Javascript.

Las razones por las cuales WebSight es una buena prueba es que la visión por computadora demanda mucho CPU y entonces usar WebAssembly parece ser una buena opción. Con alguna manipulación de código se encontró que superaba con creces lo que podía hacer Javascript e incluso el predecesor de WebAssembly, asm.js.

La conclusión de la comparación fue:

Los FPS (frames per second) del algoritmo con wasm fue consistentemente el doble que en asm.js y veinte veces más rápido que la implementación en Javascript, haciendo Wasm como una opción muy interesante y digna de intentarse.

Comentarios