具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
针对员工忙碌缺少日常健康管理的问题,本发明提供一种基于人脸图像的员工健康告警方法及系统,其根据例行人脸识别完成考勤的特点,利用长时间积累的人脸数据,利用人脸特征分析的手段获取感兴趣区域的图像信息变化数据,进行动态监视,实现一种无接触、无额外时间成本的健康警示提醒。
本发明的员工健康告警方法,包括:
间隔预设时间采集员工的彩色人脸图像,得到人脸图像数据集;
对人脸图像数据集进行预处理,得到待评估图像序列;预处理包括图像尺寸调整,面部区域、左右眼位置、鼻子位置和嘴巴位置确定,以一张人脸图像为基准进行人脸校正,截取标准化处理后的人脸图像;
对待评估图像序列进行颜色通道和灰度通道分析,得到反应该员工面部色泽变化的相关系数矩阵,根据历史相关系数均值和方差计算当前此员工的健康状况警示标志,并给出健康告警信息。
本发明的员工健康告警系统,包括:
图像采集模块,用于间隔预设时间采集员工的彩色人脸图像,得到人脸图像数据集;
预处理模块,用于对人脸图像数据集进行预处理,得到待评估图像序列;预处理包括图像尺寸调整,面部区域、左右眼位置、鼻子位置和嘴巴位置确定,以一张人脸图像为基准进行人脸校正,截取标准化处理后的人脸图像;
告警模块,用于对待评估图像序列进行颜色通道和灰度通道分析,得到反应该员工面部色泽变化的相关系数矩阵,根据历史相关系数均值和方差计算当前此员工的健康状况警示标志,并给出健康告警信息。
下面结合附图对本发明做进一步的详细描述:
如图1所示,本发明提供一种基于人脸图像的员工健康告警方法,包括:
步骤1、人脸数据采集:利用人脸识别考勤机在员工完成上班打卡考勤的同时采集员工的彩色人脸图像并标注时间标签,经过多个工作日的积累得到标注了员工编码和时间标签的员工彩色人脸图像数据集DA;
具体包括:
步骤11、参数初始化:设置员工数目为N,员工编号n分别为1,2,…,N,工作日上班打卡开始时间为t1,结束时间t2,以人脸图像采集时刻作为图像时间标签time(包含年月日时分秒,格式yyyymmddhhmmss),以员工编号n和时间标签time作为文件名存储人脸图像数据,采集图像尺寸为M1*M2;
步骤12、在第1个工作日的t1至t2时间段内,利用人脸识别考勤机对员工编号n的员工进行人脸拍照,成功识别打卡后,将人脸图像数据存储为jpg格式文件,文件名按如下规则:员工编号n_时间标签time.jpg;
步骤13、重复步骤12,完成第1个工作日全部员工的人脸拍照和人脸图像数据存储,得到对应图像数据集合D1;
步骤14、分别对第d个(d=2,3,……,T)工作日(共计T个工作日),重复步骤12和步骤13,对不同员工进行打卡考勤的同时完成员工人脸数据的采集,得到第d天的图像数据集合Dd,Dd中包含N个员工第d天采集到的人脸图像数据文件;
步骤15、合并第1天至第T天的图像数据集合,得到图像数据集DA={D1,D2,…,DT},其中包含N个员工共T天的图片文件。
步骤2、人脸数据处理:从采集得到的图像数据集DA中对第n个员工的全部图像进行分组,对分组图像Sn逐幅完成图像的尺寸调整、面部区域、左右眼位置、鼻子位置和嘴巴位置确定,并以第1天图像为基准完成人脸校正,截取标准化处理后的人脸图像,获得待评估图像序列Iseq;
具体包括:
步骤21、按照员工编号n从图像数据集DA中选择以“n_”开头的文件名,并按照时间从早到晚排序,得到第n个员工的分组图像Sn;
步骤22、对分组图像Sn中的第1天图像Img进行尺寸调整,得到宽度为W的固定宽度图像Iw,调用matlab的imresize函数实现,调用方式如下:
Iw=imresize(Img,[NaN,W]);
其中Img为从图像文件中读入的数据矩阵,NaN为matlab系统预定义变量,W为输出图像宽度。
步骤23、对固定宽度图像Iw进行面部区域确定,得到面部区域的四元素矩形Facebox=[x1,y1,w1,h1],调用matlab的vision.CascadeObjectDetector相关函数实现,调用函数及设置如下:
detector=vision.CascadeObjectDetector;
detector.ClassificationModel='FrontalFaceCART';
Facebox=detector(Iw);
步骤24、将固定宽度图像Iw位于面部区域的四元素矩形Facebox以外的数据置零,得到掩膜处理后的图像Im,以减小对后续眼睛、鼻子和嘴巴位置确定的影响。调用Matlab的以下函数实现:
Iw(1:Facebox(2),:,:)=0;
Iw((Facebox(2)+Facebox(4)):end,:,:)=0;
Iw(:,1:Facebox(1),:)=0;
Iw(:,(Facebox(1)+Facebox(3)):end,:)=0;
步骤25、对掩膜处理后的图像Im分别进行眼部区域确定,得到眼部区域的四元素矩形Eyebox=[x2,y2,w2,h2],调用matlab的vision.CascadeObjectDetector相关函数实现,调用函数如下:
detector.ClassificationModel='EyePairBig';
detector.MergeThreshold=5;
Eyebox=detector(Im);
步骤26、从图像Im中选取眼部区域的四元素矩形Eyebox左半部分、右半部分图像,分别完成左眼区域、右眼区域确定,并得到左眼位置坐标LeftEyeP=[Ex1,Ey1]和右眼位置坐标RightEyeP=[Ex2,Ey2],调用matlab的vision.CascadeObjectDetector相关函数实现,调用函数如下:
detector.ClassificationModel='LeftEye';
detector.MergeThreshold=10;
LEyebox=detector(Im(Eyebox(2)+(1:Eyebox(4)),…
Eyebox(1)+floor(1:Eyebox(3)/2)));
Ex1=Eyebox(1)+LEyebox(1)+LEyebox(3)/2;
Ey1=Eyebox(2)+LEyebox(2)+LEyebox(4)/2;
detector.ClassificationModel='RightEye';
detector.MergeThreshold=10;
REyebox=detector(Im(Eyebox(2)+(1:Eyebox(4)),…
Eyebox(1)+floor(Eyebox(3)/2:Eyebox(3))));
Ex2=Eyebox(1)+Eyebox(3)/2+REyebox(1)+REyebox(3)/2;
Ey2=Eyebox(2)+REyebox(2)+REyebox(4)/2;
步骤27、对掩膜处理后的图像Im进行鼻子区域确定,得到鼻子区域的四元素矩形Nosebox=[x3,y3,w3,h3],并计算鼻子位置坐标NoseP=[Nx,Ny],调用matlab的vision.CascadeObjectDetector相关函数实现,调用函数如下:
detector.ClassificationModel='Nose';
detector.MergeThreshold=floor(Eyebox(3)/3);
Nosebox=detector(Im);
Nx=Nosebox(1)+Nosebox(3)/2;
Ny=Nosebox(2)+Nosebox(4)/2;
步骤28、对掩膜处理后的图像Im进行嘴巴区域确定,得到嘴巴区域的四元素矩形Mouthbox=[x4,y4,w4,h4],并计算嘴巴位置坐标MouthP=[Mx,My]。得到第一天的左眼、右眼、鼻子、嘴巴等四组位置坐标(中心坐标)GCP1=[Ex1,Ey1,Ex2,Ey2,Nx,Ny,Mx,My]。
调用matlab的vision.CascadeObjectDetector相关函数实现,调用函数如下:
detector.ClassificationModel='Mouth';
detector.MergeThreshold=50;
Mouthbox=detector(Im);
Mx=Mouthbox(1)+Mouthbox(3)/2;
My=Mouthbox(2)+Mouthbox(4)/2;
步骤29、重复步骤24~步骤28,完成第2天到第d天的左眼、右眼、鼻子、嘴巴等四组位置坐标GCPd的确定;
步骤210、各组内以第1天图像为参考图像,根据第d天左眼、右眼、鼻子、嘴巴等四组位置坐标GCPd构造控制点对进行配准处理,得到配准后图像Ird,调用matlab的cp2tform和imtransform等相关函数实现,调用方式如下:
GCPd=[[Ex1Ey1];[Ex2Ey2];[Nx Ny];[Mx My]];
t_concord=cp2tform(GCPd,GCP1,'affine');
Ird=imtransform(Img,t_concord,...
'XData',[1size(Img1,2)],'YData',[1size(Img1,1)]);
其中GCP1是第1天对应的左眼、右眼、鼻子、嘴巴等四组位置坐标,Img1是第1天人脸图像矩阵。
步骤211、从配准后图像Ird中裁剪出脸部局部区域图像作为待评估图像Iestd,该区域中心为左右眼及鼻子三点的坐标中心XY5,宽度为眼部区域宽度,高度为宽度的1.2倍。调用matlab函数如下:
XY5=[(Ex1+Ex2+Nx)/3(Ey1+Ey2+Ny)/3];
mask=floor([XY5(1)-Eyebox(3)*0.5XY5(2)-Eyebox(3)*0.6…
Eyebox(3)*1 1.2*Eyebox(3)]);
Iestd=Ird(mask(2)+(1:mask(4)),mask(1)+(1:mask(3)),:);
步骤212、重复步骤22和步骤210完成员工编号为n的全部人脸数据处理,得到待评估图像序列Iseq。
步骤3、健康警示提醒:对员工编号为n的待评估图像序列Iseq进行颜色通道及灰度通道相关分析,得到反映该员工的面部色泽变化的相关系数矩阵CR,根据历史相关系数均值和方差计算当前此员工的健康状况警示标志,并给出健康告警信息;
具体包括:
步骤31、对待评估图像序列Iseq中的第d副(d>1)图像Iseq分别获得红、绿、蓝通道和灰度图像(分别用R、G、B、H表示),并计算相邻时间对应的两幅图像img_i和img_j之间的相关系数CRd。定义CR1=[1 1 1 1],将各相关系数CRd(其中d=1,2,……,T)作为相关系数矩阵CR的一行。调用matlab的rgb2gray和corr等函数实现,调用方式如下:
img1=double(img_i(:,:,1));
img2=double(img_j(:,:,1));
cor1=corr(img1(:),img2(:),'type','Pearson');
img1=double(img_i(:,:,2));
img2=double(img_j(:,:,2));
cor2=corr(img1(:),img2(:),'type','Pearson');
img1=double(img_i(:,:,3));
img2=double(img_j(:,:,3));
cor3=corr(img1(:),img2(:),'type','Pearson');
img1=double(rgb2gray(img_i(:,:,:)));
img2=double(rgb2gray(img_j(:,:,:)));
cor4=corr(img1(:),img2(:),'type','Pearson');
CRd=[cor1cor2cor3cor4];
步骤32、从d>5天开始,分别按照公式(1)和(2)计算相关系数矩阵各列的前d-5至d-1项的均值Mc和均方根Dc,其中j=1,2,3,4。
步骤33、输入告警门限Th(1<Th<10),根据第d(d>5)天的相关系数,按照公式(3)计算当天的警示标志AR:
如果第d天的警示标志AR不等于0,则输出健康告警信息,如果AR大于0,则无任何输出。
如图2、3所示,本发明提供一种基于人脸图像的员工健康告警系统,包括:图像采集模块、预处理模块和告警模块;其中:
图像采集模块,用于人脸数据采集;
本发明的图像采集模块可选用人脸识别考勤机或其他人脸识别设备,在使用时利用人脸识别考勤机在员工完成上班打卡考勤的同时采集员工的彩色人脸图像并标注时间标签,经过多个工作日的积累得到标注了员工编码和时间标签的员工彩色人脸图像数据集DA;
具体包括:
(a)、参数初始化:设置员工数目为N,员工编号n分别为1,2,…,N,工作日上班打卡开始时间为t1,结束时间t2,以人脸图像采集时刻作为图像时间标签time(包含年月日时分秒,格式yyyymmddhhmmss),以员工编号n和时间标签time作为文件名存储人脸图像数据,采集图像尺寸为M1*M2;
(b)、在第1个工作日的t1至t2时间段内,利用人脸识别考勤机对员工编号n的员工进行人脸拍照,成功识别打卡后,将人脸图像数据存储为jpg格式文件,文件名按如下规则:员工编号n_时间标签time.jpg;
(c)、重复(b),完成第1个工作日全部员工的人脸拍照和人脸图像数据存储,得到对应图像数据集合D1;
(d)、分别对第d个(d=2,3,……,T)工作日(共计T个工作日),重复步骤12和步骤13,对不同员工进行打卡考勤的同时完成员工人脸数据的采集,得到第d天的图像数据集合Dd,Dd中包含N个员工第d天采集到的人脸图像数据文件;
(e)、合并第1天至第T天的图像数据集合,得到图像数据集DA={D1,D2,…,DT},其中包含N个员工共T天的图片文件。
预处理模块,用于人脸数据处理;
从采集得到的图像数据集DA中对第n个员工的全部图像进行分组,对分组图像Sn逐幅完成图像的尺寸调整、面部区域、左右眼位置、鼻子位置和嘴巴位置确定,并以第1天图像为基准完成人脸校正,截取标准化处理后的人脸图像,获得待评估图像序列Iseq;
如图3所示,预处理模块具体包括:分组子模块、尺寸调整子模块、面部区域确定子模块、掩膜子模块、眼部区域确定子模块、鼻子区域确定子模块、嘴巴区域确定子模块、配准子模块、裁剪子模块;
(a)、分组子模块,用于按照员工编号n从图像数据集DA中选择以“n_”开头的文件名,并按照时间从早到晚排序,得到第n个员工的分组图像Sn;
(b)、尺寸调整子模块,用于对分组图像Sn中的第1天图像Img进行尺寸调整,得到宽度为W的固定宽度图像Iw,调用matlab的imresize函数实现,调用方式如下:
Iw=imresize(Img,[NaN,W]);
其中Img为从图像文件中读入的数据矩阵,NaN为matlab系统预定义变量,W为输出图像宽度。
(c)、面部区域确定子模块,用于对固定宽度图像Iw进行面部区域确定,得到面部区域的四元素矩形Facebox=[x1,y1,w1,h1],调用matlab的vision.CascadeObjectDetector相关函数实现,调用函数及设置如下:
detector=vision.CascadeObjectDetector;
detector.ClassificationModel='FrontalFaceCART';
Facebox=detector(Iw);
(d)、掩膜子模块,用于将固定宽度图像Iw位于面部区域的四元素矩形Facebox以外的数据置零,得到掩膜处理后的图像Im,以减小对后续眼睛、鼻子和嘴巴位置确定的影响。调用Matlab的以下函数实现:
Iw(1:Facebox(2),:,:)=0;
Iw((Facebox(2)+Facebox(4)):end,:,:)=0;
Iw(:,1:Facebox(1),:)=0;
Iw(:,(Facebox(1)+Facebox(3)):end,:)=0;
(e)、眼部区域确定子模块,用于对掩膜处理后的图像Im分别进行眼部区域确定,得到眼部区域的四元素矩形Eyebox=[x2,y2,w2,h2],调用matlab的vision.CascadeObjectDetector相关函数实现,调用函数如下:
detector.ClassificationModel='EyePairBig';
detector.MergeThreshold=5;
Eyebox=detector(Im);
(f)、眼部区域确定子模块,用于从图像Im中选取眼部区域的四元素矩形Eyebox左半部分、右半部分图像,分别完成左眼区域、右眼区域确定,并得到左眼位置坐标LeftEyeP=[Ex1,Ey1]和右眼位置坐标RightEyeP=[Ex2,Ey2],调用matlab的vision.CascadeObjectDetector相关函数实现,调用函数如下:
detector.ClassificationModel='LeftEye';
detector.MergeThreshold=10;
LEyebox=detector(Im(Eyebox(2)+(1:Eyebox(4)),…
Eyebox(1)+floor(1:Eyebox(3)/2)));
Ex1=Eyebox(1)+LEyebox(1)+LEyebox(3)/2;
Ey1=Eyebox(2)+LEyebox(2)+LEyebox(4)/2;
detector.ClassificationModel='RightEye';
detector.MergeThreshold=10;
REyebox=detector(Im(Eyebox(2)+(1:Eyebox(4)),…
Eyebox(1)+floor(Eyebox(3)/2:Eyebox(3))));
Ex2=Eyebox(1)+Eyebox(3)/2+REyebox(1)+REyebox(3)/2;
Ey2=Eyebox(2)+REyebox(2)+REyebox(4)/2;
(g)、鼻子区域确定子模块,用于对掩膜处理后的图像Im进行鼻子区域确定,得到鼻子区域的四元素矩形Nosebox=[x3,y3,w3,h3],并计算鼻子位置坐标NoseP=[Nx,Ny],调用matlab的vision.CascadeObjectDetector相关函数实现,调用函数如下:
detector.ClassificationModel='Nose';
detector.MergeThreshold=floor(Eyebox(3)/3);
Nosebox=detector(Im);
Nx=Nosebox(1)+Nosebox(3)/2;
Ny=Nosebox(2)+Nosebox(4)/2;
(h)、嘴巴区域确定子模块,用于对掩膜处理后的图像Im进行嘴巴区域确定,得到嘴巴区域的四元素矩形Mouthbox=[x4,y4,w4,h4],并计算嘴巴位置坐标MouthP=[Mx,My]。得到第一天的左眼、右眼、鼻子、嘴巴等四组位置坐标(中心坐标)GCP1=[Ex1,Ey1,Ex2,Ey2,Nx,Ny,Mx,My]。
调用matlab的vision.CascadeObjectDetector相关函数实现,调用函数如下:
detector.ClassificationModel='Mouth';
detector.MergeThreshold=50;
Mouthbox=detector(Im);
Mx=Mouthbox(1)+Mouthbox(3)/2;
My=Mouthbox(2)+Mouthbox(4)/2;
(i)、重复(d)~(h),完成第2天到第d天的左眼、右眼、鼻子、嘴巴等四组位置坐标GCPd的确定;
(j)、配准子模块,用于各组内以第1天图像为参考图像,根据第d天左眼、右眼、鼻子、嘴巴等四组位置坐标GCPd构造控制点对进行配准处理,得到配准后图像Ird,调用matlab的cp2tform和imtransform等相关函数实现,调用方式如下:
GCPd=[[Ex1Ey1];[Ex2Ey2];[Nx Ny];[Mx My]];
t_concord=cp2tform(GCPd,GCP1,'affine');
Ird=imtransform(Img,t_concord,...
'XData',[1size(Img1,2)],'YData',[1size(Img1,1)]);
其中GCP1是第1天对应的左眼、右眼、鼻子、嘴巴等四组位置坐标,Img1是第1天人脸图像矩阵。
(k)、裁剪子模块,用于从配准后图像Ird中裁剪出脸部局部区域图像作为待评估图像Iestd,该区域中心为左右眼及鼻子三点的坐标中心XY5,宽度为眼部区域宽度,高度为宽度的1.2倍。调用matlab函数如下:
XY5=[(Ex1+Ex2+Nx)/3(Ey1+Ey2+Ny)/3];
mask=floor([XY5(1)-Eyebox(3)*0.5XY5(2)-Eyebox(3)*0.6…
Eyebox(3)*1 1.2*Eyebox(3)]);
Iestd=Ird(mask(2)+(1:mask(4)),mask(1)+(1:mask(3)),:);
(l)、重复(b)和(j)完成员工编号为n的全部人脸数据处理,得到待评估图像序列Iseq。
告警模块,用于健康警示提醒;
对员工编号为n的待评估图像序列Iseq进行颜色通道及灰度通道相关分析,得到反映该员工的面部色泽变化的相关系数矩阵CR,根据历史相关系数均值和方差计算当前此员工的健康状况警示标志,并给出健康告警信息;
具体包括:
(a)、对待评估图像序列Iseq中的第d副(d>1)图像Iseq分别获得红、绿、蓝通道和灰度图像(分别用R、G、B、H表示),并计算相邻时间对应的两幅图像img_i和img_j之间的相关系数CRd。定义CR1=[1 1 1 1],将各相关系数CRd(其中d=1,2,……,T)作为相关系数矩阵CR的一行。调用matlab的rgb2gray和corr等函数实现,调用方式如下:
img1=double(img_i(:,:,1));
img2=double(img_j(:,:,1));
cor1=corr(img1(:),img2(:),'type','Pearson');
img1=double(img_i(:,:,2));
img2=double(img_j(:,:,2));
cor2=corr(img1(:),img2(:),'type','Pearson');
img1=double(img_i(:,:,3));
img2=double(img_j(:,:,3));
cor3=corr(img1(:),img2(:),'type','Pearson');
img1=double(rgb2gray(img_i(:,:,:)));
img2=double(rgb2gray(img_j(:,:,:)));
cor4=corr(img1(:),img2(:),'type','Pearson');
CRd=[cor1cor2cor3cor4];
(b)、从d>5天开始,分别按照公式(1)和(2)计算相关系数矩阵各列的前d-5至d-1项的均值Mc和均方根Dc,其中j=1,2,3,4。
(c)、输入告警门限Th(1<Th<10),根据第d(d>5)天的相关系数,按照公式(3)计算当天的警示标志AR:
如果第d天的警示标志AR不等于0,则输出健康告警信息,如果AR大于0,则无任何输出。
实施例1:
本发明提供一种基于人脸图像的员工健康告警方法及系统,包括:
步骤1、人脸数据采集:利用人脸识别考勤机在员工完成上班打卡考勤的同时采集员工的彩色人脸图像并标注时间标签,经过多个工作日的积累得到标注了员工编码和时间标签的员工彩色人脸图像数据集DA。
(a)、参数初始化:设置员工数目为N=5,员工编号n分别为1,2,…,5,工作日上班打卡开始时间为t1=“07:30:00”,结束时间t2=“08:30:00”,以人脸图像采集时刻作为图像时间标签time(包含年月日时分秒,格式yyyymmddhhmmss,如2019年3月4日上午7点39分36秒对应的time=20190304073936),以员工编号n=3和时间标签time作为文件名存储人脸图像数据,采集图像尺寸为M1*M2=544*960;
(b)、在第1个工作日2019年3月4日的t1=“07:30:00”至t2=“08:30:00”时间段内的7点39分36秒,利用人脸识别考勤机对员工编号n=3的员工进行人脸拍照,成功识别打卡后,将人脸图像数据存储为jpg格式文件,文件名按如下规则:员工编号n_时间标签time.jpg,即文件名为3_20190304073936.jpg。
(c)、重复(b)的步骤,完成第1个工作日全部员工的人脸拍照和人脸图像数据存储,得到对应图像数据集合D1,其中包含图像文件1_20190304073947.jpg,2_20190304074831.jpg,3_20190304073936.jpg,4_20190304074539.jpg,5_20190304081144.jpg。
(d)分别对第d个(d=2,3,……,10)工作日(共计T=10个工作日),重复(b)和(c)的步骤,对不同员工进行打卡考勤的同时完成员工人脸数据的采集,得到第d天的图像数据集合Dd,Dd中包含N=5个员工第d天采集到的人脸图像数据文件;
(e)合并第1天至第T=10天的图像数据集合,得到图像数据集DA={D1,D2,…,D10},其中包含N=5个员工共T=10天的图片文件,其中包含图像文件,如图5所示:
1_20190304073947.jpg,2_20190304074831.jpg,3_20190304073936.jpg,4_20190304074539.jpg,5_20190304081144.jpg,1_20190305075705.jpg,2_20190305074354.jpg,3_20190305073949.jpg,4_20190305080259.jpg,5_20190305073426.jpg,1_20190306073657.jpg,2_20190306073046.jpg,3_20190306081952.jpg,4_20190306073523.jpg,5_20190306074548.jpg,1_20190307075554.jpg,2_20190307074015.jpg,3_20190307073808.jpg,4_20190307082234.jpg,5_20190307080208.jpg,1_20190308082137.jpg,2_20190308075130.jpg,3_20190308075404.jpg,4_20190308074407.jpg,5_20190308074114.jpg,1_20190311075502.jpg,2_20190311082456.jpg,3_20190311075929.jpg,4_20190311075054.jpg,5_20190311075206.jpg,1_20190312081623.jpg,2_20190312074424.jpg,3_20190312073507.jpg,4_20190312082657.jpg,5_20190312080403.jpg,1_20190313074421.jpg,2_20190313081900.jpg,3_20190313073210.jpg,4_20190313080843.jpg,5_20190313080827.jpg,1_20190314080217.jpg,2_20190314081411.jpg,3_20190314081111.jpg,4_20190314075237.jpg,5_20190314081604.jpg,1_20190315082546.jpg,2_20190315075926.jpg,3_20190315075618.jpg,4_20190315076030.jpg,5_20190315081947.jpg。
步骤2、从采集得到的图像数据集DA中对第n=3个员工的全部图像进行分组,对分组图像Sn逐幅完成图像的尺寸调整、面部区域、左右眼位置、鼻子位置和嘴巴位置确定,并以第1天图像为基准完成人脸校正,截取标准化处理后的人脸图像,获得待评估图像序列Iseq。
(a)按照员工编号n=3从图像数据集DA中选择以“n_”=“3_”开头的文件名,并按照时间从早到晚排序,得到第n=3个员工的分组图像Sn=S3={3_20190304073936.jpg,3_20190305073949.jpg,3_20190306081952.jpg,3_20190307073808.jpg,3_20190308075404.jpg,3_20190311075929.jpg,3_20190312073507.jpg,3_20190313073210.jpg,3_20190314081111.jpg,3_20190315075618.jpg}。
(b)对分组图像Sn中的第1个图像Img进行尺寸调整,得到宽度为W=400的固定宽度图像Iw,调用matlab的imresize函数实现,调用方式如下:
Iw=imresize(Img,[NaN,400]);
其中Img为从图像文件中读入的数据矩阵,NaN为matlab系统预定义变量,W为输出图像宽度(设W=400,输出图像高度程序自适应调整)。
(c)对固定宽度图像Iw进行面部区域确定,得到面部区域的四元素矩形Facebox=[x1,y1,w1,h1],调用matlab的vision.CascadeObjectDetector相关函数实现,调用函数及设置如下:
detector=vision.CascadeObjectDetector;
detector.ClassificationModel='FrontalFaceCART';
Facebox=detector(Iw);
检测结果出的面部区域如图4中的框①所示,四元素矩形Facebox=[x1,y1,w1,h1]=[71,245,282,282]。
(d)将固定宽度图像Iw位于面部区域的四元素矩形Facebox以外的数据置零,得到掩膜处理后的图像Im,以减小对后续眼睛、鼻子和嘴巴位置确定的影响。调用Matlab的以下函数实现:
Iw(1:Facebox(2),:,:)=0;
Iw((Facebox(2)+Facebox(4)):end,:,:)=0;
Iw(:,1:Facebox(1),:)=0;
Iw(:,(Facebox(1)+Facebox(3)):end,:)=0;
(e)对掩膜处理后的图像Im分别进行眼部区域确定,得到眼部区域的四元素矩形Eyebox=[x2,y2,w2,h2],调用matlab的vision.CascadeObjectDetector相关函数实现,调用函数如下:
detector.ClassificationModel='EyePairBig';
detector.MergeThreshold=5;
Eyebox=detector(Im);
检测结果出的眼部区域如图4中的框②所示,四元素矩形Eyebox=[x2,y2,w2,h2]=[124,339,182,45]。
(f)从图像Im中选取眼部区域的四元素矩形Eyebox左半部分、右半部分图像,分别完成左眼区域、右眼区域确定,并得到左眼中心坐标LeftEyeP=[Ex1,Ey1]和右眼中心坐标RightEyeP=[Ex2,Ey2],调用matlab的vision.CascadeObjectDetector相关函数实现,调用函数如下:
detector.ClassificationModel='LeftEye';
detector.MergeThreshold=10;
LEyebox=detector(Im(Eyebox(2)+(1:Eyebox(4)),…
Eyebox(1)+floor(1:Eyebox(3)/2)));
Ex1=Eyebox(1)+LEyebox(1)+LEyebox(3)/2;
Ey1=Eyebox(2)+LEyebox(2)+LEyebox(4)/2;
detector.ClassificationModel='RightEye';
detector.MergeThreshold=10;
REyebox=detector(Im(Eyebox(2)+(1:Eyebox(4)),…
Eyebox(1)+floor(Eyebox(3)/2:Eyebox(3))));
Ex2=Eyebox(1)+Eyebox(3)/2+REyebox(1)+REyebox(3)/2;
Ey2=Eyebox(2)+REyebox(2)+REyebox(4)/2;
检测结果出的左眼部和右眼部区域如图4中的框③和框④所示,左眼中心坐标LeftEyeP=[Ex1,Ey1]=[159.0,361.5]和右眼中心坐标RightEyeP=[Ex2,Ey2]=[270,358]。
(g)对掩膜处理后的图像Im进行鼻子区域确定,得到鼻子区域的四元素矩形Nosebox=[x3,y3,w3,h3],并计算鼻子位置坐标NoseP=[Nx,Ny],调用matlab的vision.CascadeObjectDetector相关函数实现,调用函数如下:
detector.ClassificationModel='Nose';
detector.MergeThreshold=floor(Eyebox(3)/3);
Nosebox=detector(Im);
Nx=Nosebox(1)+Nosebox(3)/2;
Ny=Nosebox(2)+Nosebox(4)/2;
检测结果出的鼻子区域如图4中的框⑤所示,鼻子中心坐标NoseP=[Nx,Ny]=[210.5,427.5]。
(h)对掩膜处理后的图像Im进行嘴巴区域确定,得到嘴巴区域的四元素矩形Mouthbox=[x4,y4,w4,h4],并计算鼻子位置坐标MouthP=[Mx,My],调用matlab的vision.CascadeObjectDetector相关函数实现,调用函数如下:
detector.ClassificationModel='Mouth';
detector.MergeThreshold=50;
Mouthbox=detector(Im);
Mx=Mouthbox(1)+Mouthbox(3)/2;
My=Mouthbox(2)+Mouthbox(4)/2;
检测结果出的嘴巴区域如图4中的框⑥所示,嘴巴中心坐标MouthP=[Mx,My]=[203.5000,486.5000]。得到第一天的左眼、右眼、鼻子、嘴巴等四组位置坐标GCP1=[159.0,361.5,270.0,358.0,210.5,427.5,203.5,486.5]。
(i)重复(d)-(h),完成第2天到第d天的左眼、右眼、鼻子、嘴巴等四组位置坐标GCPd的确定;
GCP2=[158.0,361.5,271.0,357.0,210.5,428.0,202.5,488.0]
GCP3=[157.0,362.5,269.5,358.5,208.5,431.0,202.5,490.5]
GCP4=[156.5,363.5,271.0,360.0,211.0,433.5,202.0,493.5]
GCP5=[159.0,364.5,274.5,361.5,213.0,435.5,209.0,495.0]
GCP6=[159.5,363.5,276.5,360.5,215.0,434.5,211.0,495.0]
GCP7=[158.5,362.5,275.5,359.5,213.0,432.0,207.0,491.0]
GCP8=[158.5,362.0,275.0,358.5,213.0,430.5,206.0,490.5]
GCP9=[158.0,363.0,269.0,358.5,210.5,430.0,206.0,488.0]
GCP10=[156.0,360.0,267.0,356.0,208.5,426.0,202.5,486.0]
(j)各组内以第1天图像为参考图像,根据第d天左眼、右眼、鼻子、嘴巴等四组位置坐标GCPd构造控制点对进行配准处理,得到配准后图像Ird,调用matlab的cp2tform和imtransform等相关函数实现,调用方式如下:
GCPd=[[Ex1 Ey1];[Ex2 Ey2];[Nx Ny];[Mx My]];
t_concord=cp2tform(GCPd,GCP1,'affine');
Ird=imtransform(Img,t_concord,...
'XData',[1size(Img1,2)],'YData',[1size(Img1,1)]);
其中GCP1是第1天对应的左眼、右眼、鼻子、嘴巴等四组位置坐标,Img1是第1天人脸图像矩阵。
(k)从配准后图像Ird中裁剪出脸部局部区域图像作为待评估图像Iestd,如图4框⑦所示;该区域中心为左右眼及鼻子三点的坐标中心XY5=[213.1667,382.3333],宽度为眼部区域宽度182,高度218为宽度182的1.2倍。调用matlab函数如下:
XY5=[(Ex1+Ex2+Nx)/3(Ey1+Ey2+Ny)/3];
mask=floor([XY5(1)-Eyebox(3)*0.5XY5(2)-Eyebox(3)*0.6…
Eyebox(3)*1 1.2*Eyebox(3)]);
Iestd=Ird(mask(2)+(1:mask(4)),mask(1)+(1:mask(3)),:);
(l)重复(b)和(j)完成员工编号为n的全部人脸数据处理,得到待评估图像序列Iseq。
步骤三、健康警示提醒:对员工编号为n的待评估图像序列Iseq进行颜色通道及灰度通道相关分析,得到反映该员工的面部色泽变化的相关系数矩阵CR,根据历史相关系数均值和方差计算当前此员工的健康状况警示标志,并给出健康告警信息。
(a)对待评估图像序列Iseq中的第d副(d>1)图像Iseq分别获得红、绿、蓝通道和灰度图像(分别用R、G、B、H表示),并计算相邻时间对应的两幅图像img_i和img_j之间的相关系数CRd。定义CR1=[1 1 1 1],将各相关系数CRd(其中d=1,2,……,T)作为相关系数矩阵CR的一行。调用matlab的rgb2gray和corr等函数实现,调用方式如下:
img1=double(img_i(:,:,1));
img2=double(img_j(:,:,1));
cor1=corr(img1(:),img2(:),'type','Pearson');
img1=double(img_i(:,:,2));
img2=double(img_j(:,:,2));
cor2=corr(img1(:),img2(:),'type','Pearson');
img1=double(img_i(:,:,3));
img2=double(img_j(:,:,3));
cor3=corr(img1(:),img2(:),'type','Pearson');
img1=double(rgb2gray(img_i(:,:,:)));
img2=double(rgb2gray(img_j(:,:,:)));
cor4=corr(img1(:),img2(:),'type','Pearson');
CRd=[cor1cor2cor3cor4];
根据各CRd绘制红、绿、蓝通道和灰度的相关系数变化曲线如图6所示。
(b)从d>5天开始,分别按照公式(4)和(5)计算相关系数矩阵各列的前d-5至d-1项的均值Mc和均方根Dc,其中j=1,2,3,4。
计算得到1-5、2-6、3-7、4-8、5-9天内的Mc矩阵为:
计算得到1-5、2-6、3-7、4-8、5-9天内的Dc矩阵为:
(c)输入告警门限Th=5,根据第d>5天的相关系数,按照公式(6)计算当天的警示标志AR:
其中
如果第d天的警示标志AR不等于0,则输出健康告警信息,如果AR大于0,则无任何输出。
计算得到第6天至第10天的警示标志位AR为:[0,0,0,4,0],表明第9天的警示标志AR不等于0,则输出保护健康警示信息,如图7所示。
本发明提出了一种基于面部色泽变化的员工健康预警系统,利用人脸识别考勤机采集员工的人脸面部图像,在完成员工日常考勤签到工作的同时,积累面部图像,并通过面部色泽变化,给出健康警示信息和动态曲线等,从而满足上班族员工无需花费额外的精力、在不知不觉中就把自己的健康监管起来的需求。
以上仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。