2017-06-25 170 views
-1

我想用opencv和python實現人臉識別。 而不是從攝像頭識別臉部,我想從視頻中識別臉部。 我使用此代碼從網絡攝像頭識別,它的工作原理。但是當我改變代碼從視頻中讀取時,我得到一個錯誤。人臉識別opencv

webcam = cv2.VideoCapture(0) 
time.sleep(2) 

while True: 
    (_, im) = webcam.read() 
    gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY) 

webcam = cv2.VideoCapture('man.avi') 
time.sleep(2) 

while True: 
    (_, im) = webcam.read() 
    gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY) 

從視頻看,我用:

webcam = cv2.VideoCapture('man.avi') 

我得到這個錯誤:

--------------------------------------------------------------------------- 
error          Traceback (most recent call last) 
<ipython-input-6-09b5782a88bc> in <module>() 
    38 while True: 
    39  (_, im) = webcam.read() 
---> 40  gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY) 
    41 
    42  faces = face_cascade.detectMultiScale(gray, 1.3, 5) 
    Error: ..\..\..\..\opencv\modules\imgproc\src\color.cpp:3739: error: (-215) scn == 3 || scn == 4 in function cv::cvtColor 

解決,任何建議?

+0

心靈的[文件]中的說明(http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_gui/py_video_display/py_video_display .html#playing-video-from-file):「*確保安裝了正確版本的ffmpeg或gstreamer。有時,使用視頻捕捉工作非常頭疼,主要是由於ffmpeg/gstreamer安裝錯誤。*」 – agtoever

+0

你確定你正在給正確的過載?由於您在工作代碼中使用了0,這是一個整數。 –

+0

嘗試像「C:/mydata/man.avi」或「/home/user/myvideos/man.avi」這樣的視頻的完整路徑,以確保您沒有意外的工作目錄... – Micka

回答

0

你的問題是,當

webcam = cv2.VideoCapture('man.avi') 

以下

while True: 
    (_, im) = webcam.read() 
    gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY) 

將讀到,甚至傳,視頻結束。在那裏,im是空的np.array,因此cvtColor將會失敗,並提供您看到的錯誤。檢查這個條件將消除錯誤,例如

while True: 
    (ret, im) = webcam.read() 

    # end of video, break the loop 
    if not ret: 
     break 

    # valid frame 
    gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)