尝试检测面部时网络摄像头窗口出现崩溃

时间:2019-12-07 12:58:17

标签: python opencv cv2 haar-classifier

我正在尝试制作一个简单的haar级联程序以检测人脸。

faceCascade = cv2.CascadeClassifier('D:\\Python\\Python37\\Lib\\site-packages\\cv2\\data\\haarcascade_frontalcatface.xml')
body_cascade = cv2.CascadeClassifier('haarcascade_upperbody.xml')
video_capture = cv2.VideoCapture(0)
img_counter = 0

while True:
    # Capture frame-by-frame
    ret, frame = video_capture.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    faces = faceCascade.detectMultiScale(
        gray,
        scaleFactor=1.5,
        minNeighbors=5,
        minSize=(30, 30),
        flags=cv2.CASCADE_SCALE_IMAGE
    )
    for (x, y, w, h) in faces:
        cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
    cv2.imshow('FaceDetection', frame)
    k = input()
    # ESC Pressed
    if k % 256 == 27:
        break

video_capture.release()
cv2.destroyAllWindows() 

但是每次启动它时,我的网络摄像头窗口都会冻结并崩溃:( 我的PC肯定足够强大,为什么会发生?

1 个答案:

答案 0 :(得分:0)

我对您的代码进行了很少的更改。对于人脸,请使用haarcascade_frontalface_default.xml;对于猫脸,请使用haarcascade_frontalcatface.xml。尝试下面的代码,它将像魅力一样工作:)

import cv2
#faceCascade = cv2.CascadeClassifier('D:\\Python\\Python37\\Lib\\site-packages\\cv2\\data\\haarcascade_frontalcatface.xml')
faceCascade = cv2.CascadeClassifier('D:\\Python\\Python37\\Lib\\site-packages\\cv2\\data\\haarcascade_frontalface_default.xml')

body_cascade = cv2.CascadeClassifier('haarcascade_upperbody.xml')
video_capture = cv2.VideoCapture(0)
img_counter = 0

while True:

    # Capture frame-by-frame
    ret, frame = video_capture.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    faces = faceCascade.detectMultiScale(
        gray,
        scaleFactor=1.5,
        minNeighbors=5,
        minSize=(30, 30),
        flags=cv2.CASCADE_SCALE_IMAGE
    )
    for (x, y, w, h) in faces:
        cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
    cv2.imshow('FaceDetection', frame)

    #k = input()
    k = cv2.waitKey(1) & 0xFF
    if k == 27:
        break
    # ESC Pressed
    # if k % 256 == 27:
        # break


video_capture.release()
cv2.destroyAllWindows()