Sistema embebido para proyecto de procesamiento de imágenes.

¿Es posible hacer procesamiento de imágenes (para extraer números y texto) usando un microcontrolador? Si no, ¿cuáles son las alternativas para hacer esta tarea?

Debe hacer preguntas para el procesamiento de imágenes: ¿Cómo obtenemos la imagen en el microcontrolador? ¿Cómo se almacenan las imágenes (tamaño de la memoria)? ¿Cómo realizamos operaciones en ellos (codificación ex jpeg)? ¿Podemos hacer esto lo suficientemente rápido (velocidad máxima de fotogramas)?
debe usar un DSP con algunas funciones específicas para el procesamiento de imágenes, como MAC y SIMD, que se usan para el procesamiento de imágenes y la función de transformación FFT, DCT, etc.

Respuestas (4)

Sí, el procesamiento de imágenes se puede realizar mediante microcontroladores y microprocesadores. Puede realizar el procesamiento de imágenes utilizando Arduino con OpenCV o MatLab. O si está más interesado en los microprocesadores, puede usar una computadora integrada como Raspberry Pi (RPi) o Beaglebone (BB), que es más adecuada para proyectos de procesamiento de imágenes potentes. RPi tiene una GPU incorporada que es mejor para sus aplicaciones, pero BBB también se puede usar para aplicaciones de procesamiento de imágenes considerando el hecho de que tiene un procesador ARM mejor y más rápido. Dado que BB y RPi se ejecutan en Linux, puede usar OpenCV o simpleCV más comunes para realizar la tarea.

Puede usar el procesamiento de imágenes usando BBB y OpenCV o RPi y OpenCV. OpenCV es un Tiene interfaces C ++, C, Python y Java y es compatible con Windows, Linux, Mac OS, iOS y Android. Le sugiero que use OpenCV que usa C ++ para BBB (C ++ es más rápido en comparación con RPi y BBB no tiene GPU, por lo que existe la posibilidad de ralentizar el procesamiento) y use OpenCV que usa Python para RPi (python es mucho más fácil de codificar y RPi tiene una GPU). He usado tanto RPi como BBB en el pasado, pero le sugiero que compre un RPi para su aplicación, ya que es más barato y tiene una gran documentación en línea.

Actualización: hay muchos algoritmos basados ​​en OCR disponibles en línea para OpenCV, pero no son tan confiables. Creo que el mejor motor OCR de código abierto es Tesseract. Puede obtener más información sobre esto en el hilo Tesseract o OpenCV para OCR .

En la actualidad, estoy usando OpenCV-python para RPi, pero me resulta difícil encontrar documentación relacionada con las técnicas de extracción de texto. Traté de implementar un algoritmo basado en la transformación del ancho del trazo en Python, pero no obtuve nada. ¿Puede sugerir el mejor algoritmo para implementar y por qué se prefiere openCV sobre Scikit-image y PIL?
He actualizado el hilo, marque este hilo como completo si esto es lo que estaba buscando. Saludos. :)

Realmente depende de qué tipo de microcontrolador y periféricos estemos hablando, así como de qué tipo de procesamiento de imágenes. Debe hacerse las siguientes preguntas (y responderlas, por supuesto)
1) El primer problema es obtener los datos de la imagen en la unidad de procesamiento: ¿cómo se hará? ¿De dónde provienen los datos? ¿Dónde se almacena?
2) ¿Qué tan rápido debe ser el procesamiento?
3) ¿La imagen tiene que estar completamente cargada en la memoria de la unidad de procesamiento para ser procesada o solo una parte es suficiente? Conducirá a requisitos de memoria
4) ¿Qué vas a hacer con los datos procesados?

En general, el procesamiento de imágenes se realiza en un tipo especial de microcontroladores/procesadores, llamados DSP (procesadores de señales digitales) que están optimizados para procesar grandes conjuntos de datos digitales. Entonces, después de haber respondido las preguntas anteriores, analice estas.

La extracción de números y texto de un documento se denomina reconocimiento óptico de caracteres (OCR). Este es un tema bastante complejo y existen varios enfoques para realizar OCR. Aunque el término OCR implica el uso de algún tipo de cámara para generar una imagen del texto, la mayoría de las veces los caracteres se "leen" de un documento existente, como un archivo de Word o PDF, un FAX o una salida de escáner (que puede ser una imagen). archivo como un jpeg). Entonces, en todos estos casos, se debe tener en cuenta el formato del archivo.

En cualquier caso, suele haber una etapa de preprocesamiento, en la que se corrigen los caracteres (se alinean para que estén verticales, por ejemplo) y luego se realiza la detección de bordes.

Si se sabe que los caracteres se crearon a partir de una fuente en particular, como Times Roman, o de algunas fuentes conocidas, se puede utilizar el reconocimiento de patrones. Esto es bastante fácil pero requiere bastante memoria fija (que puede estar en flash). Si los caracteres son de una variedad de fuentes, esto se vuelve más difícil. En ese caso, se puede usar la extracción de características en su lugar. El desafío más difícil es si los caracteres están escritos a mano de forma libre.

Si se sabe que solo se están ingresando números en un campo en particular, esto también facilita mucho las cosas. Del mismo modo, se puede usar un diccionario para ayudar a reconocer palabras (una vez más, esto requeriría mucha memoria flash).

Con suficiente memoria, tanto flash como RAM, no hay razón para que un microcontrolador no pueda realizar OCR, aunque probablemente no podría hacerlo en tiempo real; tendría que ser una tarea fuera de línea. Además, se recomienda encarecidamente un procesador de 32 bits.

El OCR, como se mencionó anteriormente, es principalmente una tarea de reconocimiento de patrones y no requiere necesariamente DSP; sin embargo, DSP podría ser útil para limpiar los caracteres antes del procesamiento posterior de OCR, como eliminar el ruido.

Básicamente, no. Hágalo con una computadora integrada como Raspberry Pi o Beaglebone. Estos son excelentes para la visión por computadora integrada, son muy baratos y el Beaglebone tiene esquemas de referencia para que pueda diseñar su propio sistema después de que terminen las etapas de creación de prototipos.

Los algoritmos de reconocimiento de texto probablemente tengan muchas bibliotecas de código abierto disponibles ahora, pero todas serán para el sistema operativo Linux adecuado, en lugar de un sistema operativo de microcontrolador en tiempo real. Es mucho más fácil con una arquitectura de estilo de CPU completa.

En el raspberry pi (usando OpenCV 2/3 con enlaces de Python) obtuve 20-30 cuadros por segundo en el reconocimiento y seguimiento de objetos con imágenes ligeramente muestreadas del módulo de la cámara Pi.