{"id":89,"date":"2025-04-09T21:23:42","date_gmt":"2025-04-09T21:23:42","guid":{"rendered":"https:\/\/e-icus.net\/blog\/?p=89"},"modified":"2025-04-09T21:26:14","modified_gmt":"2025-04-09T21:26:14","slug":"como-disene-un-sistema-de-ojos-animados-controlados-por-vision-artificial","status":"publish","type":"post","link":"https:\/\/e-icus.net\/blog\/2025\/04\/09\/como-disene-un-sistema-de-ojos-animados-controlados-por-vision-artificial\/","title":{"rendered":"C\u00f3mo dise\u00f1\u00e9 un sistema de ojos animados controlados por visi\u00f3n artificial"},"content":{"rendered":"\n<p><\/p>\n\n\n\n<p>Hace un tiempo que vengo experimentando la  combinaci\u00f3n de hardware b\u00e1sico con visi\u00f3n artificial. La idea,  era construir un sistema simple donde una matriz de LEDs representara dos ojos que se abrieran o cerraran dependiendo del parpadeo detectado en tiempo real mediante una c\u00e1mara.<\/p>\n\n\n\n<p>El primer intento consisti\u00f3 en recorrer la matriz LED de 8&#215;32 pixel por pixel, encendiendo o apagando cada LED individualmente seg\u00fan el patr\u00f3n deseado. Aunque t\u00e9cnicamente funcionaba, el resultado no era satisfactorio: el dibujo tardaba en actualizarse y el cambio de estado de los ojos se percib\u00eda lento.<\/p>\n\n\n\n<p>Buscando optimizar el rendimiento, cambi\u00e9 el enfoque. En lugar de manejar cada LED de forma independiente, dise\u00f1\u00e9 patrones binarios donde cada fila de la matriz correspond\u00eda a un byte de informaci\u00f3n. Con esto, el sistema pod\u00eda actualizar toda la figura del ojo de manera instant\u00e1nea, reduciendo los tiempos de actualizaci\u00f3n perceptibles.<\/p>\n\n\n\n<p>Una vez que la animaci\u00f3n en la matriz fue optimizada, el siguiente paso fue integrar la detecci\u00f3n de parpadeo. Utilic\u00e9 Python junto con OpenCV y MediaPipe para capturar video en tiempo real y analizar las posiciones de los ojos. Calcule el Eye Aspect Ratio (EAR) para determinar el grado de apertura de los p\u00e1rpados. Si el EAR bajaba por debajo de un umbral definido, se consideraba que el ojo estaba cerrado.<\/p>\n\n\n\n<p>Cada evento detectado en Python enviaba un comando simple por comunicaci\u00f3n serial al microcontrolador: \u00abOPEN\u00bb si los ojos estaban abiertos, o \u00abCLOSE\u00bb si se detectaba parpadeo. Arduino recib\u00eda estos comandos y actualizaba la matriz de LEDs en consecuencia.<\/p>\n\n\n\n<p>Durante el proceso surgieron varios problemas adicionales, como la necesidad de afinar el umbral del EAR para evitar falsos positivos, optimizar la lectura de comandos seriales para evitar retrasos, y mejorar la fluidez de las animaciones para que los cambios de estado se sintieran naturales.<\/p>\n\n\n\n<p>El resultado final fue un sistema que detecta el parpadeo de una persona en tiempo real y actualiza una matriz de LEDs para representar esa acci\u00f3n. Adem\u00e1s, si no detecta eventos durante cierto tiempo, el sistema genera parpadeos autom\u00e1ticos programados, simulando actividad natural.<\/p>\n\n\n\n<p>Esta idea fue una buena pr\u00e1ctica para integrar visi\u00f3n computacional con control f\u00edsico de hardware en tiempo real. Tambi\u00e9n sirvi\u00f3 para explorar la importancia de optimizar flujos de procesamiento en sistemas de recursos limitados, a\u00fan hay muchas cosas que mejorar pero es una base con la que puedo seguir explorando nuevas ideas.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Prueba de simulaci\u00f3n de ojos controlados con visi\u00f3n articifial\" width=\"750\" height=\"422\" src=\"https:\/\/www.youtube.com\/embed\/6AcYaO18tcU?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Hace un tiempo que vengo experimentando la combinaci\u00f3n de hardware b\u00e1sico con visi\u00f3n artificial. La idea, era construir un sistema simple donde una matriz de LEDs representara dos ojos que se abrieran o cerraran dependiendo del parpadeo detectado en tiempo real mediante una c\u00e1mara. El primer intento consisti\u00f3 en recorrer la matriz LED de 8&#215;32&hellip; <a class=\"more-link\" href=\"https:\/\/e-icus.net\/blog\/2025\/04\/09\/como-disene-un-sistema-de-ojos-animados-controlados-por-vision-artificial\/\">Seguir leyendo <span class=\"screen-reader-text\">C\u00f3mo dise\u00f1\u00e9 un sistema de ojos animados controlados por visi\u00f3n artificial<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-89","post","type-post","status-publish","format-standard","hentry","category-uncategorized","entry"],"_links":{"self":[{"href":"https:\/\/e-icus.net\/blog\/wp-json\/wp\/v2\/posts\/89","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/e-icus.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/e-icus.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/e-icus.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/e-icus.net\/blog\/wp-json\/wp\/v2\/comments?post=89"}],"version-history":[{"count":2,"href":"https:\/\/e-icus.net\/blog\/wp-json\/wp\/v2\/posts\/89\/revisions"}],"predecessor-version":[{"id":91,"href":"https:\/\/e-icus.net\/blog\/wp-json\/wp\/v2\/posts\/89\/revisions\/91"}],"wp:attachment":[{"href":"https:\/\/e-icus.net\/blog\/wp-json\/wp\/v2\/media?parent=89"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/e-icus.net\/blog\/wp-json\/wp\/v2\/categories?post=89"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/e-icus.net\/blog\/wp-json\/wp\/v2\/tags?post=89"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}