Python 如何在三秒钟内检测到闭着的眼睛?
我发现了脸、眼睛、眼睛等部位。正常情况下,我可以看到脸、眼睛区域和两只眼睛。当我看到脸的时候,眼睛区域却看不到两只眼睛,那个时候检测到眼睛是闭着的。现在,我想检测眼睛何时闭上三秒。有人可以给我一个解决方案。我尝试使用time.sleep()函数,但它不起作用。它使视频流进程停止Python 如何在三秒钟内检测到闭着的眼睛?,python,opencv,Python,Opencv,我发现了脸、眼睛、眼睛等部位。正常情况下,我可以看到脸、眼睛区域和两只眼睛。当我看到脸的时候,眼睛区域却看不到两只眼睛,那个时候检测到眼睛是闭着的。现在,我想检测眼睛何时闭上三秒。有人可以给我一个解决方案。我尝试使用time.sleep()函数,但它不起作用。它使视频流进程停止 cas_path = os.getcwd() eye_path = os.getcwd() two_eyes_path = os.getcwd() cas_path += "/haarcascade_frontalfa
cas_path = os.getcwd()
eye_path = os.getcwd()
two_eyes_path = os.getcwd()
cas_path += "/haarcascade_frontalface_alt.xml"
eye_path += "/haarcascade_mcs_eyepair_big.xml"
two_eyes_path += "/haarcascade_eye.xml"
faceCascade = cv2.CascadeClassifier(cas_path)
eyesCascade = cv2.CascadeClassifier(eye_path)
twoeyesCascade = cv2.CascadeClassifier(two_eyes_path)
class VideoCamera(object):
def __init__(self):
self.status = "Sharing ?"
self._image = np.zeros((100,200))
self.video = cv2.VideoCapture(0)
(self.video).set(3, 200)
(self.video).set(4, 160)
#success, self._image = self.video.read()
# If you decide to use video.mp4, you must have this file in the folder
# as the main.py.
# self.video = cv2.VideoCapture('video.mp4')
def __del__(self):
self.video.release()
def get_frame(self):
global s
s = ''
global string
string = ''
success, image = self.video.read()
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
faces = faceCascade.detectMultiScale(
gray,
scaleFactor=1.3,
minNeighbors=5,
minSize=(30, 30),
flags=cv2.cv.CV_HAAR_SCALE_IMAGE
)
count = 0
for (x, y, w, h) in faces:
cv2.rectangle(image, (x, y), (x + w, y + h), (255, 255, 0), 2)
roi_gray = gray[y:y+h, x:x+w]
roi_color = image[y:y+h, x:x+w]
eyes = eyesCascade.detectMultiScale(roi_gray)
if eyes is not():
for (ex,ey,ew,eh) in eyes:
cv2.rectangle(roi_color,(ex -10 ,ey - 10),(ex+ew + 10,ey+eh + 10),(0,255,0),2)
twoeyes = twoeyesCascade.detectMultiScale(roi_gray)
firsttime = 1
if twoeyes is not():
for (exx,eyy,eww,ehh) in twoeyes:
cv2.rectangle(roi_color,(exx-5 ,eyy -5 ),(exx+eww -5,eyy+ehh -5 ),(0,0, 255),2)
ret, jpeg = cv2.imencode('.jpg', image)
self.string = jpeg.tostring()
self._image = image
return jpeg.tostring()
def GetBw(self):
image = self._image
ret, jpeg = cv2.imencode('.jpg', image)
self.string = jpeg.tostring()
return jpeg.tostring()
您将需要为此特定应用程序使用计时器。sleep()基本上只是停止程序,它不跟踪时间。这应该适用于您想要的:
closed = False
timer = 0
if detect(eyes_closed) and not closed:
timer = time.time()
closed = True
else if closed:
if time.time() - timer > 3000:
print "Eyes have been closed for 3 seconds!"
else:
closed = False
我在OpenCV中没有做太多的工作,所以我只是假设detect(eyes_closed)检测到一组闭着的眼睛,您必须自己更正。
如果检测到眼睛闭了3秒钟,将打印一条消息 问题是?你能帮我检测一下闭着的眼睛三秒钟吗?你试过什么?你的具体问题是什么?“请为我编码X!”只会给你带来下行票。这是我第一次使用stackoverflow。如果我的问题让您不高兴,我真的很抱歉。我已经尝试使用函数time.sleep(),但它会使进程视频流停止。这是我根据您的想法编写的代码。closed=False timer=0如果twoeyes不是():对于twoeyes中的(exx,eyy,eww,ehh):cv2.矩形(roi_颜色,(exx-5,eyy-5),(exx+eww-5,eyy+ehh-5),(0255255),2)elif twoeyes是()且未关闭:timer=time.time()打印计时器关闭=真elif未关闭():打印str(time.time()-timer)如果time.time()-timer>3000:print“眼睛已经闭了3秒!”否则:closed=False,但它在“elif closed is not()”中不工作: