2009-08-14 12 views
13

Decidí hacer un proyecto de diversión donde quiero tomar como entrada la imagen de un naipe y devolver su rango y palo. Me imagino que solo necesito mirar la esquina superior izquierda, ya que tiene toda la información. Debería ser robusto: si tengo una imagen grande de un As de Diamantes, debería poder escalar de 20 a 200% y obtener la respuesta correcta.OCR Playing Cards

Primera pregunta: ¿hay algo ya escrito que haga esto? Si es así, encontraré algo más para OCR, así que no duplico los esfuerzos.

Segundo: ¿cuál es la mejor manera de hacerlo? Red neuronal? ¿Algo codificado a mano? ¿Alguien puede dar algunos consejos? (0xCAAF9452 no es una respuesta aceptable).

+11

¿Qué tal 0xCAAF9460? – MitMaro

+0

obtienes un comentario upvote –

+2

Suena como si estuvieras haciendo un bot de póquer, no haciendo ningún ejercicio intelectual. –

Respuesta

2

Echa un vistazo a http://d-touch.org/, aunque tendrías que diseñar tus propias cartas.

También te puede interesar ocropus.

+0

lo estás tomando de la manera opuesta: me dieron naipes y tengo que OCR, no tengo que jugar naipes que son OCR-abe =) –

3

No creo que haya algo escrito para lo que está intentando lograr (al menos en código abierto y en Python).

En cuanto a su segunda pregunta, depende de lo que está tratando de reconocer. Si las entradas pueden provenir de diferentes fuentes, por ejemplo, diferentes marcas de naipes con estilos distintivos, entonces probablemente debería usar un algoritmo basado en de aprendizaje automático (como red neuronal o máquina de vector de soporte [SVM]), para que aprenda a reconocer entradas desconocidas. Sin embargo, si la entrada es siempre la misma en forma o estilo, bastará con un simple algoritmo de comparación de imágenes (por ejemplo, compare los píxeles de la esquina superior izquierda cortada con los píxeles de cada rango).

Si decides utilizar un algoritmo basado en el aprendizaje automático, también creo que no necesitas características muy complejas, ya que los trajes y los rangos no varían mucho en forma o estilo, y deberías bien con solo usar los píxeles de la esquina superior izquierda como características.

Hay un ejemplo de OCR de juguete here que puede encontrar interesante. La lib que se usa (LibSVM) también tiene una versión de Python, que he usado, y me pareció muy fácil de usar.

Espero que ayude.

1

No es tan robusto, pero puede ver los colores de 3 o 4 ubicaciones en la tarjeta para que, si son blancas o si son de un color, pueda determinar qué tarjeta y qué tipo de traje es. Obviamente, esto no funcionará si no siempre tienes las mismas cartas.

1

Personalmente iría a la ruta de aprendizaje automático con esta.

+0

¿Por qué necesitarías aprendizaje automático cuando el problema es tan específico? –

+3

Quizás entendí mal el problema, pero el OP está tomando imágenes fotográficas de las cartas y tratando de deducir que su rango y su palo son correctos. – DevDevDev

+0

Estoy de acuerdo. Obtienes un voto ascendente para compensar a los demás:). –

1

Dado el tamaño de muestra limitado (4 palos, 13 valores diferentes), trataría de hacer coincidir una imagen de referencia del traje y el valor con una nueva imagen de entrada. Primero encuentre el cuadro delimitador del juego/valor entrante (el cuadro más pequeño que encierra todos los píxeles no blancos), escale sus imágenes de referencia para que coincidan con el tamaño del cuadro delimitador y encuentre la mejor "coincidencia" mediante la diferencia absoluta entre píxeles. El color de la imagen (es decir, rojo o negro) hará que esto sea aún más fácil.

4

Use OpenCV

+0

gracias por el enlace! –

+0

+1 OpenCV ciertamente proporciona una buena caja de herramientas. – kenny