python cv2的視頻檢測:睜眼閉眼


如題,想實現一個簡單的根據攝像頭的某一幀檢測睜眼閉眼的功能。

 

初步的想法是:

1. cv2調用計算機攝像頭,讀取某一幀的畫面.

2. 將該畫面作為 哈爾-人臉分類器的輸入接口,根據分類器結果返回分類的結果區域。

3. 對結果區域圖像裁剪,作為哈爾-眼睛分類器的輸入接口。

4. 若在人臉分類器的輸出圖像上無法檢測到眼睛的分類器即確認為閉眼狀態並給予提示。

 

操作過程基本明了。

 

代碼放上:

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import cv2 as cv
#import time


# 哈爾級聯分類器
fd = cv.CascadeClassifier(r'C:\Users\wenzhe.tian\Desktop\閉眼識別\haarcascade_frontalface_alt.xml')
ed = cv.CascadeClassifier(r'C:\Users\wenzhe.tian\Desktop\閉眼識別\haarcascade_eye_tree_eyeglasses.xml')
#nd = cv.CascadeClassifier('../../data/haar/nose.xml')
vc = cv.VideoCapture(0)

while True:
    frame = vc.read()[1]
    faces = fd.detectMultiScale(frame, 1.3, 5)
    for l, t, w, h in faces:
        a, b = int(w / 2), int(h / 2) 
        cv.ellipse(frame, (l+a, t+b), (a, b), 0, 0, 360, (255, 0, 255), 2)
        face = frame[t:t+h, l:l+w] 
    
        eyes = ed.detectMultiScale(face, 1.3, 5)
    for l, t, w, h in eyes:
        a, b = int(w / 2), int(h / 2)
        cv.ellipse(face, (l+a, t+b), (a, b), 0,0, 360, (0, 255, 0), 2)
    
    # noses = nd.detectMultiScale(face, 1.3, 5)
    # for l, t, w, h in noses:
    # a, b = int(w / 2), int(h / 2)
    # cv.ellipse(face, (l a, t b), (a, b), 0,
    # 0, 360, (255, 0, 0), 2)
    # a = 'close eyes!!' 
    
    if len(eyes) != 0:
        cv.destroyWindow('close eyes!!')
        # cv.moveWindow('open eyes',300,300)
        cv.imshow('open eyes!!', frame)

    else:
        cv.destroyWindow('open eyes!!')
        # time.sleep(1)
        # cv.moveWindow('close eyes',300,300)
        cv.imshow('close eyes!!', frame)
    
    
    if cv.waitKey(1) == ord(' '):
        break 
vc.release()
cv.destroyAllWindows()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM