2011-11-09 13 views
15

Estoy tratando de extraer los números de un marcador típico que encontraría en un gimnasio de la escuela secundaria. Tengo cada número en una fuente digital "despertador" y han logrado la perspectiva correcta, umbral y extraer un dígito dado de la señal de videoReconocimiento de dígitos en el marcador mediante OpenCV

Sample input

He aquí una muestra de mi entrada de plantilla

Template input

Mi problema es que ningún método de clasificación determinará con precisión todos los dígitos 0-9. He intentado varios métodos

1) Tesseract OCR: este siempre se equivoca en 4 y con frecuencia devuelve resultados extraños. Solo usando la versión de línea de comando. Si realmente trato de entrenarlo en una fuente de "reloj despertador", obtengo un carácter desconocido cada vez.

2) kCerca de OpenCV - Busco una base de datos que contenga las imágenes de mi plantilla (0-9) y vea cuál es la más cercana. Frecuentemente recibo confusión entre 3/1 y 7/1

3) cvMatchShapes - éste es bastante mala, por lo general no puede decir la diferencia entre 2 de los dígitos para cada dígito de entrada

4) Tangente Distancia - Esta es la más cercana, pero la menor distancia de la tangente entre la entrada y mis plantillas termina mapeando "7" a "1" cada vez

Realmente estoy perdido para obtener un algoritmo de clasificación para tal problema simple Siento que he limpiado la entrada bastante bien y es un caso bastante simple para la clasificación, pero no puedo obtener nada lo suficientemente confiable como para usarlo en la práctica. Se agradecerá cualquier idea sobre dónde buscar algoritmos de clasificación o cómo usarlos correctamente. ¿No estoy limpiando la entrada? ¿Qué tal una mejor base de datos de entrada? No sé qué más utilizaría para la entrada, cada dígito y plantilla se ve bien en este momento.

Respuesta

9

El reconocimiento de dígitos clásico (que debería funcionar bien en este caso) es recortar la imagen justo alrededor del dígito, cambiar su tamaño a 4x4 píxeles, eventualmente aplicar un dct para adelgazar aún más el espacio de búsqueda (entonces puede seleccionar primeros 4-6 valores). Y con esos valores, entrena un clasificador. SVM es uno bueno, listo disponible en OpenCV.

No es tan simple como las sugerencias de Emma o Martin, pero es más elegante y, creo, más robusta.

EDITAR

Dada la relación de anchura/altura de la entrada, se puede elegir una pequeña resolución diferente. Como 3x4

+0

Utilicé una imagen de 3x5 (similar a las filas/columnas en la pantalla digital) y funciona muy bien con kBúsqueda más cercana. Muerto en. ¡Gracias! – pyromanfo

+0

¡Me alegra oír eso! ¡Seguir! – Sam

3

¿Puede sonar tonto pero ha intentado simplemente comprobar barras negras verticalmente y luego horizontalmente en las partes superior e inferior - izquierda y derecha de la línea central?

3

Dada la naturaleza altamente regular de su entrada, puede definir un conjunto de 7 áreas de destino de la imagen para verificar. Cada área debe abarcar una porción significativa de uno de los 7 segmentos de cada digital de la pantalla, pero no superposición.

Puede verificar cada área y promediar el color/brillo de los píxeles en para generar una probabilidad para un estado binario determinado. Si su probabilidad es alta en todas las áreas, entonces puede deducir fácilmente qué es el dígito.

No es tan elegante como un algoritmo de ML puro, pero ML es mucho más adecuado para entradas que no son regulares, y en este caso eso no parece aplicarse, por lo que intercambia elegancia por precisión.

2

Si está intentando el reconocimiento de texto con Tesseract, intente pasar no un dígito, sino un número de dígitos duplicados, a veces podría producir mejores resultados, here's the example. Sin embargo, si está planeando un software comercial, es posible que desee echar un vistazo a un OCR SDK comercial. Por ejemplo, intente ABBYY FineReader Engine. No es asequible el uso gratuito de las aplicaciones, pero cuando se trata de negocios, puede tener un buen valor para su producto. Por lo que sé, ABBYY proporciona la mejor calidad de OCR, por ejemplo, check out http://www.splitbrain.org/blog/2010-06/15-linux_ocr_software_comparison

Cuestiones relacionadas