¿Es la FPGA la mejor manera de reconocer las tarjetas de un escritorio?

4

Estoy construyendo una máquina para repartir cartas y me gustaría recibir algunos consejos sobre cómo debo hacer con mi procesamiento de imágenes.

La tarjeta se escaneará y, según el palo y el rango de la tarjeta, se colocará en 1 de 4 ranuras.

La mejor manera que creo (que no tiene que ser la correcta) es usar un chip FPGA para el reconocimiento de la imagen. Un chip FPGA parece ser muy asequible para la velocidad pero no tengo experiencia con esto. Así que aquí hay algunas preguntas.

  1. ¿Es FPGA el camino a seguir o debo buscar una solución diferente? (El bajo precio y el consumo de energía son dos factores importantes para mí)
  2. ¿Es mejor, por ejemplo, leer la esquina de la carta y leer el palo y el rango individualmente (4 palos y 13 rangos) o simplemente comparar con las 52 cartas de la derecha? Realmente quiero la solución simple, por ejemplo, puedo usar fácilmente diferentes diseños de pisos.

¡Espero que tenga sentido aquí!

Gracias, Stefan

    
pregunta StefanE

7 respuestas

11

Para este tipo de aplicación, preferiría pensar en una solución DSP . Probablemente encontrará que el código de procesamiento de imágenes es más fácil para DSP que para FPGA. Claro, puede ejecutar un DSP suave en el FPGA, pero me pregunto cuál sería el valor agregado del FPGA. Parece que no necesita periféricos extensos alrededor del DSP, lo que justificaría una gran cantidad de puertas.
Solo conecta tu cámara a un convertidor de A a D y deja que el DSP haga el resto.

Analog Devices tiene esta caja de herramientas de procesamiento de imágenes para su Blackfin DSP . Analog tiene varias líneas DSP . Buscaría un kit de desarrollo DSP dirigido al procesamiento de imágenes.

    
respondido por el stevenvh
8

Tanto los chips FPGA como los chips DSP son optimizaciones especializadas donde intercambias mayor dificultad para implementar una idea para la simple posibilidad de un mayor rendimiento para un volumen físico y un costo determinados. Es decir, en relación con el uso de una PC básica.

Como resultado, lo mejor es que primero consiga que un algoritmo funcione (a cualquier velocidad) utilizando una PC y una cámara web. Luego, una vez que sepa con precisión los tipos de cálculos que deben realizarse, puede contemplar incluirlos en una plataforma integrada y hacer una elección informada de lo que debería ser esa plataforma (procesador de propósito general integrado, DSP o FPGA). p>

Editar: una cosa en la que hay que pensar cuando se hace esto es un punto entero frente a un punto flotante. Hay DSP de punto flotante, e incluso los bloques se pueden colocar en FPGA, pero especialmente para las implementaciones de enteros posteriores sería más fácil de construir. Obviamente, una PC moderna puede hacer ambas cosas.

    
respondido por el Chris Stratton
3

El contexto importa:

  1. Presupuesto: ¿qué es lo máximo que puede gastar en la compra / desarrollo de hardware e IP?
  2. Rendimiento: evalúe aproximadamente el rendimiento requerido (rendimiento, consumo de energía, etc.)
  3. IP: encuentre qué plataforma de candidatos (FPGA / uC / GPU / lo que sea) ha creado componentes de IP dentro de su presupuesto y márgenes de rendimiento.
  4. Creación de prototipos: identifique las plataformas de creación de prototipos dentro de su presupuesto, admita la IP existente que necesita y está dentro de su sobre de rendimiento.

Una vez que haya pensado en esas cosas, podrá responder la pregunta usted mismo. Tal como está, hay muy poca información aquí (para mí) para proporcionar una respuesta más significativa.

Por cierto, su segunda pregunta es un poco fuera del tema de la pregunta principal; Considera volver a preguntarlo una vez que hayas decidido una plataforma de destino.

    
respondido por el Saar Drimer
3

Los FPGA son mejores para operaciones paralelas masivas.

Es mejor mirar tu algoritmo y preguntarte: "Si tuviera 100-200 unidades de multiplicador / acumulador lento en lugar de una realmente rápida, ¿correría más rápido?" En otras palabras, ¿puede dividirse su algoritmo en muchas pequeñas operaciones paralelas que tienen interdependencias mínimas (lugares donde una operación depende del resultado de otra)?

Otra pregunta que debe hacerse es: "¿Tengo requisitos de E / S enormes que podrían solucionarse reemplazando un par de bancos de memoria RAM de varios megabytes por cientos de bancos de 32 a 4096 bytes más pequeños e independientes?"

Si las respuestas a estas preguntas son "sí", entonces un FPGA puede ser una buena solución y debería analizar el algoritmo más de cerca para ver si encaja. De lo contrario, utilice un DSP.

    
respondido por el Mike DeSimone
2

¿Su objetivo es tener una solución que funcione con cualquier plataforma del tamaño de un puente, o una solución que pueda adaptarse para funcionar con una plataforma particular del tamaño de un puente fácilmente disponible? Si esto último fuera aceptable, y si pudiera mover las tarjetas verticalmente a través de la máquina, es posible que pueda arreglárselas con una sola toma óptica. Si no fuera por el hecho de que usan luz roja, uno podría incluso sobrevivir con una unidad de ojo de foto reflectante o un lector de códigos de barras de tipo deslizable; Sin embargo, no estoy seguro de que las tarjetas rojas se puedan escanear de manera confiable con un LED rojo. Quizás las tarjetas de algunos proveedores funcionen de manera confiable con un escáner IR-LED.

