Para nadie será novedad que los navegadores han pegado el salto gráfico desde la llegada de WebGL. En aquel entonces era dificil trabajar con imágenes PNG que tuvieran transparencia (¡qué lejos han quedado esos días!); pero poco a poco lo estándares propuestos se convirtieron en estándares reales, y los desarrolladores comenzaron a migrar proyectos que de forma obligada funcionaban en C++ a JavaScript. Siempre con sus limitaciones, desde luego, las versiones en JavaScript de librerías clásicas fueron un respiro para muchos desarrolladores que necesitabamos versiones prototipos en la Web; o simplemente querías sacarle todo el jugo posible al nuevo JavaScript.
No corrió la misma suerte OpenCV, aquel conjunto de implementaciones para darle "ojos" a la computadora. La realidad es que incluso en plataformas como Processing, las migraciones siempre se vieron limitadas a un par de funciones, un modelo de traducción o a simples promesas. En JavaScript, como es de esperar, estas limitaciones se multiplican por 10, no obstante si existen desarrollos que merecen especial atención. Nos gustaría deternos en una de ellas, llamada JSFeat y en la búsqueda de implementar la mayor cantidad de features de OpenCV en JS. ¿Hay posibilidad de implementarlo en MoldeoJS? Por supuesto, dejamos una entrada de Blog donde explicamos como sería esto posible:
http://www.moldeointeractive.com.ar/es/classic-blog-layout/angular-jsfeat-opencvjs
En verdad no será ninguna sorpresa para nadie el saber que JSFeat puede implementarse en Angular. Sin embargo, mi reflexión busca ir un poco más allá: ¿Nos sirve JSFeat como reemplazo de OpenCV? La respuesta rápida es No, y la corta puede resumirse en un "Depende". Me explico:
Actualmente -y por mucho tiempo más- la Cámara Web se capta dentro de un Canvas, para ser aplicado como textura posteriormente. JSFeat necesita que la imagen que va a procesar se encuentre dentro de un Canvas, asi que desde ese lado es la herramienta perfecta. Sin embargo, no puedo hacer todo lo que hace OpenCV ni puede hacerlo con los mismos resultados. Comparemos las features de OpenCV con las de JSFeat:
OpenCV: https://docs.opencv.org/3.0-beta/index.html
JSFeat: https://github.com/inspirit/jsfeat#features
La diferencia se agranda si se entiende la estructura interna y se proyectan a las limitaciones del propio JavaScript. Y atención, no debe entenderse esto como un denosprecio a JSFeat, al contrario, se trata de una implementación espectacular y está claro que es la que vamos a utilizar para nuestro MoldeoJS; al menos hasta que se desarrolle una migración completa, o decidamos desarrollarla nosotros.
Pero como información para aquellos desarrolladores que deseen una versión de OpenCV en JavaScript (y no quieran hacerla ellos mismos), JSFeat es la respuesta para corner detection, face detection y algunos filtros básicos de uso frecuente (blur, escala de grises, etc). De nuestra parte, vamos a estar implementando en el futuro cercano (muy cercano) JSFeat en MoldeoJS, aunque aún no decidamos de que forma va a ser.
Seguimos Informando.