2017-01-16 20 views
1

シーケンスIDで顔を追跡する必要があります。 例:JohnがID=1の最初の顔になり、MarkがID=2と表示される2番目の顔になります。もしJohnが消えてビデオに再び表示されたら、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を顔に割り当てるには、ビデオの連続フレームごとに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

この比較を行うより良い方法を説明できますか? コードをお持ちの方は、よろしくお願い致します。ありがとうございます。 –

関連する問題