【问题标题】:Webcam window alwasy crash while trying to detect a face尝试检测面部时,网络摄像头窗口总是崩溃
【发布时间】:2020-04-01 05:15:30
【问题描述】:

我正在尝试制作一个简单的 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() 

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

【问题讨论】:

  • 在不处理的情况下运行您的网络摄像头,并在单帧上运行您的处理功能,以首先定位问题。

标签: python opencv cv2 haar-classifier


【解决方案1】:

我对您的代码做了一些更改。对于人脸使用 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() 

【讨论】:

    猜你喜欢
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    • 2017-02-09
    • 1970-01-01
    • 2012-07-28
    • 2012-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多