Uso del procesamiento de imágenes para inferir si un asiento está ocupado

Estoy buscando diferentes opciones de control de asistencia para una clase de seminario particularmente grande (600 estudiantes) y estaba pensando: ¿qué pasaría si se tomara una foto de los asientos, tal vez con una señal visual en ellos, como una cinta reflectante? Se tomó otra foto durante una clase con asientos asignados y si la cinta reflectante está cubierta, podría ser una buena indicación de si el asiento está ocupado o no.

¿Qué tipo de software debo buscar para lograr este efecto? Lo principal es poder detectar un objeto (tal vez algún tipo de material que sea obvio para la computadora) y detectar si se ha ido.

Migré su pregunta a un sitio donde está en el tema. Su pregunta cumple principalmente con nuestras pautas de calidad , lo cual es bueno, pero debe brindarnos un poco más de información. Que sistema operativo tienes disponible? ¿Cuánto estás dispuesto a pagar (si no hay un software gratuito que pueda hacer esto)?
Detectar qué asientos están ocupados es una cosa, pero no veo cómo van a determinar si los estudiantes están ocupando esos asientos. ¿Hacer que cada estudiante use una camiseta con un código QR único?
Si hay alguna gran solución, probablemente podría llegar a 500-1000 dólares (si es algo de una sola vez). Estoy abierto a otras sugerencias también. El sistema operativo es Windows pero puedo usar cualquier sistema operativo, no es gran cosa.
También estoy investigando algún software de reconocimiento de fotos real, por lo que si tiene alguna información al respecto, sería genial. Con respecto a los asientos ocupados, si hay asientos asignados, se supone que los estudiantes no podrán cubrir un asiento para su amigo, etc. porque no están muy cerca.

Respuestas (3)

Si puede garantizar que la cámara estará exactamente en la misma posición cada vez (nadie la moverá ni la golpeará) y puede elegir la naturaleza o el color de la cinta reflectante, es posible que pueda utilizar un software sencillo de diferenciación de imágenes. .

ImageMagick contiene software que le permitirá comparar dos imágenes. Se puede usar para calcular una "imagen de diferencia" que muestra las ubicaciones de píxeles donde hay una diferencia sustancial entre los dos.

Con eso, esto es lo que podrías hacer. De antemano, tome una foto del auditorio mientras está vacío. Luego, encierre manualmente en un círculo cada una de las ubicaciones correspondientes a cada silla (por ejemplo, la ubicación donde se encuentra la cinta reflectante). Luego, el día de la conferencia, tome una foto y haga una "diferencia" para comparar esa imagen con la del auditorio vacío. Eso le dará un mapa de calor de las ubicaciones de píxeles donde hay una diferencia sustancial entre las dos imágenes. Finalmente, puede recortar las ubicaciones que haya determinado previamente que corresponden a un asiento y contar cuántas de ellas hay. También puede usar ImageMagic para recortar ubicaciones particulares, calcular la intensidad promedio en esas regiones y compararla con un umbral.

Si la cinta reflectante es de un color en particular, también puede usar ImageMagick para enfocarse en un canal de color en particular.

Esto es un poco raro. No sé qué tan bien funcionaría, pero sería bastante fácil experimentar con él a mano y determinar qué tan bien funcionaría.

Aquí hay más información sobre cómo usar ImageMagick para comparar imágenes:

Esto dará bastantes falsos positivos porque la gente pone bolsas/bebidas en asientos vacíos a su lado.
@ user3791372 Esto es más un comentario sobre la metodología propuesta en la pregunta, ¿no?
@Chop no, se trata del uso de diferenciar dos imágenes juntas
@ user3791372 La pregunta sugiere contar una cinta reflexiva en asientos desocupados. La dificultad de las bolsas y las bebidas también puede surgir. Pero estoy de acuerdo con la dificultad, por lo que creo que DW sugirió diferenciar solo secciones específicas de la imagen. Creo que entiendo su significado (la cinta puede estar visible aunque parcialmente oculta, lo que resulta en una diferencia donde el asiento aún está libre).

Puede considerar usar opencv para crear algo que reconozca un asiento que está vacío frente a un asiento que está ocupado. Hay varios algoritmos de procesamiento de imágenes que serán útiles, aunque este sería un software personalizado que tendría que hacer.

Tendría que entrenar el software para aprender cómo se ve un asiento vacío o cómo se ve un asiento ocupado, incluido el entrenamiento para reconocer cómo se ve un asiento con una bolsa / comida para no contarlo como ocupado.

Si los asientos tienen un cierto color brillante, es posible que pueda salirse con la suya con la detección de color, aunque dudo que sea 100% preciso, ya que los estudiantes podrían usar ropa del mismo color que los asientos.

Me imagino que el mejor ángulo sería desde arriba, pero esto puede requerir varias cámaras para evitar la distorsión de los asientos.

Esto sería MUY complicado y requeriría muchas horas de mano de obra para producir el software y asegurarse de que esté debidamente capacitado.

¿No sería más fácil abordarlo desde otro ángulo? Realice un conteo automatizado a medida que las personas ingresan por la entrada con un simple haz de luz y un receptor y cuente cada vez que se rompa. ¿Quizás una almohadilla de presión para los pies? O gente empujando un clicker al entrar (¡que dicho sea de paso podría estar conectado a un contador de leds en el pasillo!). Algo sencillo que se podría hacer usando un pi/arduino. Estoy seguro de que obtendrá algunos falsos positivos con personas que salen y vuelven a entrar, pero sería MUCHO más simple de lo que está proponiendo.

O, ¿por qué no utilizar la antigua ruta tradicional? Pasar un papel con los nombres de las "normas contra incendios". ¡Entonces podría usar OCR para ver quién asistió rápidamente y hacer gráficos bonitos de ello! Si la asistencia es parte de la calificación, entonces sería doblemente útil.

O... si quiere saber qué estudiantes hay allí, entregue a cada estudiante una tarjeta NFC con un número individual codificado y, cuando entren, la deslizarán a través de un receptor. Las tarjetas NFC son baratas y codificarlas es bastante trivial. Auge. Tal vez podrían incorporarse a las tarjetas de estudiante.

Sin embargo, supongo que, por la falta de detalles, conocimiento y esfuerzo mostrados en su pregunta, esto no es para una situación real, solo una tarea para que investigue métodos y para que piense fuera de la caja.

Este artículo de blog brinda un buen punto de partida para trabajar en la detección de rostros usando python y OpenCV2 en 25 líneas de código python; hay varios artículos de este tipo disponibles. La consideración importante es si está tratando de obtener un número aproximado o 100% exacto.

La detección de rostros nunca es 100% precisa, y no se mencionó nada sobre la detección de rostros
De ahí la consideración mencionada en lo anterior.