当我的脸移动得太快时,OpenCV 人脸检测会中断
Posted
技术标签:
【中文标题】当我的脸移动得太快时,OpenCV 人脸检测会中断【英文标题】:OpenCV Face Detection breaks when I move my face too quickly 【发布时间】:2020-11-29 00:59:56 【问题描述】:我编写了一个程序来实时检测面部并显示它们。问题是有时代码会中断,我会看到以下错误:
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()
【问题讨论】:
这可能发生在你的脸快要出窗外或者在窗边的时候?在绘制矩形之前给出一些 if 语句。不要让它的点在窗外 【参考方案1】:这将解决只是尝试,除了会做的工作
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()
【讨论】:
以上是关于当我的脸移动得太快时,OpenCV 人脸检测会中断的主要内容,如果未能解决你的问题,请参考以下文章
OpenCV入门初探---拿走就能用的 人脸检测小项目 源码分析