MATLAB疲劳检测的实现
疲劳检测在安全驾驶方面是一个很热门的话题,本质上是一个机器视觉的任务。本文章将讲解疲劳检测的实现过程,并使用MATLAB,opencv、dlib库来实现疲劳检测。
首先疲劳检测的原理其实是通过检测眼部的眨眼动作来判断一个人的疲劳状态,正常在驾驶的时候眼睛是不会发生多次数的闭眼的,当人处于疲劳,犯困的时候,眼睛会不自觉的闭上。我们可以通过抓住这一点,利用摄像头来抓取画面,来判断一个人是否是疲劳状态。
要判断眼睛的状态,首相我们需要定位找到眼睛的位置。Dlib模块提供了人脸关键点检测器,可以帮助我们找到人脸的68个关键点的位置,包括眼睛。
在关键点定位的官方文档中,提取68个关键点来表示脸上的部位。其中:
第1个点到第17个点:脸颊;
第18个点到第22个点:右边眉毛;
第23个点到第27个点:左边眉毛;
第28个点到第36个点:鼻子;
第37个点到第42个点:右眼;
第43个点到第48个点:左眼;
第49个点到第68个点:嘴巴。
如下图所示:
因此我们需要用到dlib模块,同时还需要机器视觉库opencv和距离计算模块scipy.spatial(后面会讲述到如何应用)
1、首先导入相关的模块:
from scipy.spatial import distance as dist import numpy as np import dlib import CV2
2、对脸上的部位进行定义,把检测到的关键点按照顺序定义好,方便后边当作数据的索引调用
FACIAL_LANDMARKS_68_IDXS = dict([
("mouth", (48, 68)),
("right_eyebrow", (17, 22)),
("left_eyebrow", (22, 27)),
("right_eye", (36, 42)),
("left_eye", (42, 48)),
("nose", (27, 36)),
("jaw", (0, 17))