2010-04-08 11 views
13

Estoy tratando de crear una aplicación simple que reconozca los valores de dos dados de 6 caras. Estoy buscando algunos consejos generales, o tal vez incluso un proyecto de código abierto.Reconocimiento de valor nominal de los dados

Los dos dados serán en blanco y negro, con pepitas blancas y negras respectivamente. Su distancia a la cámara siempre será la misma, pero su posición y orientación en la superficie de juego serán aleatorias.

Dice http://www.freeimagehosting.net/uploads/9160bdd073.jpg
(no es el mejor ejemplo, la superficie será de un color más claro y las sombras se habrá ido)

que no tienen experiencia previa con el desarrollo de este tipo de software de reconocimiento, pero me supongamos que el truco es aislar primero las caras buscando el perfil cuadrado con un color blanco o negro dominante (el resto de la imagen, es decir, la mesa/superficie de juego, en colores claramente diferentes), y luego aislar las pepitas para el contar. Las sombras se eliminarán por iluminación descendente.

Espero que el escenario descrito sea tan simple (léase: común) que incluso se puede usar como un "ejercicio introductorio" para desarrolladores que trabajan en tecnologías de OCR o desafíos similares de visión por computadora.

Actualización:

he hecho un poco más buscando en Google y encontré this video, que curiosamente es exactamente lo que estoy buscando. También parece que es OpenCV project, es mi mejor apuesta hasta el momento, lo intentaré y usaré con este other project, OpenCVDotNet o Emgu CV.

Actualización:
Todavía luchando, no puede conseguir Emgu CV para trabajar.

Ideas, consejos, pensamientos, etc. son aún muy bienvenidos!

Respuesta

3

Aunque tengo poca asistencia técnica para ofrecerle, el fabricante del Dice-O-Matic mark II puede ayudarlo.

+0

Sí, conozco su proyecto, que es bastante impresionante. Pero simplemente no tengo las pelotas para pedirle ayuda directamente: es muy abierto acerca de los scripts del lado del cliente y cómo construyó la máquina. Pero no hay mención de los detalles del software, y ciertamente no hay descarga de esta fuente. No sé cómo se sentiría acerca de ayudar a un competidor ...:/ –

+0

Parece que el software para esa máquina tan genial hace uso del hecho de que las pepitas tienen un color diferente dependiendo de la cara de los dados, por lo que las pepitas amarillas significan que se rodaron dos, seis azules, etc. –

+0

Sí, es una solución bastante elegante. Sin embargo, mi escenario es ligeramente diferente ya que la posición y la orientación de los dados no son fijas. Tampoco puedo usar el mismo dado como lo hace con pepitas de diferentes colores. –

2

El reconocimiento de imágenes no es trivial. Vas a tener que restringir los datos de entrada de alguna manera, y parece que has pensado en esto.

Tu pregunta me recordó una blog post by the author of SudokuGrab, que es una aplicación de iPhone que te permite tomar fotos de un rompecabezas de Sudoku en un periódico y hacer que resuelva el rompecabezas por ti. En la publicación, analiza varios de los problemas que enfrentará al resolver su problema y cómo los superó.

+1

Estoy totalmente de acuerdo en que es absolutamente no trivial, aunque el concepto en sí parece bastante simple. Tengo una idea de cómo probablemente se haría, pero estoy totalmente en blanco sobre cómo comenzar. Sin embargo, para los profesionales que trabajan con esto a diario, creo que las condiciones que he establecido son bastante buenas, y tal vez no representen un gran desafío si solo saben cómo hacerlo. :) Revisé el artículo al que me vinculó, se ve muy interesante, y lo leeré a fondo más tarde hoy. Muchas gracias. –

9

Si bien el entrenamiento de imágenes no es "trivial" como dijo @Brian, en realidad será un programa bastante fácil de escribir. Lo que debes hacer es desarrollar clasificadores de haar para los dados. Necesitarás 6 clasificadores en total. Los clasificadores son la clave para una buena recongnición de imágenes, y los clasificadores de haar son los mejores que existen en este momento. Toman mucho tiempo para hacer.Aquí están algunos buenos enlaces a ayudarle a familiarizarse con cascadas Haar:

http://www.computer-vision-software.com/blog/2009/11/faq-opencv-haartraining/

http://www.cognotics.com/opencv/docs/1.0/haartraining.htm

http://note.sonots.com/SciSoftware/haartraining.html

Compruebe hacia fuera esta chicos vídeo de YouTube y luego descargar su origen desde el enlace que proporciona en el video para ver cómo aplicó los archivos en cascada en EmguCV. Será algo en lo que podrás construir.

http://www.youtube.com/watch?v=07QAhRJmcKQ

