Tengo un proyecto de pasatiempo en el que estoy pensando comprometerme como una forma de aumentar mi experiencia hasta ahora limitada de aprendizaje automático. He tomado y completado el Coursera MOOC sobre el tema. Mi pregunta es con respecto a la viabilidad del proyecto.
La tarea es la siguiente:
De vez en cuando, los gatos vecinos visitan mi jardín, lo que no me gusta, ya que tienden a defecar en mi césped. Me gustaría tener un sistema de advertencia que me avise cuando haya un gato presente para poder perseguirlo con mi super remojo. Por simplicidad, digamos que solo me importa un gato con color blanco y negro.
He configurado un raspberry pi con módulo de cámara que puede capturar videos y / o imágenes de una parte del jardín.
Imagen de muestra:
Mi primera idea fue entrenar a un clasificador para identificar un gato o un objeto similar a un gato, pero después de darme cuenta de que no podré obtener una cantidad suficiente de muestras positivas, lo abandoné en favor de la detección de anomalías.
Calculo que si capturara una foto cada segundo del día, terminaría con quizás cinco fotos que contienen gatos (de aproximadamente 60,000 con luz solar) por día.
¿Es esto posible mediante la detección de anomalías? Si es así, ¿qué características sugeriría? Mis ideas hasta ahora serían simplemente contar la cantidad de píxeles con los que tiene ciertos colores; hacer algún tipo de detección de manchas / segmentación de imágenes (que no sé cómo hacerlo y, por lo tanto, me gustaría evitar) y realizar el mismo análisis de color en ellas.
fuente
Respuestas:
Podría simplificar su problema de manera significativa utilizando un enfoque de detección de movimiento / cambio. Por ejemplo, podría comparar cada imagen / cuadro con uno de un tiempo anterior (por ejemplo, un minuto antes), luego solo considerar los píxeles que han cambiado desde el momento anterior. Luego, puede extraer la región rectangular de cambio y usarla como base para su clasificación o detección de anomalías.
Tomar este tipo de enfoque puede simplificar significativamente su clasificador y reducir su tasa objetivo falsa porque puede ignorar cualquier cosa que no sea aproximadamente del tamaño de un gato (por ejemplo, una persona o un pájaro). Luego usaría las regiones de cambio extraídas que no se filtraron para formar el conjunto de entrenamiento para su clasificador (o detector de anomalías).
Solo asegúrese de obtener su tasa objetivo falsa lo suficientemente baja antes de montar una torreta láser en su sistema de detección de intrusos felinos.
fuente
Este es un proyecto interesante y también bastante ambicioso :)
No estoy seguro de que la detección de anomalías (al menos en el sentido descrito en el curso que siguió) sería un algoritmo muy adecuado en este caso.
Consideraría un enfoque más viable como lo que se discutió al final de ese curso donde se demostró un flujo de trabajo de Photo OCR.
El enfoque consistiría en segmentar su imagen en "bloques" más pequeños, y revisarlos uno por uno utilizando un algoritmo de aprendizaje supervisado e intentar clasificar cada bloque de acuerdo a si contiene un gato o no. Si un bloque contiene un gato, la alarma se activa. Como beneficio adicional, también obtienes la posición del gato, por lo que puedes pensar en incorporar alguna respuesta "automática" como un paso futuro para tu proyecto.
El beneficio aquí es que no tendrá que entrenar su algoritmo usando un conjunto de datos específico para su jardín (que, como mencionó es difícil de crear), pero puede usar imágenes de gatos extraídos de la red (por ejemplo, tal vez pueda buscar "gato en el césped" o algo así), y tal vez parches de fotos de sus (u otros) jardines. Por lo tanto, no tiene que pasar el tiempo recolectando fotos de su cámara, y evita el riesgo de tener una muestra muy pequeña (comparable) de positivos (es decir, gatos).
Ahora, por supuesto, lo fácil que es construir un detector de gatos preciso es otro tema.
fuente
La estrategia de detección de movimiento / cambio es ciertamente adecuada, pero agregaría una operación adicional. Detectaría aquellas regiones que tienen más probabilidades de cambiar, por ejemplo, la escalera parece un lugar donde los humanos pueden estar (también los gatos) y la hierba donde pueden estar los perros, los gatos o los humanos.
Capturaría un mapa con el tamaño del objeto y la trayectoria y con esto crearía un clúster con el objetivo de detectar un objeto (con un tamaño específico dentro de la imagen en términos de píxeles) que se mueve con cierta velocidad y trayectoria.
Puede lograr esto usando R o sugeriría OpenCV para detectar movimiento y seguir diferentes objetos.
fuente
La sustracción de fondo de OpenCV encontrará objetos que se mueven alrededor de su endurecimiento. Después de eso, podría usar un clasificador o análisis de forma para diferenciar entre gatos, personas, árboles, etc.
fuente
¿Es un pajaro? ¿Es un gato? ¡Tenemos el tamaño de un gato blanco y negro! urracas aquí. entonces eso fallaría.
Lo primero sería excluir todas las áreas que son verdes, los gatos rara vez son verdes.
Luego compare el resto con una imagen de referencia para eliminar elementos estáticos como piedras y escaleras.
La detección de objetos de un tamaño mínimo debería ser posible, pero para una clasificación la resolución es demasiado baja. También podría ser tu vecino probando su nuevo dron con control remoto.
Con dos cámaras puede hacer un mapeo 3D de los objetos y eliminar los objetos voladores.
fuente