Cómo verificar si el objeto de una imagen existe en otra imagen

Le advierto que SIFT y la coincidencia de plantillas funcionan mucho mejor en objetos rígidos. En última instancia, las coincidencias individuales que se obtienen de estos procesos específicos de punto son débilmente deterministas. Debe poder relacionar una parte significativa de las coincidencias y, cuando los objetos se deforman, no tendrán relaciones consistentes. Los algoritmos de reconocimiento facial también funcionan mejor cuando tienen un registro claro de la cara; cuando tu profesor se enfrenta a la pizarra, no será reconocido. Si está dispuesto a generar una serie de perturbaciones de su imagen original, es posible que pueda entrenar para una CNN, pero las CNN toman una gran cantidad de muestras para converger.

Si su profesor siempre usa la misma ropa, combinaría la plantilla con un histograma de color. Use una ventana deslizante en el mismo sentido que la coincidencia de plantilla estándar, pero compare los histogramas para obtener la mejor coincidencia que exceda algún umbral.

Esto suena como reconocimiento de objetos a nivel de instancia, pero con un giro diferente pero complejo.

La pose de los profesores está cambiando de cuadro a cuadro.

Esa es la tarea más difícil para los sistemas de visión por computadora, incluso con convNets, la razón que es difícil es que en este punto usted está interesado en detectar si el profesor está en la escena o no, así que digamos que decide desconectarse. Detector de personas en el estante, detectará a la persona bien pero también disparará a otras personas, por lo que decide agregar un módulo de reconocimiento facial al detector de personas y tal vez este problema se resuelva ¿verdad? No, debido a que esa arquitectura solo puede funcionar relativamente bien para los humanos, ¿cómo lo haces con otros objetos?

La respuesta es que un problema de aspecto tan trivial o simple requiere una solución muy compleja, necesita un sistema a gran escala y los sistemas actuales no pueden resolver este problema por completo, pero aquí hay una solución que creo que puede funcionar, no completamente, por supuesto.

AQUÍ HAY UNA IDEA:

Esta solución implica el uso de una convNet previamente capacitada en problemas de reconocimiento a gran escala como ImageNet o COCO y una SVM lineal que debe capacitarse en línea.

  1. Obtener la imagen
  2. región de recorte que contiene el objeto de interés, etiquete este conjunto de entrenamiento positivo.
  3. Obtenga parches aleatorios de tamaño igual a la región recortada en imágenes que no contienen el objeto de interés y etiquételos como negativos.
  4. Entrene solo el extremo de SVM lineal con un ejemplo positivo y muchos ejemplos negativos (Un SVM ejemplar). NOTA: Todos los ejemplos se alimentan a través de una convNet previamente capacitada.
  5. Tiene un detector para el objeto de interés.

La idea aquí es que la convNet pre-entrenada es el detector de características y dado que se ha entrenado en imágenes a gran escala, las características de alto nivel son buenos descriptores del contenido de la imagen. Por lo tanto, debe aprovechar estas características y usarlas para manejar un SVM lineal simple, lo bueno de esta solución es que puede usar la función de paso de cabecera en la salida SVM para obtener verdadero / falso correspondiente a una salida positiva / negativa respectivamente .

Pero esto no funcionaría para un objeto altamente articulado como un ser humano, por lo que el alcance de esta solución está algo limitado a objetos rígidos.

SIFT y SURF no son malas alternativas para el reconocimiento de objetos a nivel de instancia, ya que pueden usar estudiantes flojos como los clasificadores K-NN.

EDITAR :

La idea ejemplar de SVM es de http://www.tamaraberg.com/teachi

El uso de un sistema de aprendizaje automático (ML) pre-entrenado se llama aprendizaje de transferencia.

Espero que esto ayude.

Suena como un desafío divertido. Primero trabajaría con OpenCV (python) o Matlab. Le recomiendo que pruebe las soluciones potenciales de visión por computadora más simples antes de saltar a redes neuronales profundas (Deep Learning no es mágico y requiere muchos datos específicos de la tarea …) No estoy seguro de cuál es su objetivo específico, pero aquí hay algunos soluciones simples que podrías probar.

Opción 1:

SIFT descriptor + RanSaC entre los puntos clave encontrados.
Muy sencillo. Utilice un descriptor SIFT integrado en Matlab, Python, C ++. Recomiendo que cree su propio algoritmo RanSaC para que pueda personalizarlo un poco. Ve a por ello.

Este es un antiguo proyecto de visión por computadora que construí para detectar logotipos de Starbucks en video. Hice exactamente lo que acabo de recomendar. ¡Es súper simple y funciona relativamente bien!
Función Matching + Homography para encontrar objetos

Opcion 2:

Si desea encontrar objetos en movimiento en una escena estática (como la persona), entonces un flujo óptico puede funcionar muy bien para usted. Probablemente podría recortar fácilmente a una persona en movimiento de un video como este. (Las funciones de flujo óptico de código abierto están disponibles)
OpenCV: flujo óptico * Se recomienda un flujo óptico denso *

Opcion 3:

Si desea verificar si este tipo está allí, cuadro por cuadro, en este video específico realmente rápido:

  1. Convierte los marcos a HSV
  2. Encuentra el rango de tono (H en el formato HSV) de su camisa
  3. Cree una máscara binaria (si cada píxel cae dentro de ese rango)
  4. Usando un umbral en la suma de la máscara binaria, decida si está allí o no.

(Proyecto de 7 minutos … echa un vistazo a Changing Colorspaces)

Opcion 4:

Red neuronal convolucional utilizada para la detección. Esto es posible, pero releer lo que escribiste, realmente parece innecesario para este problema. Puede leer documentos en el campo tales como: RCNN, Fast-RCNN, Faster-RCNN y YOLO para comprender cómo se logra la detección de objetos en sistemas de vanguardia.

https://people.eecs.berkeley.edu
https://arxiv.org/pdf/1504.08083
https://arxiv.org/pdf/1506.01497
http://pjreddie.com/media/files/

* Si puede obtener excelentes resultados sin CNN, entonces probablemente sean excesivos *

¡De todos modos, buena suerte! Y no te rindas 😉

Si solo está siguiendo a una persona en un video con una cámara estática, debe abordar el problema como tal. Hay tecnicas especificas. Si tiene cambios de punto de vista drásticos, tendrá que tomar eso en consideración. Si tienes varias personas, otro desafío. Si necesita identificar a la persona con ropa diferente en diferentes imágenes, otro desafío … Necesita reducir exactamente lo que necesita aquí. Deberías llamar a tu profesor un “objeto”, por cierto. No solo es grosero, sino que da la impresión de que desea ubicar un objeto rígido, y no parece ser el caso, lo que lo convierte en un problema muy diferente.

¡Comparación de plantillas!

Tome su imagen de consulta y realice una convolución bidimensional con la imagen de destino, comenzando en una esquina y frotando el parche de imagen en toda la imagen de destino. A continuación, aplique la supresión no máxima (o umbral simple) a la imagen resultante y las áreas de los valores más altos que le quedarán son las ubicaciones de la imagen de la consulta.