2017-03-25 32 views
-1

ウェブカメラから撮影したビデオの中の顔の数を数える必要があります。たとえば、カメラの前に立っていてcount = 1、他の人が検出された場合count = 2、別の人が検出された場合、カウントは3になります。pythonを使用してopenCVによってライブビデオで検出された顔の数を数えるには?

私はfrontal_face_haarcascadeを使用しています。 opencvによるPythonでのXML。フレーム内の顔を検出してカウントを増やすことができますが、何が起こっているかは、フレーム数としてカウントが増えていることです。たとえ1人が10秒間立っていることが検出されたとしても、それは何らかの「67」としてカウントを示します。

どうすればこの問題を解決できますか?

import cv2 

import sys 

cascPath = sys.argv[1] 

faceCascade = cv2.CascadeClassifier(cascPath) 


video_capture = cv2.VideoCapture(0) 
ret, frame = video_capture.read() 

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

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

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


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

# Display the resulting frame 
cv2.imshow('Video', frame) 


video_capture.release() 

cv2.destroyAllWindows() 
+0

あなたが使用しているコードを投稿することができます:

これは、コードのですか? –

+0

@JeruLukeコードが追加されました – Kevin

+0

google for _ "tracking" _ – Miki

答えて

-1
idx=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) 
) 

    # Draw a rectangle around the faces 
    for (x, y, w, h) in faces: 
     cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2) 
     idx += 1 
     print (idx) 


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

    # Display the resulting frame 
    cv2.imshow('Video', frame) 
-1
import numpy as np 
import cv2 
faceCascade = cv2.CascadeClassifier(cascPath) 

video_capture =cv2.VideoCapture(0) 
while(True): 
    idx=0 

    ret, frame = video_capture.read() 

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

    faces = faceCascade.detectMultiScale(
     gray, 
     scaleFactor=1.1, 
     minNeighbors=5, 
     minSize=(30, 30) 
    ) 
    for (x,y,w,h) in faces: 
     cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),2) 
     idx += 1 
     print (idx) 
     cv2.putText(frame,str(idx),(x,y+h),cv2.FONT_HERSHEY_SIMPLEX,.7,(150,150,0),2) 


    cv2.imshow('img',frame) 
    if(cv2.waitKey(1)==ord('q')): 
     break 

frame.release() 
cv2.destroyAllWindows() 
+0

'cv2.putText'がエラーを起こした場合、別のバージョンのopencvを使用するので、コードを更新してください。 –

+1

いくつかの説明を追加してください。問題の何が問題だったのですか?答えはどうやってその問題を解決しますか?コードダンプはそれほど有用ではありません...そして、なぜ2つの回答を投稿しましたか? (btw、それらのどれも問題を解決しません) – Miki

+0

私はあなたの質問を理解していないので、2つの可能な回答を追加して、opencv 2またはopencv 3を使用しているかどうかを知りたいです –

関連する問題