/ / Seguimiento facial con una ID de secuencia - python, opencv, scikit-learn, scikit-image

Seguimiento de rostros con una ID de secuencia: python, opencv, scikit-learn, scikit-image

Necesito hacer un seguimiento facial con una ID de secuencia. Ejemplo: Juan será la primera cara con ID=1, Mark será la segunda cara a aparecer con ID=2, si John desaparece y aparece de nuevo en el video será ID=3. Creo que eso es simple, pero no puedo hacer que algo como esto funcione.

Tengo este código para reconocimiento de cara:

import cv2
import sys

cascPath = sys.argv[1]
faceCascade = cv2.CascadeClassifier(cascPath)

video_capture = cv2.VideoCapture(0)

while True:
ret, frame = video_capture.read()

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

faces = faceCascade.detectMultiScale(
gray,
scaleFactor=1.1,
minNeighbors=5,
minSize=(30, 30),
flags=cv2.cv.CV_HAAR_SCALE_IMAGE
)
for (x, y, w, h) in faces:
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)


cv2.imshow("Video", frame)

if cv2.waitKey(1) & 0xFF == ord("q"):
break

video_capture.release()
cv2.destroyAllWindows()

Pero no sé cómo generar estas IDs.

Respuestas

0 para la respuesta № 1

Para asignar ID a las caras, debe realizar un seguimiento de ellas en cada fotograma consecutivo del video. Un pseudocódigo sería como el siguiente.

  1. Identifique todas las caras en el cuadro de video (ya lo está haciendo).
  2. Asigna cada elemento en faces una identificación, y guárdelo como prev_faces.
  3. En el siguiente cuadro, si prev_faces[i] se superpone con faces[j], entonces Jon sigue en el cuadro!
  4. Si prev_faces[i] no se superponen con ningún elemento en faces, entonces Jon está fuera.
  5. Si faces[i] no se superponen con ningún elemento en prev_faces, entonces tenemos un nuevo visitante. Incrementa los números de ID y asigna eso a la nueva cara.

Múltiples elementos en faces podría superponerse con múltiples elementos en prev_faces. En ese caso, puede extraer y almacenar algunas características de caras y hacer la comparación en función de eso.

Espero que suene claro!