Tabla de contenido:

Recuento de objetos Raspberry Pi: 5 pasos
Recuento de objetos Raspberry Pi: 5 pasos

Video: Recuento de objetos Raspberry Pi: 5 pasos

Video: Recuento de objetos Raspberry Pi: 5 pasos
Video: Visión artificial: Detección de colores y contornos con nuestra Raspberry Pi 2024, Noviembre
Anonim
Recuento de objetos Raspberry Pi
Recuento de objetos Raspberry Pi

¡La visión por computadora, sin duda, es algo fantástico! Con esto, una computadora adquiere la capacidad de "ver" y percibir mejor el entorno que lo rodea, lo que permite el desarrollo de aplicaciones complejas, útiles y geniales. Aplicaciones como la detección y reconocimiento de rostros, el seguimiento de objetos y la detección de objetos están cada vez más presentes en nuestro día a día, gracias a los avances de la visión por ordenador.

Teniendo en cuenta lo avanzados y accesibles que son los marcos y herramientas de visión por computadora, la aplicación descrita en este artículo encaja bien: usando un Raspberry PI simple y un marco de visión por computadora de código abierto y gratuito llamado OpenCV para contar objetos en movimiento, más precisamente cuánto los objetos entran y salen de una determinada zona supervisada.

Paso 1: Profundización: ¿Cómo se puede detectar el movimiento de un objeto en una secuencia de imágenes?

Profundizando: ¿cómo se puede detectar el movimiento de un objeto en una secuencia de imágenes?
Profundizando: ¿cómo se puede detectar el movimiento de un objeto en una secuencia de imágenes?

Ahora es el momento de profundizar en el procesamiento de imágenes:

cómo obtener algunas imágenes de transmisión de la cámara web y detectar que algo se ha movido allí

Consta de cinco pasos:

Paso 1: para resaltar el objeto en movimiento

Como se define en la física clásica, una referencia es necesaria para inferir que algo se está moviendo o si está parado. Aquí, para determinar si algo se ha movido, es más o menos lo mismo: cada fotograma capturado de la transmisión de la cámara web se comparará con un fotograma de referencia. Si algo es diferente, algo se ha movido. Es tan simple como suena.

Este marco de referencia debe capturarse en las condiciones más perfectas (nada en movimiento, por ejemplo). En el mundo del procesamiento de imágenes, esta comparación entre un marco capturado y un marco de referencia consiste en una técnica llamada sustracción de fondo. La sustracción de fondo consiste en restar literalmente la información de color de píxel a píxel del marco capturado y el marco de referencia. Entonces, la imagen resultante de este proceso resaltará / mostrará con más detalles solo lo que es diferente entre estos dos cuadros (o, lo que se ha movido / tiene movimiento) y todo lo demás será negro en la imagen (el color del valor cero en un gris -píxel de escala). Importante: las condiciones de iluminación y la calidad de la imagen de la cámara web capturada (debido a la calidad de los sensores de captura) pueden variar levemente de un marco a otro. Implica que las "partes iguales" del marco de referencia y otros marcos no serán totalmente negros después de la resta del fondo. A pesar de este comportamiento, no hay consecuencias graves en los siguientes pasos del procesamiento de imágenes en este proyecto.

Para minimizar el tiempo de procesamiento de la imagen, antes de realizar una sustracción de fondo, el marco capturado y el marco de referencia se convierten en una imagen en escala de grises. ¿Pero por qué? Es un problema de eficiencia informática: una imagen que presenta varios colores (imagen en color) tiene tres informaciones por píxel: componentes de color rojo, azul y verde (el antiguo pero estándar estándar RGB). Entonces, matemáticamente, cada píxel se puede definir como una matriz de tres valores, cada uno representando un componente de color. Por lo tanto, extendiéndolo a toda la imagen, la imagen final será en realidad la combinación de tres componentes de imagen: componentes de imagen rojo, azul y verde.

¡Para procesarlo, se requiere mucho trabajo! Sin embargo, en las imágenes en escala de grises, cada píxel tiene solo una información de color. Por lo tanto, el procesamiento de una imagen en color es tres veces más lento que en el caso de una imagen en escala de grises (al menos tres veces, dependiendo de la técnica involucrada). Y hay más: para algunos propósitos (como este proyecto), procesar todos los colores no es necesario ni importante en absoluto. Por lo tanto, llegamos a la conclusión: el uso de imágenes en escala de grises es muy recomendable para fines de procesamiento de imágenes. Después de la sustracción de fondo, es necesario aplicar el filtro Desenfoque gaussiano.

