计算机视觉应用(二)疲劳识别

2023-11-06

疲劳识别一度是热门,在疲劳驾驶,疲劳加班熬夜,学生上课打瞌睡等方面都得到了应用,很多刚入门的AI学子是用把疲劳图像进行分类,和正常状态做区分,这种分类方式往往会误检,这是由于这类属于细粒度分类,类外差距小(不打瞌睡和打瞌睡),类内差距大(不同的打瞌睡方式),模型很难学到你想让他学习到的东西,这也是很多初学者学习了YOLO以后以为万物都可YOLO,万物皆分类,正确的做法是要做人脸关键点检测,根据关键点的变化来做判断。

人脸识别检测运用模块:opencv-python、dlib
opencv-python调用摄像头,储存图像。dlib调用已训练好的人脸特征图,与图像结合。

以下代码为初始学习代码,目的是在此基础上加入其他特征,提高疲劳精确度。


#开始导入需要的模块
import cv2#调用摄像头
import dlib#调用识别检测库
from math import hypot
import time
import winsound#调用设备(笔记本)音响,提示疲劳

cap = cv2.VideoCapture(0)#打开笔记本的内置摄像头,参数改为视频位置则为打开视频文件
detector = dlib.get_frontal_face_detector()#获取人脸分类器
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")#获取人脸检测器,提取特征点数
font = cv2.FONT_HERSHEY_PLAIN#设置写入文字的字体(在屏幕上的字体)

#用于求上眼皮与下眼皮的重点
def midpoint(p1 ,p2):
    return int((p1.x + p2.x)/2), int((p1.y + p2.y)/2)

#用于计算眼睛长宽比,获取比值
def get_blinking_ratio(eye_points, facial_landmarks):
    left_point = (facial_landmarks.part(eye_points[0]).x, facial_landmarks.part(eye_points[0]).y)
    right_point = (facial_landmarks.part(eye_points[3]).x, facial_landmarks.part(eye_points[3]).y)
    #利用脸谱特征图上的点,获得人脸上眼睛两边的坐标

    center_top = midpoint(facial_landmarks.part(eye_points[1]), facial_landmarks.part(eye_points[2]))
    center_bottom = midpoint(facial_landmarks.part(eye_points[5]), facial_landmarks.part(eye_points[4]))
    #利用脸谱特征图上的点,获得人脸上眼睛上下眼皮的坐标,同时计算中间点的坐标

    hor_line = cv2.line(frame, left_point, right_point, (0,255,0), 3)
    ver_line = cv2.line(frame, center_top, center_bottom, (0,255,255), 3)
    #将眼睛左右与上下连成线,方便观测

    hor_line_lenght = hypot((left_point[0] - right_point[0]), (left_point[1] - right_point[1]))
    ver_line_lenght = hypot((center_top[0] - center_bottom[0]), (center_top[1] - center_bottom[1]))
    #利用hypot函数计算得出线段的长度

    ratio = hor_line_lenght / ver_line_lenght
    #得到长宽比
    return ratio

#主程序,一直检测眼睛睁眨,长宽比与一个定值(临界点)比较,判断是否疲劳且发出提示音
while True:
    _, frame = cap.read()#这个read是cv2中的方法,作用:按帧读取画面,返回两个值(True,frame)有画面是True,且赋值给frame
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)#方法,作用:将摄像头捕获的视频转换为灰色并且保存,这样方便判断面部特征点
    faces = detector(gray)#利用dlib库,处理获取的人脸画面

    #循环每一个画面
    for face in faces:
        landmarks = predictor(gray, face)
        left_eye_ratio = get_blinking_ratio([36, 37, 38, 39, 40, 41], landmarks)
        right_eye_ratio = get_blinking_ratio([42, 43, 44, 45, 46, 47], landmarks)
        #利用函数获得左右眼的比值

        blinking_ratio = (left_eye_ratio + right_eye_ratio) / 2
        #取平均数

        end = time.time()#记时,判断闭眼时间

        #检测眼睛状况
        if blinking_ratio > 4.5:
            cv2.putText(frame, "CLOSE", (75, 250), font, 7, (255, 0, 255)) #方法,作用:在图像上打印文字,设置字体,颜色,大小
        else :
            cv2.putText(frame, "OPEN", (75, 250), font, 7, (0, 255, 0))
            start = time.time()#记时
        print("闭眼时间:%.2f秒"%(end-start))#获取睁闭眼时间差

        #判断是否疲劳
        if (end-start) > 2 :
            cv2.putText(frame, "TIRED", (200, 325), font, 7, (0, 0, 255))
            duration = 1000
            freq = 1000
            winsound.Beep(freq, duration)#调用喇叭,设置声音大小,与时间长短

    cv2.imshow("Frame", frame)#方法,作用,创建一个窗口,将画面投影到窗口中

    #推出键设置,按Ese键退出
    key = cv2.waitKey(1)
    if key == 27:
        break

#释放窗口,关闭摄像头
cap.release()
cv2.destroyAllWindows()
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算机视觉应用(二)疲劳识别 的相关文章

