首页 > 解决方案 > 当我的脸移动得太快时,OpenCV 人脸检测会中断

问题描述

我编写了一个程序来实时检测面部并显示它们。问题是有时代码会中断,我会看到以下错误:

  File "Removed_For_Privacy_Issues/main.py", line 24, in <module>
    cv2.imshow('frame',detectedface)
cv2.error: OpenCV(4.3.0) C:\projects\opencv-python\opencv\modules\highgui\src\window.cpp:376: error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'cv::imshow'

经过进一步测试,代码只有在视频突然变化时才会中断(比如当我快速移动我的脸或遮住相机时),有人知道为什么吗?

代码:

import numpy as np
import cv2
import PIL.Image
import PIL.ImageDraw
import time

cap = cv2.VideoCapture(0)
face_cascade = cv2.CascadeClassifier('Lib/site-packages/cv2/data/haarcascade_frontalface_default.xml')
time.sleep(3)

def FacialDetection(image):
    boxes = face_cascade.detectMultiScale(image, 1.1, 3)
    for (x, y, w, h) in boxes:
        cv2.rectangle(image, (x, y), (x+w, y+h), (255, 255, 0), 2)
        return image

while(cap.isOpened()):
    ret, frame = cap.read()
    if ret==True:
        detectedface = FacialDetection(frame)
        cv2.imshow('frame',detectedface)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break
cap.release()
cv2.destroyAllWindows()

标签: python-3.xopencvface-detection

解决方案


这将解决只是尝试,除了会做的工作

import numpy as np
import cv2
import PIL.Image
import PIL.ImageDraw
import time

cap = cv2.VideoCapture(0)
face_cascade = cv2.CascadeClassifier('Lib/site-packages/cv2/data/haarcascade_frontalface_default.xml')
time.sleep(3)

def FacialDetection(image):
    boxes = face_cascade.detectMultiScale(image, 1.1, 3)
    for (x, y, w, h) in boxes:
        cv2.rectangle(image, (x, y), (x+w, y+h), (255, 255, 0), 2)
        return image

while(cap.isOpened()):
    try:
        ret, frame = cap.read()
        if ret==True:
            detectedface = FacialDetection(frame)
            cv2.imshow('frame',detectedface)
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break
        else:
            break
    except:
        print("face not detected")
cap.release()
cv2.destroyAllWindows()

推荐阅读