pruebas con marcadores y sus detectores

publicado el 2018-08-22

parte del proyecto: tortilla-stories


después de varios experimentos e investigación, ¿la solución?

rata panchis con dos distintos marcadores sostenidos en las patas

aquí malabareando con marcadores

empecé planeando e intentando programar la implementación de mis propios marcadores aprovechando una línea recta y la detección de hough. como sea, me empecé a tardar y trabar con detalles geométricos - ¿cómo saber hacia dónde está orientado el lado activo del marcador? ¿cómo obtener de manera dinámica los vértices del rectángulo que lo conforman, tomando en cuenta las posibles distorsiones de orientación de la cámara?

decidí probar con reactivision, pues por su descripción parecía tener todos los problemas resueltos. la única razón para oponerse habría sido la estética de los marcadores, tanto por su apariencia como por la posible dificultad de marcarlos en las tortillas debido a la precisión requerida. después de hablarlo con mel, quedamos en que sí podría ser opción imprimirlos y añadirlos al centro de la tortilla, como “centro de disco”.

una barra larga con algunas pequeñas protuberancias rectangulares

dejo aquí para la posteridad cómo visualizaba el marcador para hough

descargué, compilé y ejecuté reactivision. me gustó y sorprendió que además de los marcadores (fiducial markers les llaman, aunque veo que ese término es más general) que ya había visto con forma de amiba, tiene otros con forma circular. pasé algunos ejemplos de marcadores a mi móvil para poderlos poner enfrente de la cámara de la laptop, y todo funcionó muy bien: el sistema identifica rápidamente y de manera independiente a la orientación, el número que le corresponde al marcador, así como su posición en la pantalla.

marcador con forma de amiba

ejemplo de marcador tipo amiba

marcador con forma circular

ejemplo de marcador tipo yamaarashi

todo hasta aquí sonaba muy bien, el asunto es que además queremos usar las imágenes de las tortillas para proyectarlas en una pantalla, por lo que se requiere acceso al feed de video para manipularlo.

si bien reactivision es software libre y se tiene acceso al código escrito en c++, entrar a estudiarlo y adaptarlo no sonaba práctico por el momento. quedaba ver si era posible usar la misma cámara web en dos programas distintos (respuesta: no parece ser muy viable - otro rabbithole), o si más bien habría que usar dos cámaras: una para reactivision, y otra para la proyección.

podría ser versátil tener diferentes ángulos… pero a la vez no, porque prácticamente queremos el mismo punto de vista.

por un momento dije “bueno, usemos entonces qr codes, al fin con myqr se les pueden agregar ciertos diseños”.

código qr con rata panchis en el fondo

ejemplo de código qr con diseño, con mi dirección dat

en processing, herramienta con la que tengo más experiencia, busqué alguna biblioteca para trabajar con este tipo de códigos. encontré zxing4processing en el administrador de bibliotecas.

no me encantaba la idea de tener el cuadrado enmedio de la tortilla, pero de todas formas vi que la biblioteca funcionaba bastante bien: era bastante flexible con la orientación de los códigos y relativamente rápida (menos de un segundo) para identificar los que probé.

ya estaba decidiéndome por esta solución, cuando entonces se me ocurrió: si reactivision está escrito en c++, ¿qué tal si alguien lo convirtió (al menos la detección de los fiduciales) a un addon de openframeworks?

eventualmente encontré que sí, alguien lo había hecho ofxFiducialFinder, pero para la versión 0.8.x de openframeworks. sonaba genial: el addon solo se encargaba de la detección de los marcadores, y no hacía todo el proceso de comunicación (útil, pero muy predeterminado) que ya tiene reactivision.

lo instalé pero tuve que batallar un rato; vi que alguien había mandado una actualización para que funcionara en la versión 0.9.x, por lo que la descargué, pero el asunto es que la versión más reciente es la 0.10.x, que resulta es la única que se puede correr bien con distribuciones modernas de gnu/linux (por qué, no me queda claro). los errores de compilación que veía no me parecían tan descabellados, entonces me puse a corregirlos para poder probar el ejemplo…

y para no seguir haciendo la historia larga, el caso es que sí funcionó :D

entonces ese sistema de marcadores es el que utilizaremos (desafortunadamente no detecta los circulares, solo los de amiba, pero está bien), y todo el demás sistema de video (pronto comparto el diagrama que hice ya con esto resuelto) lo haré en openframeworks. curiosamente todo este proceso personal en las artes mediales lo inicié en openframeworks antes de cambiarme a processing por las clases que estuve dando. habrá que desempolvar… pero es un alivio poder subirse a los hombros de gigantes :)


para comentar, escríbeme a ratapanchis arroba eccs.world :)