MATLAB-疲劳检测

首先,我们需要解决一个问题,什么样可以视为疲劳?

  • 频繁的眨眼/眨一次眼所用时间很长
  • 不停的打哈欠
  • 不停的点头

通过分析,我们得到了检测疲劳的三个标准:眨眼,打哈欠,头部姿态。

这三个标准可以让我们知道需要什么样的模型:

  1. 能够检测人脸的模型
  2. 能够获取面部大部分特征点的模型

寻找合适的模型

1.人脸检测模型

这个我们最熟悉了,可以使用openvino open_model_zoo中的face-detection-retail-0004模型。

2.面部特征点检测模型

我们可以通过搜索引擎找到一个叫做PINTO_model_zoo的项目。在这个项目中可以找到大量模型。

拉取这个项目:

git clone https://github.com/PINTO0309/PINTO_model_zoo.git

进入这个项目,找到043_face_landmark,这个就是面部特征点检测模型,它可以检测出68个特征点。

然后进入05_openvino文件夹,执行shell脚本:

./download.sh

这样我们就可以获得OpenVINO IR文件了。再将OpenVINO IR编译为blob文件:

export MYRIAD_COMPILE=$(find /opt/intel/ -iname myriad_compile)

$MYRIAD_COMPILE -m face_landmark_160x160.xml -ip U8 -VPU_MYRIAD_PLATFORM VPU_MYRIAD_2480 -VPU_NUMBER_OF_SHAVES 4 -VPU_NUMBER_OF_CMX_SLICES 4

注:使用模型转换工具需要安装openvino,安装时要注意 MATLAB 对OpenVINO版本有要求。 详情请参照 openvino安装。

代码原理说明

首先运行face-detection-retail-0004模型检测图像中的人脸,并截取面部图像。

然后运行face_landmark_160x160模型从传入的面部图像中检测出68个特征点的位置。利用这些特征点,我们可以检测眨眼,打哈欠和头部姿态。

  • 眨眼

一只眼睛有6个特征点

我们利用欧氏距离计算上下眼皮之间的距离和眼睛的宽度

计算眼睛的长宽比

  • 打哈欠与眨眼的计算原理相同

  • 头部姿态检测

第一步:2D人脸关键点检测;

第二步:3D人脸模型匹配;

第三步:求解3D点和对应2D点的转换关系;

第四步:根据旋转矩阵求解欧拉角。

设置帧数和阈值判断是否眨眼,打哈欠又或是点头并统计次数。

最后根据眨眼,打哈欠,点头的次数判断是否疲劳。

相关推荐
WL_GCS1 小时前
Level-2 MATLAB S-Function解析
matlab·simulink
2zcode4 小时前
基于MATLAB图像处理的金属表面缺陷检测与工业量测系统设计与实现
图像处理·数码相机·matlab
2zcode5 小时前
基于MATLAB图像处理的饮料瓶识别与价格显示系统设计与实现
开发语言·图像处理·matlab
简简单单做算法12 小时前
基于圆投影和伪Zernike的图像亚像素匹配算法matlab仿真
matlab·圆投影·伪zernike·亚像素匹配
2zcode1 天前
免费开源项目文档:基于MATLAB图像处理的药片检测与计数系统设计与实现
开发语言·图像处理·matlab
Evand J1 天前
【论文复现】MATLAB例程,存在测距误差的WSN无锚点分布式自定位,《WSN中存在测距误差的无锚点分布式自定位方法》
开发语言·分布式·matlab·定位·导航·wsn
Evand J1 天前
【MATLAB例程】一维非线性状态滤波对比:经典EKF、MCC-EKF、MVC-EKF。在含异常测量的场景下,对比三种滤波方法的估计曲线和误差统计。
matlab·mvc·ekf·滤波·mcc
2zcode1 天前
基于MATLAB图像处理的苹果质量智能分级系统设计与实现
图像处理·人工智能·matlab
曲折前进的小白2 天前
MATLAB2026a添加新的工具箱
matlab
m0_547486662 天前
《模式识别:使用MATLAB分析与实现》全套PPT课件
开发语言·matlab·模式识别