8

Estoy desarrollando una aplicación de realidad aumentada para Android que utiliza la cámara del teléfono para reconocer la disposición de los cuadrados de colores en cada cara del cubo de Rubik.Reconocimiento marcador en Android (reconocimiento de cubos de Rubik)

Una cosa que estoy seguro acerca de cómo es exactamente iba a ir sobre la detección y el reconocimiento de los cuadrados de colores en cada cara del cubo. Si miras un Cubo de Rubik entonces puedes ver que cada cuadrado es uno de los seis colores posibles con un borde negro delgado. Esto me llevó a pensar que debería relativly simplemente detectar un cuadrado, posiblemente usando una API de detección de marcador existente.

Rubik's Cube

Mi pregunta es realmente, tiene a nadie aquí tenido alguna experiencia con el reconocimiento de imágenes y Android? Idealmente, me gustaría poder implementar una API existente, pero sería un proyecto interesante para hacer desde cero si alguien pudiera orientarme en la dirección correcta para comenzar.

Muchas gracias de antemano.

+0

No puedo ayudarte, pero solo quiero decir que una aplicación en la que podría apuntar la cámara hacia el cubo y obtener indicaciones paso a paso para resolverla sería * increíble *. Te deseamos la mejor de las suertes y, por favor, publícalo aquí algún día en el futuro si lo haces funcionar. –

+0

Ese es el plan :-) El gran problema será lograr que Android reconozca el cubo, y luego de eso puedo trabajar para lograr que lo guíe a través de una solución. Se publicará una versión beta pública en el Android Market para comentarios de los usuarios (cuando creo que se encuentra en una etapa beta) y pasaré y actualizaré esta pregunta para que sepan que está disponible para las pruebas. – greenie

+0

FYI, la imagen en línea está rota. ¿Tiene una copia que puede volver a cargar? –

Respuesta

5

¿Desea apuntar la cámara a un cubo y hacer que entienda la configuración?

Reconocer objetos en fotografías es un problema abierto de AI. Por lo tanto, tendrá que limitar el problema bastante para obtener tracción sobre él. Sugiero comenzar con algo como:

  1. El cubo se va a fotografiar desde una distancia de exactamente 12 pulgadas, con una fuente de luz de 100W directamente detrás de la cámara. El cubo se establecerá en diagonal, por lo que presenta exactamente 3 caras, con una esquina en el centro. La cámara se colocará de manera que se enfoque directamente en la esquina del cubo en el centro.

  2. Se tomó una fotografía. Luego, el cubo se girará 180 grados vertical y horizontalmente, de modo que las otras tres caras sean visibles. Se tomará una segunda imagen. Como sabes exactamente dónde se espera que esté cada cara, toma algunos píxeles de cada región y da por supuesto que es el color de ese cuadrado. Recuerde que el cubo generalmente estará codificado, no uniforme como se muestra en la imagen aquí. Entonces siempre debes mirar 9 * 6 = 54 cuadrados pequeños para obtener el color de cada uno.

  3. la información en esos dos imágenes define la configuración cubo. Genere una imagen del cubo en la misma configuración y permita que el usuario la confirme o corrija.

Podría ser más simple tomar 6 imágenes, una de cada cara, y viajar por las caras en un orden bien definido. Recuerde que el cuadrado central de cada cara no se mueve, y define el color correcto para esa cara.

Una vez que tenga la configuración, puede usar las operaciones de OpenGL para rotar las secciones del cubo. Este será un programa con cientos de líneas de código para definir y rotar el cubo, más lo que sea que hagas para el reconocimiento de imágenes.

+0

Sí, así es como pensé que la aplicación funcionaría. Esperaba que pudiera existir una API de detección de marcadores existente que pudiera implementar (porque cada uno de los cubos pequeños en una cara podría definirse como un marcador). Sin embargo, este es un gran consejo si no puedo encontrar una API existente. – greenie

0

Este question le puede dar algunos consejos sobre cómo utilizar OpenCV en el androide. Pero no sé si requiere que el usuario instale algunas bibliotecas adicionales complicadas.

0

Buena idea, estoy planeando usar detectores de visión artificial y marcadores también, pero para otro proyecto. Todavía estoy buscando si hay información disponible en la web, por ejemplo, vinculando openCV o ARtoolkit con el SDK de Android. Si tiene información adicional sobre cómo vincular una API de visión por computadora, hágamelo saber.

Nos vemos pronto y ¡buena suerte!

1

Además de lo que dijo Peter, probablemente sea mejor superponer líneas de guía en la imagen del cubo a medida que el usuario toma las imágenes. Luego, el usuario alinea el cubo dentro de las líneas de guía, ya sea un lado único (una línea guía cuadrada) o tres lados (tres cuadrados en perspectiva). También es posible que desee que el usuario especifique la cantidad de cuadros de colores en cada fila. En su código, muestree el color en lo que debería ser el centro de cada cuadro de color y compárelo con los otros cuadros de color (dentro de un nivel de tolerancia) para identificar los colores. Además de proporcionar los resultados reconocidos al usuario, sería bueno permitir al usuario realizar cambios en los colores reconocidos. No parece que se necesita un reconocimiento de imagen de lujo.

0

NYARToolkit utiliza detección de marcadores y está hecho en JAVA (así como C# administrado para dispositivos de Windows). No sé qué tan bien funciona en la plataforma de Android, pero lo he visto utilizado en dispositivos móviles de Windows, y está muy bien hecho.

¡Buena suerte y feliz programación!

0

Sugiero que busque en la biblioteca Andoid OpenCV. Probablemente desee examinar los algoritmos de detección de blobs. También puede considerar las líneas Hough o Countours para detectar quads.