随机推荐

  • Spring Boot集成websocket

    像目前的直播 弹幕 小游戏等方面都用到了websocet进行长链接 相对于http的一次请求一次响应websocket只需要进行一次握手即长久性的建立链接进行消息互通 为什么一些场景要用websocet呢 http的请求每次都会进行校验而请
  • 0000-00-00 00:00:00 的坑,你踩了吗?

    本文内容 1 起因 2 MySQL 对 0000 00 00 的支持 3 Java 对 0000 00 00 的支持 4 为什么线上的代码能正常运行 起因 前几天组内有系统做了数据库迁移 MySQL版本 5 6 16 其中某张表的一个字段是
  • 手机共享网络给电脑解决重装windows7系统没有网卡USB驱动

    手机共享网络给电脑解决重装windows7系统没有网卡USB驱动 我的手机是荣耀手机 使用下面方法 在手机上进入设置 gt 移动网络 gt 个人热点 gt 更多共享设置 开启USB 共享网络开关 共享移动网络或已连接的WLAN 网络给电脑
  • 什么是I帧,P帧,B帧

    视频压缩中 每帧代表一幅静止的图像 而在实际压缩时 会采取各种算法减少数据的容量 其中IPB就是最常见的 简单地说 I帧是关键帧 属于帧内压缩 就是和AVI的压缩是一样的 P是向前搜索的意思 B是双向搜索 他们都是基于I帧来压缩数据 I帧表
  • Redis在数据库事务中的增改操作

    数据库事务中的redis增改模板 if TransactionSynchronizationManager isActualTransactionActive TransactionSynchronizationManager regist
  • EF系列(一)——深入框架底层

    什么是EF 框架 EF 框架是微软的 NET中ORM 对象关系映射 框架 为什么要用EF框架 在没有EF框架之前 我们是直接与ADO Net 进行交互来访问数据库 在SqlHelper 里面面通过设置connection command d
  • SpringMVC+Shiro整合配置文件详解

    在项目中xml文件的配置是必不可少的 特别是SpringMVC框架 但是几乎所有项目的配置都是大同小异 很多人都是直接复制黏贴了事 不少人对其具体含义及用途都不甚全知 本片文章将正对项目中常用的框架SpringMVC Shiro进行整合 并
  • IntelliJ IDEA / Eclipse 自动生成 Author 注释 签名

    Author 注释 签名如下 author 稚枭天卓 E mail zhxiaotianzhuo 163 com version 创建时间 2016 6 20 下午04 58 52 Eclipse 自动生成 Author 注释 签名 win
  • 4位超前进位加法器-Verilog HDL

    Verilog HDL 简介 Verilog HDL是目前设计界通常采用的一种硬件描述语言 被广泛的应用在数字ASIC和可编程逻辑器件的设计开发工作 其按照一定的规则和风格编写代码 可以从系统级 电路级 门级 开关级等抽象层次 进行数字电路
  • jbk和jre的下载与安装

    一 下载 Java可进入Oracle官网下载 点击链接进入官网 1 点击链接进入官网 点击产品 2 打开产品列表 找到java点击 3 下载java 向下滑动选择需要的java版本 以java8为例子 选择Windows版本 选择对应的64
  • 本地真机调试小程序

    1 查出电脑本地ip地址 gt ipconfig 无线局域网适配器 WLAN 连接特定的 DNS 后缀 本地链接 IPv6 地址 xxxxx IPv4 地址 192 168 0 99 子网掩码 255 255 255 0 默认网关 192
  • winxp MySQL 5.6.35 免安装版 简单配置

    Links MySQL 5 6 35 MySQL 5 6 35 32位 下载地址 Reference MySQL 5 6 13免安装版配置方法 Steps 1 解压文件 放到任意一个路径 好像不要有中文 下面 如 D iTom MySQL
  • 09 TypeError: Descriptors cannot not be created directly.

    1 问题 import yaml ModuleNotFoundError No module named yaml yaml模块的pip工具包名称不是yaml 而是pyyaml 所以不是直接pip install yaml 而是 pip i
  • 专治机器学习面试:机器学习各个算法的优缺点!

    今天有朋友聊起来 机器学习算法繁多 各个算法有各个算法的特点 以及在不同场景下 不同算法模型能够发挥各自的优点 今天呢 我把常见的 常用的算法模型进行了一个大概的总结 包括其分支以及各分支的优缺点 涉及到的算法有 回归 正则化算法 集成算法
  • 关于驱动和设备的相关的注册表键的位置,和相关信息

    关于驱动和设备的相关的注册表键的位置 和相关信息 MSDN上有了 https msdn microsoft com en us library windows hardware ff549815 v vs 85 aspx 下面是大概翻译整理
  • kettle-记录集连接(可实现左、右、全、内连接)

    连接前需先排序 记录连接集控件设置 结果 以左连接为例 连接前的两个数据源 连接后
  • 如何让input框中的值不被用户修改

    1 最常用的disabled 被禁用的 input 元素 不可编辑 不可复制 不可选择 不能接收焦点 后台也不会接收到传值 设置后文字的颜色会变成灰色 EP disabled 属性无法与 一起使用 2 readonly unselectab
  • 20220722_使用Element UI写html页面

    Element官网component资源点击这里 结构图 element ui自行下载复制到一致路径 第一个html div div
  • AES加密,128-192-256,方案二

    与方案一对比 方案二要简洁很多 看代码 package com xiao aes util import java security NoSuchAlgorithmException import javax crypto Cipher i
  • 计算机视觉应用(二)疲劳识别

    疲劳识别一度是热门 在疲劳驾驶 疲劳加班熬夜 学生上课打瞌睡等方面都得到了应用 很多刚入门的AI学子是用把疲劳图像进行分类 和正常状态做区分 这种分类方式往往会误检 这是由于这类属于细粒度分类 类外差距小 不打瞌睡和打瞌睡 类内差距大 不同