Captura y análisis de imágenes

Estoy trabajando en un proyecto para hacer un circuito para un proyecto de visión artificial. Básicamente, el circuito necesita tomar una imagen (320 × 240), buscar algunas características y luego dar un comando basado en las características.

Por ejemplo, si no se encuentra una flecha roja, se enviará un comando "borrar". Si se encuentra una flecha roja, entonces el circuito necesita enviar la dirección de la flecha.

Mi pregunta es: si quiero terminar cada ciclo (desde tomar una foto hasta enviar la dirección) en 2 segundos, ¿sería posible usar un microcontrolador PIC? ¿Qué controlador PIC y cámara me permitirían hacer eso?

NOTA: mi jefe necesita una solución ACAP (lo más económica posible).

Debe decirle a su jefe que ACAP no es una especificación. Necesitas un presupuesto real.
Creo que puedo venderle mi solución a mi jefe si el costo del circuito y la cámara es inferior a USD$60.
¿Qué tan rápido debe ser el reconocimiento?
@suha Un ciclo completo en 2 segundos.
También publique cualquier fuente (por ejemplo, sitio web, código) aquí. Mi jefe me da este proyecto hoy y quiere que lo termine en 3 semanas.
@Superhero El tiempo dependerá totalmente de la complejidad requerida para la detección. Tienes que dar mucha más información. Creo que tres semanas no es suficiente para que lo completes.
Una imagen de un solo color con una profundidad de color de 24 bits tiene un tamaño de 320 × 240 × 3 bytes. No hay muchas posibilidades de que un PIC tenga 230400 bytes de RAM libre. Por supuesto, puede reducir la profundidad de color a 8 bits (3 bits para rojo, 3 bits para verde, dos bits para azul), entonces su imagen aún usará 76800 bytes y eso probablemente tampoco encaje en un PIC promedio (nunca estudié Hojas de datos PIC, pero cerca de 100kB de RAM para un microcontrolador simple me parece poco probable).

Respuestas (2)

Es plausible que un PIC32 pueda hacer este trabajo, pero depende enormemente de los detalles de su algoritmo de reconocimiento. Aquí hay algunos posibles algoritmos que podría tener la intención de implementar:

  • Detecte una flecha roja brillante, que siempre tiene el mismo tamaño, en una escena bien iluminada de objetos completamente no rojos.
  • Detecte una flecha roja brillante, que puede tener diferentes tamaños, en una escena bien iluminada de objetos completamente no rojos.
  • Detecte una flecha rojiza, que puede tener diferentes tamaños, en una escena de objetos mal iluminados, muchos de los cuales también pueden ser rojos, y donde el fondo también puede ser rojo.

El primero sería un algoritmo mucho más simple que el último.

Hagas lo que hagas, tendrás que tener bastante cuidado con el uso de la memoria y los recursos de procesamiento. Los PIC32 tienen un máximo de 128k de memoria, que debería ser suficiente para almacenar la imagen:

320x240 = 75kB.

...siempre y cuando solo almacene el componente de tono. Alternativamente, puede estar dispuesto a almacenar una imagen de menor resolución con color de 24 bits.

160*120 = 56kB.

Si puede darnos algunos detalles de la naturaleza exacta del reconocimiento y el algoritmo, es posible que podamos ayudar más:

  • ¿Ya implementaste esto en una PC?
  • ¿La flecha es siempre mucho más roja que el fondo?
  • ¿La flecha siempre tendrá el mismo tamaño en la imagen?
  • ¿Será siempre la misma flecha? ¿O podría ser una flecha dibujada a mano?
Gracias por tu respuesta. La flecha siempre es más roja que el fondo. La flecha no siempre es del mismo tamaño. Puedes asumir que la flecha en mi caso es (x1 i + y1 j) es el final y (x2 i + y2 j) es la cabeza. El x1, x2, y1, y2 se cambiará cada vez en una imagen. No es una flecha dibujada a mano.
@Superhero - ¿Puedes publicar una imagen de ejemplo?
De hecho, usaré mi sistema para detectar la alineación de dos placas de metal. La idea es una línea roja en el borde superior de una placa de metal. El segundo plato estará encima del primer plato. Si todo está perfectamente alineado, la segunda placa cubrirá totalmente la línea roja de la primera placa. Si cualquiera de los dos cambia, se verá la línea roja, entonces tengo que decir cuál es el ángulo de la línea roja que ve la cámara, para que se pueda hacer algún ajuste en esa situación.
@Superhero: ¿Has considerado simplemente usar una Raspberry Pi o algo así?
¿Necesito instalar un sistema operativo en la Raspberry Pi? No tengo ninguna experiencia de Raspberry Pi en absoluto
Secundo a la Raspberry Pi.
Gracias por tu sugerencia. Me gustaría usar PIC en este momento, porque tengo un poco de experiencia en PIC. No soy lo suficientemente inteligente como para aprender sobre Raspberry Pi en 3 semanas. Sin embargo, definitivamente comenzaría a aprender sobre Raspberry Pi a partir de hoy.
@Superhero: es posible que descubra que el RPi es realmente muy fácil de usar. No olvide que fue diseñado específicamente para ayudar a las personas a aprender a programar. También puede encontrar que es más barato que su solución PIC.

Yo también iba a sugerir la Raspberry Pi. Viene precargado con un sistema operativo basado en Linux, pero se está realizando una gran cantidad de piratería para darle una funcionalidad enorme además de lo que obtiene de la caja. La gente tiene Android ejecutándose en él, pero más útil (si eres nuevo en esto) sería lo que Adafruit acaba de lanzar: Adafruit Raspberry Pi Educational Linux Distro . Es una nueva distribución de Linux específicamente para Raspberry Pi, lo que hace que muchas cosas sean mucho más fáciles de hacer. Creo que se eliminará una gran cantidad de complejidad de su proyecto si usa algo que no sea una MCU.

En este momento, Raspberry PI tiene un tiempo de entrega prolongado y en cantidades de compra limitadas. Por ejemplo, no puede pedir 10000 piezas. Eso podría eliminarlo en muchos proyectos comerciales, probablemente incluido este.
@avra No creo que haya mencionado que necesitaba hacer tantos, pero entiendo tu punto. Aunque creo que levantaron el límite en el número que puedes comprar, creo.