Para llevar a cabo cualquier tipo de procesamiento de imágenes, se necesita código altamente optimizado. Pero entonces, necesitas código muy optimizado, lo cual significa que típicamente no se utiliza JavaScript para crear código de rendimiento muy optimizado en términos de cómputo científico. Por lo tanto, el problema es que tienes técnicas de procesamiento de imágenes simples que debes llevar a cabo. Tienes gradaciones. Puede ser convertir la imagen a escala de grises. Puede ser agregar o cambiar los canales de color de la imagen. Entonces tienes este problema, ¿cómo lo resolverías? ¿Cómo basarías tu arquitectura de software?
Una forma es pensar inmediatamente en una arquitectura cliente-servidor, donde construyes diferentes servicios, tienes tu frontend por separado y luego tienes tu backend por separado, y puedes dejar que interactúen a través de un canal, por ejemplo, HTTP, y luego puedes construir una capa de API REST en la parte superior de tu backend para comunicarte, para exponer tu backend. Esto está completamente bien. Es bastante estandarizado y se utiliza en producción en muchos lugares, y luego también ves estas capas, pero en mi opinión, con cada capa, introduces latencia y aumentas el tiempo de respuesta. Pero estoy buscando una respuesta rápida. Estoy buscando hacer clic en un botón y obtener mi imagen procesada de vuelta. Pero eso es solo, bueno, podrías intentar lograrlo, pero hay una especie de limitación impuesta por ese canal de comunicación y también el tiempo de respuesta que toma el backend.
Lo segundo que podrías hacer o el segundo enfoque que podrías tomar es usar WebAssembly. Aquí, tomo ese backend que ves, podría estar escrito en cualquier framework o cualquier lenguaje. Típicamente, el procesamiento de imágenes es bastante popular con C++, pero en esta demostración que hice en mi computadora, que está en mi computadora, lo hice usando Rust. Entonces tomas ese backend y lo incrustas, por así decirlo, en tu cliente y de esa manera, bueno, eliminas esa marca de flecha en particular, que típicamente representa la capa de comunicación HTTP. Lo tienes todo en tu navegador, ¿verdad? Así que, si vuelvo a la diapositiva, ahora voy a seguir el segundo enfoque, tomaré el enfoque del lado del cliente y también tomaré la opción lista para usar, ya tengo el paquete, no tengo que preocuparme por la implementación. Bueno, el enfoque de implementación. Utilicé la biblioteca Wasm llamada Photon, está completamente escrita en Rust, todo el crédito va para la autora, Sylvia O'Dwyer, pero también tuvo la cortesía de crear un paquete Wasm a partir de ella, por lo que todo lo que necesito hacer es importar el paquete Wasm y luego usar las funciones para mis necesidades de procesamiento de imágenes. Así de simple. Aquí iba a mostrar la demostración, iba a mostrarte el procesamiento de imágenes diferentes, solo imagínalo en tu cabeza y tal vez pueda mostrártelo fuera de la sala. Entonces, la segunda forma es, por supuesto, la forma de Wasm. Aquí ves que es tan simple como importar el paquete Wasm y luego, por ejemplo, si quieres aplicar un desenfoque gaussiano, que es algo que harías para procesar la imagen, simplemente llamas a la función y obtienes la imagen procesada como salida. Bueno, la segunda demostración es, bueno, la demostración o la aplicación que hice, utiliza una técnica de aprendizaje automático y, bueno, si conoces el aprendizaje automático, utiliza mucho álgebra lineal, mucha optimización matemática. Nuevamente, es un proceso muy intensivo en cómputo, ¿verdad? Así que en esta aplicación intenté predecir el objetivo utilizando una variable objetivo, utilizando múltiples características. Utilicé un conjunto de datos donde hay diferentes acciones, bueno, utilicé el conjunto de datos donde hay una acción de la empresa durante un año y predije utilizando diferentes características que son como el precio de apertura, el precio de cierre, el precio mínimo y el precio máximo. Hago esto a través de una regresión lineal, si hay algún científico de datos en esta sala, por favor no me mates porque esta es una forma terrible de predecir acciones. Entonces, en esta aplicación utilicé dos frameworks diferentes, por supuesto. Utilicé un paquete de instalación npm, aunque no lo creas, fue bastante difícil encontrar un paquete adecuado que me permitiera llevar a cabo la regresión lineal. Y también utilicé un paquete Wasm que escribí utilizando Rust, pero no te preocupes también utilicé el paquete de Ciencia de Datos en Rust para hacer esto.
Comments