Diferencia entre revisiones de «Butia reconocimiento marcas»

De Proyecto Butiá
Saltar a: navegación, buscar
(Generación de marcas)
(Generación de marcas)
Línea 29: Línea 29:
  
 
== Generación de marcas ==
 
== Generación de marcas ==
TODO: Instalación de marca
+
TODO: Generación de pdf con marca para imprimir.
  
 
Luego de generados los archivos para imprimir, se deberán generar los archivos de patrones.  
 
Luego de generados los archivos para imprimir, se deberán generar los archivos de patrones.  

Revisión del 21:39 5 sep 2012

Integrantes

  • Nicolás Fúrquez
  • Carlos Lima
  • Rafael Sisto

Objetivos

  • Utilizando ARToolKit construir un plugin para Tortugarte/Tortublocks que permita reconocer las marcas. Esto puede ser utilizado para que el robot se localice y navegue en un entorno.

Documentación de la solución

Se desarrolló un api que obtiene la información almacenada de las marcas y mediante la ayuda de ARToolKit se detectan las mismas en las capturas de la cámara.

El código fuente e instrucciones de instalación se pueden encontrar en el repositorio utilizado: multiPatternRecognition

Diagrama de componentes

En el siguiente diagrama pueden visualizarse los componentes y su interacción. pattern_detection funciona como plugin de TurtleBlocks, que a su vez utiliza la librería multiPatternDetection (a través de un binding de python a C). Esta última utiliza funciones de ARToolKit para la detección de marcas.


Arquitectura de detección de patrones con ARToolKit

Paleta reconocimiento de marcas

TODO: imágenes de la paleta y documentar cada elemento

Desafíos y problemas encontrados

  • La librería ARToolKit requiere la librería libglut.so.3 para funcionar, sin embargo en las XO no es posible instalar la librería en carpetas del sistema. Esto causa que al intentar cargar la librería con C types en python se devuelva el error OSError: libglut.so.3: cannot open shared object file: No such file or directory. Para evitar este problema, se adjunta la librería en la carpeta del plugin y se carga en python previo a cargar la librería de ARToolkit con el siguiente comando: cdll.LoadLibrary("lib/libglut.so.3").

Instalación de plugin

TODO: imágenes de la paleta

Generación de marcas

TODO: Generación de pdf con marca para imprimir.

Luego de generados los archivos para imprimir, se deberán generar los archivos de patrones. Para realizar esto:

  1. Acceder al Generador de patrones para plugin Reconocimento de marcas
  2. Seleccionar el origen de donde se generará el patrón. Si se utiliza la cámara, seleccionar Camera Mode. Si se carga la imagen del patrón (incluyendo el recuadro negro) desde un archivo, seleccionar Load marker Image
  3. Seleccionar tamaño de patrón, por ejemplo, si el patrón (incluyendo el recuadro negro) mide 16x16 cm, seleccionar 16x16
  4. Seleccionar porcentaje del recuadro que representa el patrón. Por ejemplo, si todo el recuadro mide 16cm y el borde negro mide 2cm, el patrón mide 12x12cm, por lo tanto 75%.
  5. Presionar el botón Get Pattern, aparecerá un recuadro con los patrones reconocidos, navegar con el botón next al deseado y presionar Save current. Darle un nombre al archivo en minúsculas, con la extensión .patt, por ejemplo mimarca.patt

En este punto se tiene el archivo .patt generado y como último paso se debe configurar el plugin para poder comenzar a utilizarlo. Para esto:

  1. Copiar archivo generado (extensión .patt) a la carpeta pattern_detection/library/multiPatternDetection/Data/
  2. Editar el archivo object_data en esa misma carpeta:
    1. Incrementar en 1 el número que aparece al principio (Cantidad de marcas a ser detectados).
    2. Agregar a continuación en el mismo archivo las líneas correspondientes al patrón, de la siguiente manera:
      1. Una línea representando el id de la marca
      2. Línea con el nombre de archivo .patt generado anteriormente
      3. Línea conteniendo tamaño en milímetros de la marca
      4. Línea conteniendo 2 decimales, separados por 1 espacio representando el punto medio de la marca.
    3. Guardar el archivo y cerrar.
  3. La marca está lista para ser utilizada y aparecerá en la paleta de Tortugarte luego de reiniciar. Por defecto aparecerá un texto con el id de la marca, pero es posible agregar un ícono, generando 1 imagen en formato svg y colocándola en la carpeta images/. Por ejemplo, para la marca Stop, se debe generar 1 imagen, nombrándola como Stopsmall.svg y creando una copia de la misma con el nombre Stopoff.svg

Trabajos a Futuro

TODO:

  • Mayor versatilidad para marcas: El reconocimiento de marcas con ARToolKit facilitó el desarrollo de la solución, ya que al ser utilizado en otras actividades en las terminales XO acortaba el tiempo del proyecto, ya que no se tuvo que hacer un análisis de factibilidad y se tenía la librería ya compilada para los mismos, además que la generación de patrones ya viene resuelta. Sin embargo, al utilizar este API, las marcas están limitadas a una forma cuadrada y que estén contenidas dentro de un recuadro negro. Para poder evitar estas limitantes se sugiere utilizar un API de más bajo nivel como OpenCV para poder reconocer otros tipos de marcas, como por ejemplo, personas, caras, objetos, etc.
  • Paleta para obtener distancia a marca: La librería creada en C actualiza el estado de las marcas cuando detecta la presencia de las mismas. Entre esa información, se encuentra una matriz que tiene la posición de la marca respecto a la cámara. Se sugiere que con esta información se cree un nuevo bloque Distancia a la marca, similar al detectar marca, que reciba como parámetro el id de marca y devuelva la distancia a la marca.
  • Internacionalización: La paleta desarrollada se realizó en idioma español, pero sería recomendable internacionalizar las etiquetas para que pueda ser localizado a otros idiomas de TurtleArt, por lo menos en inglés.