2011-06-24 17 views
5

Estoy interesado en reconocer letras en una placa Boggle, probablemente usando openCV. Las letras son todas de la misma fuente, pero podrían rotarse, por lo que usar una biblioteca de reconocimiento de texto estándar es un problema. Además, el M y el W tienen caracteres de subrayado para diferenciarlos, y el Q es en realidad un Qu. Estoy bastante seguro de que puedo aislar las letras separadas en la imagen, solo me pregunto cómo hacer la parte de reconocimiento.reconocimiento de letras de boggle/scrabble de una imagen

Respuesta

6

Depende de lo rápido que necesite estar. Si se puede aislar el cuadrado de la letra y gire de manera que los lados del cuadrado que contiene la letra son horizontales y verticales entonces yo le sugeriría:

  • Convierte las imágenes en negro/blanco (con la letra el color y el resto de la matriz de la otra
  • crea un conjunto de datos de imágenes de referencia de todas las cartas en las cuatro posibles orientaciones (es decir, en posición vertical y se hacen girar 90, 180 y 270 grados)
  • utilizar una función de plantilla de coincidencia, tal como cvMatchTemplate para encontrar la mejor imagen que coincida con su conjunto de datos para cada nueva imagen.

Esto llevará un poco de tiempo, por lo que las optimizaciones son posibles, pero creo que obtendrá un resultado razonable. Si es difícil obtener una orientación adecuada, también puede generar versiones giradas de su nueva entrada sobre la marcha y unirlas a su conjunto de datos de referencia.

Si las letras tienen escala diferente entonces puedo pensar en dos opciones:

  • Si la orientación no es un problema (es decir, su detección bloque Boggle también puede poner el bloque en la orientación correcta), entonces usted puede utilizar el cuadro delimitador del área que tiene el color de la letra como indicador aproximado de la escala de la imagen entrante, y escala el tamaño del cuadro delimitador en sus imágenes de referencia (esto puede ser diferente para cada imagen de referencia)
  • Si la orientación es un problema, entonces simplemente agregue escala como un parámetro de su espacio de búsqueda. Entonces busca todas las rotaciones (0-360 grados) y todos los tamaños razonables (probablemente debería poder adivinar un rango razonable de las imágenes que tiene).
+0

¿Esto funciona para imágenes de diferentes tamaños/zoom? es decir, si la cámara está más cerca o más lejos de las baldosas? – eggbert

+0

He actualizado mi respuesta para su pregunta. –

4

Puede usar un OCR simple como Tesseract. Es simple de usar y es bastante rápido. Sin embargo, tendrás que hacer las 4 rotaciones (como se menciona en la respuesta de @jilles de wit).

2

Hice una aplicación de iOS que hace justamente esto, basada en OpenCV. Se llama SnapSolve. Escribí un blog sobre cómo funciona la detección. Básicamente, superpongo todas las 26x4 posibles letras + rotaciones en cada forma, y ​​veo qué letra se superpone más. Un pequeño reto a esto es suavizar la imagen de superposición, para deshacerse de los artefactos donde las letras casi se superponen, pero no del todo.

+0

No he visto mi proyecto durante algunos años, pero es un artículo muy interesante, gracias. El enlace al blog sobre hacerlo en javacsript también es bastante interesante. – eggbert

Cuestiones relacionadas