2016-12-02 58 views
-8

,我試着用下面的代碼從攝像頭檢測到的人臉: -使用python激活我的攝像頭和檢測使用opencv2臉

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

我無法執行完整的代碼,因爲我在得到一個錯誤下面的步驟: -

ret, frame = video_capture.read() //error msg **expected an intended block** 

感謝, 微風

+5

您是否嘗試過縮進塊? – Miki

回答

2

縮進在Python中非常重要,它形成了代碼的結構。你的腳本將需要像如下被縮進了一句:

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

要用於人臉識別運行此腳本:

python myscript.py C:\opencv\build\etc\haarcascades\haarcascade_frontalface_default.xml 
+0

您需要從命令行啓動您的腳本,例如'python myscript.py haarcascade_filename.xml'其中'myscript.py'是您的腳本的文件名,'haarcascade_filename.xml'是您從OpenCV文件夾使用的CascadeClassifier的文件名。 –

+0

感謝馬丁......我改了行如u建議......我得到了錯誤的標誌= cv2.cv.CV_HAAR_SCALE_IMAGE) AttributeError的:模塊「CV2」有沒有屬性「簡歷」 –

+0

我所做的行標誌= 0那麼我得到的錯誤是在面向(x,y,w,h)行的無效語法: –

相關問題