2012-02-17 18 views
6

Tengo una aplicación en mente que deseo producir. Tenemos paneles de programación montados en la pared que se dividen en pequeños rectángulos con líneas negras sobre un fondo blanco. Las etiquetas de nombre magnético se colocan en una partición particular para indicar que esta persona debe trabajar en esa celda. Este sistema funciona muy bien para la comunicación entre personas, pero me gustaría una forma automática de guardar esta información de programación en una base de datos automáticamente.¿Manera de código abierto para la aplicación de OCR de procesamiento de imágenes en tiempo real?

Estoy visualizando un sistema en el que una cámara se establece en una posición fija enfocándose en la tabla de programación. Periódicamente, la cámara tomará una foto del tablero. Quiero escribir un código para descifrar qué etiquetas de nombre están en qué área. Esto requeriría reconocimiento de OCR o símbolos. Hay grandes números en cada etiqueta de nombre que usaré para identificar a la persona cuya etiqueta de nombre es.

Naturalmente voy a Python cuando abordo un nuevo problema de programación. Encontré esta publicación ->python image recognition que parece un buen lugar para comenzar (con PIL y numpy).

¿Conoces una buena manera de hacerlo?

Actualización: He intentado con SimpleCV y parece estar bien por ahora.

+2

Creo que puede facilitar su tarea si agrega un código de barras a las etiquetas de nombre o escribe los números en una fuente diseñada para facilitar el OCR. –

Respuesta

4

Esto es realmente un problema bastante difícil, aunque parece bastante simple. Pero puede hacerlo mucho más fácil al hacer algunas cosas en su imagen para que esto sea manejable. Tengo las siguientes sugerencias:

  • tratar de hacerlo para que su cámara está mirando directamente a la junta con un objetivo razonable para que haya una mínima distorsión de la imagen en los bordes, y sin distorsión de la perspectiva.
  • Dado que usted tomará imágenes ocasionalmente para el análisis, creo que el rendimiento no es un problema, así que tome imágenes de alta resolución, con flash o con un tiempo de exposición prolongado (porque todo lo que está grabando es estacionario) para obtener la mejor calidad de imagen posible.
  • Si la cantidad de etiquetas diferentes que espera no es demasiado grande, le resultará más fácil tratar de hacer coincidir las imágenes de referencia de estas etiquetas en su imagen a través del template matching en lugar de ir por el OCR completo de números. Es mucho más fácil trabajar si tu imagen es lo suficientemente buena. El python opencv interface es muy completo.
  • Marca de alto rendimiento tiene un buen comentario a su pregunta acerca de incluir barcodes en las etiquetas. Agregaría la opción de QR codes, pero eso es exactamente lo mismo. Ambos son fáciles de detectar y hay buenas bibliotecas para ayudarlo a leerlos.
  • Si decide que necesita un OCR, debe buscar en los paquetes OCR disponibles y no intentar hacer los suyos. Pruebe pytesser para el motor tesseract o el OCRopuspython interface.
+0

Desde mi experiencia con una configuración de captura de imagen muy similar, el flash a menudo es muy inútil si la superficie que está tratando de fotografiar es altamente reflectante como, por ejemplo, la mayoría de las pizarras blancas, y el flash está ubicado en el mismo lugar que el cámara. Pero la buena iluminación, como sea que venga, es más útil. –

+0

Sí, si usa un flash, debe colocarlo de modo que las reflexiones b no se conviertan en un problema. En general, debes comenzar con una imagen tan buena como puedas obtener. –

+0

Me gusta la idea de códigos de barras o códigos QR. Quizás un borde distinto para cada etiqueta con un código de barras. –

2

Como mencionó que le gustaría usar Python para este problema, quizás podría echarle un vistazo al SimpleCV. Le proporcionará una manera fácil de tomar la imagen de la cámara y hacer un procesamiento de imagen básico.

0

Estoy totalmente de acuerdo con jilles de witt que OCR sería una tarea de análisis de imagen extremadamente difícil de desarrollar desde cero. La lectura de códigos sería una mejor opción, pero también será difícil de programar y requerirá imágenes sofisticadas o algo desafiantes, como otros han notado. Sin embargo, para esta aplicación realmente no necesita implementar OCR o códigos de barras formales, QR u otros códigos 2d.

Dado que su aplicación está restringida a un número limitado de objetivos, quizás podría crear su propio código simple. Por ejemplo, puede colocar de 0 a 4 puntos grandes en una matriz de 2x2 después del nombre de cada persona. Este código de ejemplo simple identifica de forma única 16 etiquetas únicas, y las características serán mucho más fáciles de crear imágenes, extraer y decodificar que los códigos formales. Agregue una línea de localización si la posición del código no es consistente.

Cuestiones relacionadas