技术栈
python
pyqt写的Gui界面
opencv 获取的图像数据
Dlib 库用来做人脸识别(列出人脸关键点)
Numpy,Scipy (做数据处理和计算)
实现
通过opencv获取的图像人脸,会被dlib提取出特征点,我拿到特征点以后,比如说(打哈欠,眨眼)的动作我会根据特征点的坐标,计算上下眼皮离瞳孔中心的距离(就是获取长宽比-就是把眼睛想像成一个多边形),当眼睛长宽比低于预设阈值时,认为眼睛处于闭合状态,累积闭眼帧数超过一定时间,就判断为疲劳,或者一定时间范围内闭眼次数到达一定阈值,也是疲劳。
算法
我自己写的一个公式取判断眼睛的闭合度
(拿到眼睛特征点的两个点,连成线,上眼皮和下眼皮及眼睛高度是三条线,接着把眼睛的高度相除求比例)
深度学习
我使用了一个dilb库的开源模型来做人脸的关键点检查,它可以在判断出我传入图片中的人脸并返回68个关键点,我就是用这68个关键点来做我的疲劳判断的。
CNN(卷积神经网络)
卷积层
池化层
全连接层
通过卷积,提取图片特征,做图像对比或者其他功能~