2016-04-10 19 views
-1

yokluğu süreleri:OpenCV yüz varlığı/kare kare görüntülerken video dosyası yüzleri algılayan bir kod bulunmaktadır süre

cap = cv2.VideoCapture(videoPath) 
faceCascade = cv2.CascadeClassifier(cascPath) 

while (cap.isOpened()): 
    # Capture frame-by-frame 
    ret, frame = cap.read() 
    # Our operations on the frame come here 
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 

    faces = faceCascade.detectMultiScale(
     gray, 
     scaleFactor=1.1, 
     minNeighbors=5, 
     minSize=(30, 30), 
     flags=cv2.CASCADE_SCALE_IMAGE 
    ) 

    # Draw a rectangle around the faces 
    for (x, y, w, h) in faces: 
     cv2.rectangle(frame, (x, y), (x+w, y+h), (233, 153, 22), 2) 

    # Display the resulting frame 
    cv2.imshow('frame', frame) 
    if cv2.waitKey(1) & 0xFF == ord('q'): 
     break 

# When everything done, release the capture 
cap.release() 
cv2.destroyAllWindows() 

Ben bir yüz olduğunda size zaman dönemleri verebilir bir kod gerekir bir yüz algılanmadığında algılanan ve zaman dilimlerinde. Birisi bana yardım edebilir mi? En azından, bu soruna nasıl çözüleceğine dair bazı ipuçları, nereye bakılacağı vs.

cevap

0

Geçerli karenin zaman damgasını, önceki kareyi ve yüzleri içeren geçerli dizinin başlangıç ​​karesini takip edin.

Artık bir kareyi bir çerçevede algılamıyorsanız, bir listeye bir çift (starting, previous) ekleyin.

import time 

# .... 

def get_timestamp(): 
    # Make the timestamp whatever you want... 
    return time.strftime("%Y%m%d-%H%M%S") 

# .... 

face_present = [] 
ts_start = None 
ts_prev = None 

# .... 

while (cap.isOpened()): 
    ret, frame = cap.read() 
    ts = get_timestamp() 

    # .... 

    if len(faces) > 0: # Some faces detected 
     if ts_start is None: # This is the start of current sequence 
      ts_start = ts 
    elif (ts_start is not None) and (ts_prev is not None): 
     # First frame without face following a sequence with face... 
     face_present.append((ts_start, ts_prev)) 
     ts_start = None 

    ts_prev = ts 

Zaman damgasını istediğiniz gibi yapabilirdiniz, eğer peşindeyseniz çerçeve numarası bile olabilir.

Aynı yaklaşım yüzün olmadığı zamanları belirlemek için kullanılabilir, yalnızca ilk if ifadesinin durumunu değiştirmeniz gerekir.

İlgili konular