El filtro Desenfoque gaussiano aplicado sobre la imagen sustraída de fondo suaviza todos los contornos del objeto detectado en movimiento. Sin duda, será útil en los próximos pasos del procesamiento de imágenes.

Paso 2: binarización

Binarización
Binarización

En la mayoría de los casos de procesamiento de imágenes, la binarización es casi un paso obligatorio después de resaltar objetos / características en una imagen. Motivo: en una imagen binaria, cada color de píxel puede asumir solo dos valores: 0x00 (negro) o 0xFF (blanco). Esto ayuda mucho al procesamiento de imágenes con el fin de requerir incluso menos "potencia informática" para aplicar técnicas de procesamiento de imágenes en los siguientes pasos. La binarización se puede realizar comparando cada color de píxel de la imagen en escala de grises con un cierto umbral. Si el valor del color del píxel es mayor que el umbral, este color del píxel asumirá el valor blanco (0xFF), y si el valor del color del píxel es menor que el umbral, este color del píxel asumirá el valor negro (0x00). Desafortunadamente, la elección del valor umbral no es tan fácil de hacer. Depende de factores ambientales, como las condiciones de iluminación. Una elección incorrecta de un valor umbral puede arruinar todos los pasos posteriores. Por lo tanto, le recomiendo encarecidamente que ajuste manualmente un umbral en el proyecto para su caso antes de realizar otras acciones. Este valor de umbral debe garantizar que el objeto en movimiento se muestre en una imagen binaria. En mi caso, después de la elección adecuada de un umbral, da como resultado lo que se ve en la figura 5.

Figura 5 - imagen binaria

Paso 3: dilatar

Hasta ahora, era posible detectar objetos en movimiento, resaltarlos y aplicar binarización, lo que da como resultado una imagen bastante clara del objeto en movimiento (= imagen bastante clara del objeto para fines de procesamiento de imágenes). La preparación para el conteo de objetos casi ha terminado. El "CASI" aquí significa que hay que hacer algunos ajustes finos antes de continuar. En este punto, hay posibilidades reales de presencia de "agujeros" en los objetos (masas negras de píxeles en el objeto resaltado en blanco). Estos agujeros pueden ser cualquier cosa, desde condiciones de iluminación particulares hasta alguna parte de la forma del objeto. Una vez que los agujeros pueden "producir" objetos falsos dentro de objetos reales (dependiendo de qué tan grandes y dónde estén ubicados), las consecuencias de la presencia de agujeros en una imagen pueden ser catastróficas para el conteo de objetos. Una forma de eliminar estos agujeros es utilizando una técnica de procesamiento de imágenes llamada Dilate. Use esto y los agujeros desaparecerán.

Paso 4: la búsqueda de los contornos (y sus centroides)

La búsqueda de los contornos (y sus centroides)
La búsqueda de los contornos (y sus centroides)

En este punto, tenemos los objetos resaltados, sin agujeros en su interior y listos para lo que sigue: la búsqueda de los contornos (y sus centroides). Hay recursos en OpenCV para detectar contornos automáticamente, pero los contornos detectados deben elegirse sabiamente (para elegir solo el objeto o los objetos reales). Entonces, el criterio para detectar los contornos es el área del objeto, medida en píxeles². Si un contorno tiene un área superior a un límite (configurado en software), entonces debe ser considerado como un objeto real para ser contado. La elección de este criterio / límite de área es muy importante, y una mala elección aquí significa recuentos incorrectos. Debe probar algunos valores de límites de valor de área y comprobar qué se adapta mejor a su uso. No se preocupe, estos límites no son tan difíciles de encontrar / ajustar. Una vez que se seleccionan todos los objetos de la imagen, el siguiente paso es dibujar un retangle (este retangle debe contener un objeto detectado completo en su interior). Y el centro de este rectángulo es…. el centroide del objeto! Quizás estés pensando "¿Cuál es el problema con este centroide?", ¿Verdad? Aquí está su respuesta: no importa qué tan grande o cómo sea la forma del objeto, su movimiento es el mismo que el del centroide. En otras palabras: este simple punto llamado centroide representa todo el movimiento del objeto. Hace que el conteo sea muy simple ahora, ¿no es así? Vea la imagen a continuación (figura 6), donde el centroide del objeto se representa como un punto negro.

Paso 5: Movimiento y recuento de objetos de Centorid

El gran final: compare las coordenadas del centroide del objeto con las coordenadas de las líneas de entrada y salida y aplique el algoritmo de conteo descrito anteriormente. ¡Y habrá recuento de objetos en movimiento!

Resultado final Como se muestra al principio de esta publicación, aquí está el proyecto en acción:

Recomendado: