2016-04-10 1 views
-1

Il y a un code qui détecte les visages dans le fichier vidéo lors de l'affichage image par image:OpenCV présence de visage/périodes d'absence de temps

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

je besoin d'un code qui peut vous donner des périodes de temps où un visage est détecté et les périodes de temps où un visage n'est pas détecté. Quelqu'un peut-il m'aider avec ça? Au moins quelques conseils pour résoudre ce problème, où chercher, etc.

Répondre

0

Conserve l'horodatage de la trame en cours, de la trame précédente et de la trame de début de la séquence en cours contenant les faces.

Une fois que vous n'avez plus détecté de visage dans un cadre, ajoutez une paire (starting, previous) à une liste.

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 

Vous pouvez faire l'horodatage ce que vous voulez, pourrait même être un numéro d'image si c'est ce que vous êtes après.

La même approche peut être utilisée pour déterminer les moments où le visage n'est pas présent, il vous suffit de modifier la condition de la première instruction if.