2016-09-29 9 views
-1

私は顔、目、2つのコンテナの目などの部分を発見しました。通常、私は顔、目の領域と2つの目を見ることができます。私は顔、目の領域を見ているが2つの目を見ることはない、それは検出された目が閉じたときである。そして今、私は目が3秒間閉じたときを検出したい。誰かが私に解決策を提案することができる。私はtime.sleep()関数にしようとしましたが、動作しません。これは、Videostreamプロセスを停止させます。3秒間閉じた目を検出する方法は?

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() 
+0

質問は...? – Miki

+0

3秒間閉じた目を検出する手助けはできますか? –

+0

何を試しましたか?あなたの具体的な問題は何ですか? "私のためにXをコードしてください!"あなたにダウンボントをもたらすだけです。 –

答えて

0

この特定のアプリケーションには、タイマーを使用します。 time.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の中で多くの仕事を行っていないので、私はちょうど検出仮定(eyes_closed)、閉じた目のセットを検知をした、あなたはそれを自分自身を修正する必要があります。 閉じた目が3秒間検出されると、メッセージが表示されます。

+0

これはあなたのアイデアに基づいて私のコードです。 が閉じ= Falseの タイマ= 0 twoeyesでない場合():twoeyesに(EXX、eyy、EHH、EWW)のため \t: \t \t cv2.rectangle(roi_color、(EXX-5、eyy-5) 、(EXX + EWW -5、eyy + EHH -5)、(0,255、255)、2) ELIFのtwoeyes()ではない閉じ: \tが閉じ \tタイマ= time.time() \t印刷タイマ= true elifが閉じていない: \t print str(time.time() - timer) \t time.time() - timer> 3000: \t \t print "目が3秒間閉じた!" else: \t closed = False しかし、 "elif closedでは機能しません:" –

関連する問題