基于余弦相似度的人脸识别系统的实现
2020-03-21
来源:爱问旅游网
图像与多媒体技术・Image&Multimedia Technology 基于余弦相似度的人脸识别系统的实现 文/刘一玮杨韬刘瑾于振泽孙嘉琨 值。通过移位加掩码可以获得24位真彩色图 使用PHP语言并结合OpenCV { ¥rgb=ImageColorAt(¥res,¥x,¥y); ¥this一>attribute[¥i】=Srgb&0xFF;//获取灰 度值 ¥i++: 计算机视觉库,利用计算余弦相 似度的方法实现了人脸识别系统。 该方法将每张图片的灰度值转换 为欧式空间中的一个向量,用于 表征人脸,然后计算两个向量的 片的红,绿,蓝分量的值,利用上述公式可将 彩色图片转换为归一化的灰度图片。 3图像的描述 对于一幅分辨率为MxN的灰度图像,可 } 夹角余弦值,用余弦值表征两张 人脸图片的相似度。 将其灰度值转化为MxN维欧氏空间中的一个 向量。用ai 表示对应于图像中(ij)点的灰度 } ¥this一>attrcount=count(¥this一>attribute); 值,一幅灰度图像在欧氏空间中可表示为向量 x=(xo,x “,XMN一。)。这样,在计算机中就可以 【关键词】PHP OpenCV人脸识别余弦相似度 用一个长度为MxN的一维数组来描述一幅灰 度图像。 4计算余弦相似度 人脸识别是将图片中检测出的人脸图像 与数据库中的人脸图像进行对比,然后从数据 余弦相似度是信息检索中常用的计算相 库中找出与之匹配的人脸的过程,它是生物特 似度的方式,本文将其应用于计算人脸图像的 征识别和人工智能领域的一个重要研究课题。 相似度。在计算两张图片的相似度前,按照 目前,人脸识别技术广泛应用于门禁系统、监 之前描述的方法将图片A表示为向量A=a0 a 控系统、机器视觉、医学诊断、计算机安全等 …,aⅡ 图片B表示为向量B=b。,b ”,b 领域。随着技术的进步,人脸识别技术将被应 则两张图片的余弦相似度计算公式为: 用在更多的领域。本文将介绍一种基于余弦相 ∑ n:-10akbk 似度的人脸识别系统的实现方法。 。 【A,B) n- 1a 2[ ̄n- 1b Z ,I~Y ,I~Y 1人脸信息的提取 可见,余弦相似度计算的是两向量在高 维度空间中的夹角余弦值。夹角越小,余弦相 借助OpenCV计算机视觉库可以方便、 准确地进行人脸检测。本文使用OpenCV的” 似度越大:角度越大,余弦相似度越小(最小 值为0,最大值为1)。其值与向量的模长(即 haarcascade frontalface default.xml”检测器进 图片整体的亮度)无关,而取决于各个维度上 行人脸信息的提取 安装PHP的facedetect模 块后即可在PHP中使用face detect函数,该 分量的大小差异(即图片上各点间的灰度值差 异)。因此图片的整体明暗程度对余弦相似度 函数可返回图片中人脸的横坐标(x)、纵坐标 的影响不大,而各点间的明暗变化对余弦相似 (y)、宽度(w)、高度(t1)。利用这些位置信息 度的影响很大,这就很好地屏蔽了拍照时环境 可以将人脸部分从原图中提取出来。 的明暗程度对人脸识别的影响。并且,由于余 2图片的灰度处理 弦相似度的值介于0到l之间,可直接用于表 示两张人脸图片的相似度,无需进一步转化。 由于彩色图片中的人脸信息容易受到环 境背景颜色的影响,而且彩色图片不便于后续 5系统实现 的采样和计算,因此需要将彩色图片转换为灰 5.1图像的描述(关键代码) 度图片并进行归一化处理。 在计算机中,对于24位真彩色图片,每 //face类 个像素都是由红、绿、蓝(R、G、B)三个分 classface 量组成,每个分量占8位。而在灰度图片中, { 每个像素包含了一个表示亮度的值,该值的范 public¥attribute; 围为0到255 通过使彩色图片中各个像素的 public¥attrcount; 红、绿、蓝(R、G、B)分量相等,可将彩色 public function construct(¥grayimg) 图片转换为灰度图片。彩色图片灰度化的经典 { 公式如下: ¥res=imagecreatefromjpeg(¥grayimg); gray(x'y 0,2991R(x,y)+0.5871G(x,y)+o.114l ¥width=imagesx(¥res); B(x,y) ¥height=imagesy(¥res); 其中R(x,y)、G(x’y)、B(x’y)分别为图 ¥this一>attribute array(); 片中位于点(x,y)的像素的R、G、B值, for(¥x=O,¥i=O;Sx<¥width;¥x++) gray(x,y)为转换后位于点(x,y)的像素的灰度 { for(¥y=O;Sy<¥height;¥ H) 90・电子技术与软件工程Electronic Technology&Software Engineering imagedestroy(¥res); ) } 5.2计算余弦相似度(关键代码) //计算余弦相似度 function similarity(¥face1,¥face2) f ¥temp1=O: ¥temp2=O: ¥temp3=O: ¥temp4=0: for(¥i=0;¥i<¥facel->attr_count;¥i++) { Stemp1 =¥facel一>attribute[¥i] Sface2一 >attribute[¥i]; ¥temp3+=pow(¥facel->attribute[¥i],2); ¥temp4+=pow(¥face2一>attribute[¥i],2); ¥temp2=sqrt(¥temp3) sqrt(¥temp4); ¥cos sim=¥templ/¥temp2; returll¥cossim; ) 6结论 本文介绍了一种基于余弦相似度的人脸 识别系统的实现方法。该系统使用PHP语言 实现,首先借助OpenCV计算机视觉库及PHP 的facedetect模块进行人脸信息的提取;然后 对彩色的人脸图像进行图灰度处理;再将灰度 图片转化为欧氏空间中的一个向量,用一维数 组进行存储;最后通过计算余弦相似度得到两 张人脸图像的相似程度,实现人脸识别、比对 的功能。 参考文献 [1】胡国靖.人脸识别中图像预处理与匹配方 法研究[O].南京:南京理工大学,2014. 【2]戴欢,昊小俊.基于图像欧氏距离的人脸 描述和识别方法[J】.江南大学学报(自 然科学版),2009,8(1):21. 作者单位 大连理工大学辽宁省大连市116000