En cualquier caso, el objetivo sería dibujar una línea vertical a cierta distancia de un borde de la tarjeta, de modo que los 13 rangos y los 4 palos produzcan patrones únicos. Yo esperaría que la mayoría de los diseños de tarjetas de los proveedores estuvieran dispuestos a encontrar esa línea. Si uno necesita que las tarjetas se muevan horizontalmente, lo más probable es que sea necesario usar al menos 2-4 líneas a través de la tarjeta (una o dos para el rango y el palo). Las cosas se complicarían por el hecho de que la mitad superior de una pala se parece a la mitad superior de un diamante, y la mitad inferior de un corazón se parece a la mitad inferior de un diamante; por lo tanto, sería algo difícil tener una sola línea horizontal que distinga los cuatro palos. Por el contrario, una línea vertical ligeramente descentrada produciría tres manchas con un palo, dos manchas con una pala, una gota grande cerca de la parte superior para un corazón y una gota más pequeña para un diamante. Tal línea también podría ser adecuada para distinguir todos los rangos diferentes, dependiendo de cómo se dibujen las figuras.

Quizás la mejor opción sería tener tres sensores si las cartas se mueven verticalmente a través de la máquina, o cinco si se mueven horizontalmente (tres para el rango y dos para el palo), y calcule que para la mayoría de los diseños de mazos probablemente ceda 13 patrones de escaneo diferentes para el rango y 4 para los palos). Tome aproximadamente 32 píxeles de cada sensor si escanea verticalmente, o 16 si escanea horizontalmente (por lo que uno tendrá un mapa de bits de 3x32 o 5x16). Escanea una docena de mazos ordenados y calcula la frecuencia con la que cada píxel está activado o desactivado para cada tipo de tarjeta.

Luego, para leer una tarjeta, escanéala como antes. Calcule la puntuación de coincidencia para cada rango / palo sumando, para cada píxel "activado", el número de cartas de "referencia" de ese rango / palo que tenía ese píxel activado, y para cada píxel "inactivo", el número de " cartas de referencia de ese rango / palo que tenían ese píxel desactivado. Si la impresión en las tarjetas es consistente, lo más probable es que haya un rango y un palo cuya puntuación de coincidencia exceda la de cualquier otra. Esa es tu tarjeta.

No se requiere ningún procesamiento especialmente sofisticado. Un ARM debería poder manejar esta tarea "a mano", pero incluso algo como un 18Fxx de Microchip debería poder "PIC" entregar las tarjetas de manera bastante confiable.

    
respondido por el supercat
1

Solo he usado la placa de evaluación para mojarme los pies, pero puedes mirar los procesadores xmos.com xcore. Son un híbrido si quieres. Procesadores multiproceso, lo que significa que los programa utilizando C y un compilador de C, pero diseñado para reemplazar cplds y fpgas, el procesador está orientado en gran medida hacia las operaciones de tipo de hardware. Programación superior a la media para un ingeniero de software, pero no tan lejos como lo necesitarías para llegar a HDL.

Dependiendo de lo lejos que quieras o necesites ir, es posible que solo desees colocar un dsp con una parte frontal de fpga dependiendo de cuál sea tu interfaz. O hay una serie de pgas con procesadores en el interior, tanto núcleos duros como núcleos blandos. Sin embargo, se necesita algo de experiencia con fpgas para que esa lógica se ejecute en frecuencias de megaherzios de dos o tres dígitos.

Puede ver algo como el beagleboard o hawkboard, básicamente para aprovechar el DSP con el ARM junto a él (que se ejecuta en el rango de varios cientos de mhz), todo dependerá de la E / S que necesite para el procesador. .

Me imagino que estás usando algún tipo de módulo de video / cámara para tomar una foto en color, creo que incluso el blanco y negro funcionaría. Los que normalmente tienen solo unos pocos pines en la interfaz, por lo que probablemente podrías introducir eso en algo en un beagleboard o hawkboard. Sé que hay otras personas además de embeddedarm.com (procesadores con fpgas en la placa, pero no los procesadores omap) que tienen fpgas en la placa de evaluación: usted gana-gana, solo tiene que conectarlo, no construir una placa de circuito impreso. No puedo pensar en eso ahora ...

Ahora, si coloca un código de barras en las tarjetas, podría ser como la oficina de correos y ser capaz de ordenar las tarjetas tan rápido como pueda moverlas físicamente. con un enfoque de cámara, simplemente tomar la foto será difícil con las soluciones disponibles en el estante y luego meterse en algo para ser procesado en una interfaz probablemente lenta, entonces puede procesarlo rápidamente. Al principio, es probable que continúes teniendo un sistema que solo conozca una marca o fuente, por ejemplo, de cartas (no a diferencia del código de barras del mazo).

doh, acabo de ver el comentario en otra publicación, sí, el leopardboard se ve bien, suponiendo que puedas reutilizar el procesamiento del video. Si solo tiene algunas características enlatadas, la familia jpeg, h.264 y algunas otras y esta característica de reconocimiento facial, y es difícil de rediseñar, tal vez quiera usar un DSP genérico.

    
respondido por el old_timer
0

Coloque un tablero de linux con un grabador de video conectado a una cámara de alta resolución sobre el escritorio. Luego, todo lo que tiene que hacer es aislar los rectángulos de la tarjeta de la imagen (las tarjetas pueden superponerse), rotarlos, aislar letras / números y formas, y reconocerlos.

    
respondido por el avra

Lea otras preguntas en las etiquetas