miércoles, 30 de abril de 2014

Cíclope: detección y seguimieno de rostros o Top Codes

En este proyecto he preparado una aplicación java que mediante la librería OpenCv permite detectar rostros humanos o Top Codes mediante una cámara web y comunicándose con una placa Arduino UNO  mediante el puerto serie con la librería java-simple-serial-connector. La imagen que capta la cámara se visualiza en una ventana en la pantalla del ordenador con el rostro o el Top Code detectado recuadrado. Según las coordenadas en las que se encuentra el recuadro dentro de la ventana se mueven los servos de la base donde se encuentra la cámara para que el recuadro quede centrado. De este modo conseguiremos que la cámara siga constantemente al objetivo.


La base con servos sobre la que descansa la cámara la he diseñado mediante Autodesk 123D y la he impreso mediante mi impresora 3D UP! Mini aquí podéis descargaros los ficheros .123d y .stl para imprimirla o modificarlos a vuestro gusto.

El arduino lo he encerrado en una caja también creada con la impresora 3D







Para el aprendizaje de OpenCv he comprado el libro Vision-based User Interface Programming in java. Aquí está la web del libro que contiene el código fuente de sus ejemplos.

Para configurar eclipse para usarlo con OpenCv este es un buen tutorial.

Aquí incluyo un extracto de las funcionalidades que ofrecen los Top Codes:
The TopCode computer vision library is designed to quickly and easily identify and track tangible objects on a flat surface. Just tag any physical object with a TopCode (a circular black and white symbol) and the system will return:
  • An ID number
  • Location of the tag
  • Angular orientation of the tag
  • Diameter of the tag

The TopCode library will identify 99 unique codes and can accurately recognize codes as small as 25 x 25 pixels. The image processing algorithms work in a variety of lighting conditions without the need for human calibration. The core TopCode library is 100% Java (with a C++ port now available). An additional library is provided to grab high-resolution images from a webcam using Microsoft's DirectShow API. This library is written in C++ but contains native hooks to Java. 

Top Code recocido y recuadrado por la aplicación


El código fuente de la aplicación Cíclope, tanto java para el PC como el sketch del Arduino podés encontrarlo aquí.