闲暇之余做了一个简单的疲劳检测系统。
方案:首先获取重要的关键点位,需要眼部的和嘴部的。
对于眼部的如下:
分别采用眼部6个点位计算纵横比,超过连续三帧小于0.2判断为疲劳。分别采用眼部6个点位计算纵横比,超过连续三帧小于0.2判断为疲劳。分别采用眼部6个点位计算纵横比,超过连续三帧小于0.2判断为疲劳。

(注意,上图的数字序号是dlib算法的编号,与我的项目所使用的PFLD算法不同)
对于嘴部的如下:
采用嘴部8个点位计算纵横比,超过连续三帧大于0.6判断为疲劳。

(注意,上图的数字序号是dlib算法的编号,与我的项目所使用的PFLD算法不同)
具体实现流程:
先检测到人脸上的关键点,这里采用的方案见博客《单人脸的关键点检测》 。然后根据获取到的点位信息进行判断,再显示于与一个系统界面,界面如下:

最终的所有代码如下:
import cv2
import time
import numpy as np
import tkinter as tk
from PIL import Image, ImageTk, ImageDraw, ImageFont
import torch
import onnxruntime
import torchvision.transforms as transforms
root_window = tk.Tk()
root_window.title('疲劳检测系统') # 设置窗口title
width, height = 800, 600 # 设置窗口大小变量
# 窗口居中,获取屏幕尺寸以计算布局参数,使窗口居屏幕中央
screenwidth, screenheight = root_window.winfo_screenwidth(), root_window.winfo_screenheight()
size_geo = '%dx%d+%d+%d' % (width, height, (screenwidth - width) / 2, (screenheight - height) / 2)
root_window.geometry(size_geo)
# 一些全局的控件
global label1, label2, label3, label4, label5, label6, label7,\
text1,\
button1, button2, button3, \
is_open_camera, cap, is_detection, is_exit_program
def init():
global label1, label2, label3, label4, label5, label6, label7, \
text1, \
button1, button2, button3, \
is_open_camera, cap, is_detection, is_exit_program
# 相关参数的初始化
is_open_camera = False # 是否打开了摄像头
is_detection = Fa
疲劳检测系统实现

最低0.47元/天 解锁文章
1万+





