人脸识别/AI2018.09.07facedetection/AI/weekreport汇报人:芥末酱前言人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术。用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行脸部识别。它集成了人工智能、机器学习、模型理论、视频图像处理等多样专业技术。随着智能手机的快速普及,可以通过手机镜头在手机上做基于人脸识别的身份注册、认证、登录等,使身份认证进程更安全、方便。由于人脸比指纹等视觉辨识度更高,所以刷脸的应用前景更广阔。目录/Contents01人脸识别.应用02人脸图像.预处理03人脸图像.特征检测04人脸图像.匹配与识别01人脸识别.初识人脸识别分为两大类:一是回答我是谁的问题,即辨认(Identification),二是回答这个人是我吗?即(Verification)。正常人眼的识别准确率是97%,而目前专业的人脸识别研究企业机构可让其精确度高达99%以上,若结合眼纹等多因子验证,准确率能达到99.99%。且以人脸识别技术为核心的系统,能解决人脸识别在现实应用场景中面临的众多问题。1应用场景/Applicationscenario要支持未来在无需身份证信息的情况下,依然可以直接通过人脸识别身份信息,减少身份证查验、复印存档等环节,提高客户办理业务的便捷性,提高窗口办理业务的效率。应用场景②:支持未来刷脸办理业务比如人脸实时报警系统。应用人脸检测和识别技术,在人员进出重点区域设置人脸卡口摄像机,针对经过卡口人员进行人脸抓拍、识别和自动报警,并可将报警信息推送到警务终端APP,实现实战预案联动。人脸卡口系统可独立部署,也可作为子系统对接到第三方管理平台,可广泛应用于公安、交通、金融、司法、教育、医院等领域。应用场景③:智慧城市中的应用当前主要是通过扫描或者复印身份证信息,人工比对身份证照片。扫描或复印身份证只是作为备案,并不能有效核实身份证真伪。要确保是采用真实身份证办理业务,必须有某种技术手段对办事人提供的身份证进行查验。应用场景①:身份证查验,证据留存02人脸图像.预处理预处理是人脸识别过程中的一个重要环节。输入图像由于图像采集环境的不同,如光照明暗程度、以及设备性能的优劣等,往往存有噪声,对比度不够等缺点。因此我们需要对其进行图像预处理。2图像预处理/Imagepreprocessing通过平移、转置、镜像、旋转、缩放等几何变换对采集的图像进行处理,用于改正图像采集系统的系统误差。②几何变换将彩色图像转换为灰度图,其中有三种方法:最大值法、平均值法、以及加权平均法。①灰度化图像增强是为了改善人脸图像的质量,在视觉上更加清晰图像,使图像更利于识别。③图像增强归一化工作的目标是取得尺寸一致,灰度取值范围相同的标准化人脸图像。④归一化2灰度化/Grayscale最大值法平均值法加权平均将图像中的三分量亮度的最大值作为灰度值。将图像中的三分量亮度求平均得到一个灰度值。将三个分量以不同的权值进行加权平均。由于人眼对绿色的敏感最高,对RGB三分量进行加权平均。在RGB模型中,当R=G=B时,则彩色表示一种灰度颜色,其中R=G=B的值叫灰度值(又称强度值、亮度值),灰度范围为0-255。简要介绍2灰度变换方法/GrayscaletransformationmethodrgbImage=imread('Lena.jpg');grayImage=rgb2gray(rgbImage);J1=imadjust(grayImage,[01],[01],2.5);J2=imadjust(grayImage,[01],[01],1.5);J3=imadjust(grayImage,[01],[01],0.67);J4=imadjust(grayImage,[01],[01],0.4);subplot(1,5,1);imshow(J1);title('gamma=2.5');subplot(1,5,2);imshow(J2);title('gamma=1.5');subplot(1,5,3);imshow(grayImage);title('原灰度图像');subplot(1,5,4);imshow(J3);title('gamma=0.67');subplot(1,5,5);imshow(J4);title('gamma=0.4');左图是一张进行灰度变换的灰度图。先从左上角看,该像素的灰度值为254。然后下一个灰度值143,对其进行映射,得到的值是一个比143少的数。matlab当中常用的灰度变换函数是:imadjust(I,[low_in;high_in],[low_out;high_out],gamma)2几何变换/Geometrictransformation方法%%%%%%平移se=translate(strel(1),[2020]);img2=imdilate(img1,se);figure,imshow(img2);imwrite(img2,'a2.jpg');I=imread('baby.bmp');[height,width,dim]=size(I);tform1=maketform('affine',[0,1,0;1,0,0;0,0,1]);I1=imtransform(I,tform1,'nearest');%%%%%%旋转img3=imrotate(img1,90);figure,imshow(img3);imwrite(img3,'a3.jpg');%%%%%%缩放img4=imresize(img1,2);figure,imshow(img4);imwrite(img4,'a4.jpg');平移转置旋转缩放2图像增强/Imageenhancement原理:对数变换可以将图像的低灰度值部分扩展,显示出低灰度部分更多的细节,将其高灰度值部分压缩,减少高灰度值部分。Log变换原理:主要用于图像的校正,将灰度过高或者灰度过低的图片进行修正,增强对比度。伽马变换原理:将原始图像的灰度图从比较集中的某个灰度区间均匀分布在整个灰度空间中,实现对图像的非线性拉伸,重新分配像素值。①直方图均衡化原理:利用图像的二次微分对图像进行蜕化,在图像领域中微分是锐化,积分是模糊,即利用邻域像素提高对比度。②拉普拉斯算子2归一化/Normalized所谓图像归一化,就是通过一系列变换,将待处理的原始图像转换成相应的唯一标准形式(该标准形式图像对平移、旋转、缩放等仿射变换具有不变特性)。1、什么是归一化?图像归一化使得图像可以抵抗几何变换的攻击,也就是转换成唯一的标准形式以抵抗仿射变换。2、为什么归一化?①线性函数归一化(Min-Maxscaling)②0均值标准化(Z-scorestandardization)3、数据归一化的方法有哪些?03人脸图像.特征检测所谓人脸检测,就是给定任意一张图片,找到其中是否存在一个或多个人脸,并返回图片中每个人脸的位置和范围。即找出特征点。在模式识别领域,一句重要的话是:“Featuresmatter”。获得好的特征是识别成功的关键。3深度学习.特征点/DeepLearning特征点检测.算法在人脸检测的基础上,根据输入的人脸图像,自动定位出面部关键特征点,如眼睛、鼻尖、嘴角点、眉毛以及人脸各部件轮廓点等,输入:人脸外观,输出:人脸特征点集合。人脸对齐.算法以看作在一张人脸图像搜索人脸预先定义的点(也叫人脸形状),通常从一个粗估计的形状开始,然后通过迭代来细化形状的估计。方法包括:①AAM(ActiveAppearnceModel)②ASM(ActiveShapeModel)特征点定位.算法利用CNN,由粗到细,实现人脸关键点的精确定位。一般网络结构分为3层:level1、level2、level3。每层都包含多个独立的CNN模型。特征点提取.算法需要一个特征提取器(predictor),构建特征提取器可以训练模型。要下载dlib提供的已经训练好的关键点提取模型。3特征点检测算法/BaseonCNN3人脸对齐算法/Facealignment仿射变换以求人脸对齐importcv2importnumpyasnpfrommatplotlibimportpyplotaspltimg=cv2.imread('lena.jpg',1)rows,cols,channel=img.shape//仿射函数,将3个原图点坐标,和得到结果图的3个点坐标,生成参数带入函数得到结果pts1=np.float32([[50,50],[200,50],[50,200]])pts2=np.float32([[10,100],[200,50],[100,250]])M=cv2.getAffineTransform(pts1,pts2)dst=cv2.warpAffine(img,M,(cols,rows))plt.subplot(121),plt.imshow(img),plt.title('Input')plt.subplot(122),plt.imshow(dst),plt.title('Output')plt.show()3特征点定位算法/FeaturelocationF1定位所有的5个关键点,EN1用于定位:左眼+右眼+鼻子三个特征点,NM1用于定位:左嘴角+右嘴角+鼻子三个特征点。level1粗定位,包含3个CNN每两个CNN负责预测同一个关键点,然后取平均得到这一点的精确预测。输入为在level1输出的关键点周围的局部裁剪图像。level2精确定位,包含10个CNNlevel3更精确定位结构和作用与level2一致,10个CNN,两两平均,只是输入的图像是在leve2关键点基础上做了更小的裁剪。4特征提取算法/Featureextraction首先,需要一个特征提取器(predictor),构建特征提取器可以训练模型。要下载dlib提供的已经训练好的关键点提取模型。因为我的人脸图片是不同角度的,所以不一定能够检测到人脸,所以当检测不到人脸时,依次旋转图片60度,再次检测,直到能够检测到人脸为止,如果旋转了360度还是检测不到人脸的话,那么认为该图片中不存在人脸。关键点提取提取-保存保存68个关键点对照着左图,比如说想获取鼻尖的坐标,那么横坐标就是shapes[0].part[30].x(),其余的类似。4特征提取算法/Featureextraction#includedlib/opencv.h#includeopencv2/opencv.hpp#includedlib/image_processing/frontal_face_detector.h#includedlib/image_processing/render_face_detections.h#includedlib/image_processing.h#includedlib/gui_widgets.husingnamespacedlib;usingnamespacestd;intmain(){try{cv::VideoCapturecap(0);//.先初始化,打开视频if(!cap.isOpened()){cerrUnabletoconnecttocameraendl;return1;}关键点提取frontal_face_detectordetector=get_frontal_face_detector();shape_predictorpose_model;deserialize(shape_predictor_68_face_landmarks.dat)pose_model;while(cv::waitKey(30)!=27){//Grabaframecv::Mattemp;captemp;cv_imagebgr_pixelcimg(temp);//Detectfacesstd::vectorrectangl