2017-01-16 101 views
1

我需要使用序列ID進行臉部跟蹤。 例如:約翰將第一張臉ID=1,馬克將第二張臉出現ID=2,如果約翰消失並再次出現在視頻中將是ID=3。我認爲這很簡單,但我無法得到任何這樣的工作。臉部跟蹤與序列ID

我有這樣的代碼人臉識別:

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() 

但我不知道如何生成這些ID的。

回答

0

要將ID分配給臉部,您需要在視頻的每個連續幀中跟蹤它們。僞代碼將如下所示。

  1. 確定視頻幀中的所有面孔(您已經這樣做)。
  2. faces中的每個元素分配一個ID,並將其存儲爲prev_faces
  3. 在下一幀中,如果prev_faces[i]faces[j]重疊,那麼Jon仍然在框架中!
  4. 如果prev_faces[i]faces中的任何元素沒有重疊,則Jon不在。
  5. 如果faces[i]不與prev_faces中的任何元素重疊,那麼我們有一個新的訪問者。增加ID號碼並將其分配給新面孔。

faces中的多個元素可能與prev_faces中的多個元素重疊。在這種情況下,您可以提取並存儲一些面的特徵,並根據這些特徵進行比較。

我希望聽起來很清楚!

+0

你能解釋一下更好的方法來做這個比較嗎? 如果您有任何代碼,會更好,謝謝。 –