python cv2的视频检测:睁眼闭眼

Posted techs-wenzhe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python cv2的视频检测:睁眼闭眼相关的知识,希望对你有一定的参考价值。

如题,想实现一个简单的根据摄像头的某一帧检测睁眼闭眼的功能。

 

初步的想法是:

1. cv2调用计算机摄像头,读取某一帧的画面.

2. 将该画面作为 哈尔-人脸分类器的输入接口,根据分类器结果返回分类的结果区域。

3. 对结果区域图像裁剪,作为哈尔-眼睛分类器的输入接口。

4. 若在人脸分类器的输出图像上无法检测到眼睛的分类器即确认为闭眼状态并给予提示。

 

操作过程基本明了。

 

代码放上:

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


# 哈尔级联分类器
fd = cv.CascadeClassifier(rC:\Users\wenzhe.tian\Desktop\闭眼识别\haarcascade_frontalface_alt.xml)
ed = cv.CascadeClassifier(rC:\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()

 

以上是关于python cv2的视频检测:睁眼闭眼的主要内容,如果未能解决你的问题,请参考以下文章

人脸识别中的活体检测是啥?

Opencv:视频中人脸检测并保存人脸图片

#yyds干货盘点#Python图像处理,cv2模块,OpenCV实现人脸检测

基于YOLOv5的疲劳驾驶检测系统(Python+清新界面+数据集)

PYTHON 视频时间检测

Android OpenCV - 闭眼检测