Este sitio mensajes del enlace a alguna fuente de pequeña herramienta que añade un poco de automatización para recortar las imágenes y la creación de los archivos de índice necesarios para la creación de las cascadas de Haar. Lo usé hace unos meses y no pude hacerlo funcionar correctamente, pero lo modifiqué y funcionó de maravilla para HAAR (no HMM). Si quieres la versión que modifiqué la publicación, te la devolveré.

http://sandarenu.blogspot.com/2009/03/opencv-haar-training-resources.html

3

bien,

algoritmos para llevar a cabo el reconocimiento de imágenes con un alto nivel de abstracción (como el tipo de abstracción necesaria para producir software de reconocimiento de escritura fiable o enfrentar el software de reconocimiento) persiste como una de las problemas más difíciles en la informática hoy en día. Sin embargo, el reconocimiento de patrones para aplicaciones bien restringidas, como la aplicación que describió, es un problema algorítmico solucionable y muy divertido.

Yo sugeriría dos estrategias posibles para llevar a cabo su tarea:

La primera estrategia consiste en utilizar algún software de terceros que pueden preprocesar su imagen y datos sobre componentes de la imagen de bajo nivel de retorno. Tengo experiencia en el uso de un software llamado pixcavator, que tiene un SDK here. Pixavator minará su imagen y estudiará la discrepancia entre los valores de color de cada uno de los píxeles para devolver los bordes de varios componentes en la imagen. Un software como pixcavator debería ser capaz de definir fácilmente los límites de los comentes en su imagen y lo más importante de cada uno de los puntos. Su trabajo será minar a través de los datos que le devuelve el software de terceros y buscar componentes que se ajusten a la descripción de pequeñas particiones circulares que son blancas o negras. Podrá contar cuántos de estos componentes de imagen se han dividido y usarlos para devolver la cantidad de puntos en su imagen.

Si es lo suficientemente ambicioso como para trabajar en este problema sin el uso de software de terceros, el problema aún se puede resolver. Básicamente, querrá definir un escáner circular que es un conjunto de píxeles en una formación circular que escaneará a través de su prueba de imagen en busca de un pip (tal como un ojo puede escanear una imagen para buscar algo oculto en la imagen).) A medida que su "ojo" algorítmico explora la imagen, tomará conjuntos de píxeles de la imagen (llámelos conjuntos de prueba) y comparará con un conjunto predefinido de píxeles (lo que llamaremos sus conjuntos de entrenamiento) y verificará para ver si el conjunto de prueba coincide con uno de los conjuntos de entrenamiento dentro de una tolerancia de error predefinida. La forma más fácil de ejecutar una prueba como esta sería simplemente comparar los datos de color para cada uno de los píxeles en el conjunto de prueba con cada uno de los píxeles en el conjunto de entrenamiento para producir un tercer conjunto de píxeles llamado conjunto de discrepancias. Si los valores en su conjunto de discrepancias son lo suficientemente pequeños (lo que significa que el conjunto de prueba es lo suficientemente similar al conjunto de entrenamiento) definirá esa área en su imagen como una pipa y seguirá explorando otras partes de su imagen.

Tomará una pequeña conjetura y comprobará para encontrar la tolerancia de error correcta para que pueda capturar cada pip y no dar positivo para las cosas que no son pepitas.

+0

El segundo enfoque es muy agotador y no es robusto para la rotación de los dados y las transformaciones de proyección. – Temak

1

Otra posibilidad es usar primero un algoritmo de manipulación/reconocimiento de imagen más genérico para precisar las posiciones de los dados, luego girar y escalar la imagen a alguna forma de estándar (como imágenes de 512x512 píxeles en escala de grises de los dados que se han rotado Sé directo). Luego intente entrenar 6 redes neuronales diferentes para reconocer los diversos números de dados en la pantalla. AForge.Net es una buena biblioteca de inteligencia artificial sólida (incluidas las redes neuronales), y debería ayudarte un poco.

2

Esta es una pregunta muy simple al Object Recognition from Templates a la que proporcioné una respuesta que creo que podría ser de utilidad.

Si bien los diferentes tipos de clasificadores probablemente funcionen bien, probablemente probaré el método que describí primero. Los clasificadores son a menudo difíciles de implementar y especialmente para entrenar adecuadamente. Además, cuando las cosas no funcionan, es muy difícil saber dónde está el problema: ¿está en su implementación del clasificador, eligió el método incorrecto, los parámetros son incorrectos, no lo entrenó correctamente, o ¿tienes mala suerte?

No, aléjese de los clasificadores, la coincidencia de plantillas y las redes neuronales si el problema puede (fácilmente) resolverse utilizando los métodos de procesamiento de imágenes simlpe y algunos cálculos matemáticos.

1

En this video puedes ver más o menos el comportamiento que deseas, creo. El autor está usando múltiples dados blancos, pero él está proporcionando el código (python/opencv) y quizás puedas construir tu proyecto sobre eso.

+0

Si bien este enlace puede responder a la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. - [De la crítica] (/ reseña/mensajes de baja calidad/18960777) –