人脸识别方法、装置、计算机设备及可读存储介质与流程

文档序号:19129875发布日期:2019-11-13 02:32阅读:374来源:国知局
人脸识别方法、装置、计算机设备及可读存储介质与流程

本发明涉及到生物识别技术领域,特别是涉及到一种人脸识别方法、装置、计算机设备及可读存储介质。



背景技术:

现有在视频流中进行人脸识别检测的程序一般都是采用单线程结构,由于读取视频数据与检测识别人脸两个步骤为串行结构,即读取视频数据与检测识别不能够同时进行,必须先后顺序进行,因此在视频中具有较多检测识别信息时,如在车站、医院等场所,容易发生检测延时,对于视频的检测识别效果不好。即便是采用多线程,也无法做到读取视频数据与检测识别的并行处理,仍旧会产生延时现象,需要用户对视频的播放进行手动调速,视频检测不够流畅。因此开发一种能够高效实时检测视频流中人脸的方法是急需解决的问题。



技术实现要素:

本发明的主要目的为提供一种人脸识别方法、装置、计算机设备及可读存储介质,提高进行视频人脸检测时视频播放的流畅度。

本发明提出一种人脸识别方法,包括步骤:

通过第一进程单元和第二进程单元同时从共享内存中读取组成待识别视频的视频帧;

通过第一进程单元在前端播放视频帧,同时通过第二进程单元在后台对视频帧进行人脸检测,并将人脸检测的检测结果映射到前端对应播放的视频帧中以进行实时显示。

进一步地,在通过第一进程单元和第二进程单元同时从共享内存中读取组成待识别视频的视频帧的步骤之前,还包括:

通过第三进程单元获取待识别视频,得到组成待识别视频的所有视频帧,并存储于共享内存中。

进一步地,通过第三进程单元获取待识别视频,得到组成待识别视频的所有视频帧,并存储于共享内存中的步骤,包括:

从视频文件中读取或从摄像设备中实时获取待识别视频的所有视频帧;

将视频帧进行解码以转换成指定格式的图像,并按照播放顺序存储于共享内存中。

进一步地,将人脸检测的检测结果映射到前端对应播放的待识别视频中以进行实时显示的步骤,包括:

根据人脸检测的检测结果,确定视频帧中的人脸位置并进行人脸标识;

将人脸标识映射到前端对应播放的视频帧中以进行实时显示。

进一步地,在将人脸标识映射到前端对应播放的视频帧中以进行实时显示的步骤之后,还包括:

通过第一进程单元,以双图层形式对人脸标识和视频帧进行同步输出显示,其中人脸标识位于视频帧的上层图层。

进一步地,以双图层形式对人脸标识和视频帧进行同步输出显示的步骤,包括:

持续输出视频帧时,计算第一人脸标识和第二人脸标识在视频帧中的坐标位置差值,第一人脸标识与第二人脸标识分别位于播放顺序相邻的视频帧中;

若坐标位置差值位于预设差值范围内,则判定第一人脸标识与第二人脸标识对应的为同一人脸,对第一人脸标识与第二人脸标识之间的播放切换做运动平滑处理。

进一步地,在通过第三进程单元获取待识别视频,得到组成待识别视频的所有视频帧,并存储于共享内存中的步骤之后,还包括:

判断在共享内存中,视频帧的数量是否达到预设存储阈值;

若达到,则从共享内存中删除指定数量的视频帧。

本发明还提出了一种人脸识别装置,包括:

第一进程单元,用于从共享内存中读取组成待识别视频的视频帧,并在前端进行播放;

第二进程单元,用于从共享内存中读取组成待识别视频的视频帧进行人脸检测,并将人脸检测的检测结果映射到前端对应播放的视频帧中以进行实时显示。

本发明还提出了一种计算机设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述中任一项的人脸识别方法。

本发明还提出了一种可读存储介质,该可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述中任一项的人脸识别方法。

本发明与现有技术相比,有益效果是:本发明提供了一种人脸识别方法、装置、计算机设备及可读存储介质,其中方法包括:通过第一进程单元和第二进程单元同时从共享内存中读取组成待识别视频的视频帧;通过第一进程单元在前端播放视频帧,同时通过第二进程单元在后台对视频帧进行人脸检测,并将人脸检测的检测结果映射到前端对应播放的视频帧中以进行实时显示。通过双进程结构,在前端播放待识别视频的视频帧时,同时通过系统后台检测视频帧中的人脸,并将人脸检测的结果映射到前端对应播放的视频帧中,播放与检测两个进程可以同时并行,互不妨碍,提高了硬件资源的利用率,使视频播放与人脸检测能够同步显示,减少延时现象的发生,提高人脸检测时视频播放的流畅度。

附图说明

图1为本发明人脸识别方法一实施例的步骤流程示意图;

图2为本发明人脸识别方法一实施例的进行人脸识别的示意图;

图3为本发明人脸识别装置一实施例的模块示意图;

图4为本发明计算机设备一实施例的模块示意框图;

图5为本发明可读存储介质一实施例的模块示意框图。

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

需要说明,本发明实施例中所有方向性指示(诸如上、下、左、右、前、后……)仅用于解释在某一特定姿态(如附图所示)下各部件之间的相对位置关系、运动情况等,如果该特定姿态发生改变时,则该方向性指示也相应地随之改变,所述的连接可以是直接连接,也可以是间接连接。

另外,在本发明中如涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。

如图1所示,本发明提出一种人脸识别方法,包括步骤:

s1:通过第一进程单元和第二进程单元同时从共享内存中读取组成待识别视频的视频帧;

s2:通过第一进程单元在前端播放视频帧,同时通过第二进程单元在后台对视频帧进行人脸检测,并将人脸检测的检测结果映射到前端对应播放的视频帧中以进行实时显示。

在上述步骤s1和步骤s2实施时,在一个具体的实施例中,第一进程单元为前端显示页面及其读取程序,前端显示页面如显示屏等,用于从共享内存中读取组成待识别视频的视频帧并播放,这一步与正常的播放视频没有差别。第二进程单元为算法检测程序,用于在前端显示页面播放待识别视频的同时,从共享内存中读取组成待识别视频的视频帧进行检测人脸,并将人脸检测的检测结果映射到前端对应播放的视频帧中以进行实时显示。由于第一进程单元与第二进程单元为两个各自独立的进程,因此在第一进程单元播放待识别视频时,并不妨碍第二进程单元对待识别身份信息的视频帧进行人脸检测,播放视频与人脸检测两个执行程序可以同时并行。通过双进程结构,消除了线程执行中的并行阻碍,提高了硬件资源的利用率,使得对视频帧进行人脸检测的运算速度能够跟上视频帧的播放速度,从而使视频播放与人脸检测能够同步显示,减少延时现象的发生,提高人脸检测时视频播放的流畅度。

在一些实施例中,上述第二进程单元采用特征检测算法对视频帧中的人脸进行检测,其中特征检测算法包括haar特征检测算法(haar-like)、hog特征检测算法(histogramoforientedgradient,方向梯度直方图)以及lbp特征检测算法(localbinarypattern,局部二值模式)中的一种或多种的组合。例如在hog特征检测算法中,首先将存储图像进行灰度化,然后将图像分割成16×16像素的小方块,再分析存储图像中的每个小方块以及其周围的小方块,根据明暗度画一个箭头,箭头的指向代表了像素逐渐变暗的方向,重复操作每一个小方块,最终所有的小方块都被箭头取代,就形成了梯度直方图,它们能显示出图像从明亮到黑暗流动的变化,然后在每个小方块中,计算出每个主方向各有多少个梯度(有多少指向上,指向右上,指向右等),然后用指向性最强的那个方向箭头来代替原来那个小方块,最终结果,如图1所示,我们将存储图像转换成一个非常简单的hog表达形式,由此捕获了我们面部的基本结构,也即是在存储图像中检测出了人脸的具体位置和大小。同样的,在lbp特征检测算法中也是如此,例如将一幅100*100像素大小的存储图像,划分为10*10=100个子区域,每个子区域的大小为10*10像素;然后在每个子区域内的每个像素点,提取其lbp特征,然后,建立统计直方图;利用这10*10个统计直方图,就可以检测出存储图像中人脸的具体位置以及大小。

本发明提出一种人脸识别方法,包括:s1:通过第一进程单元和第二进程单元同时从共享内存中读取组成待识别视频的视频帧;s2:通过第一进程单元在前端播放视频帧,同时通过第二进程单元在后台对视频帧进行人脸检测,并将人脸检测的检测结果映射到前端对应播放的视频帧中以进行实时显示。通过双进程结构,在前端播放待识别视频的视频帧时,同时通过系统后台检测视频帧中的人脸,并将人脸检测的结果映射到前端对应播放的视频帧中,播放与检测两个进程可以同时并行,互不妨碍,提高了硬件资源的利用率,使视频播放与人脸检测能够同步显示,减少延时现象的发生,提高人脸检测时视频播放的流畅度。

在一个较优的实施例中,在通过第一进程单元和第二进程单元同时从共享内存中读取组成待识别视频的视频帧的步骤s1之前,还包括:

s01:通过第三进程单元获取待识别视频,得到组成待识别视频的所有视频帧,并存储于共享内存中。

在上述步骤s01实施时,视频都是由一帧一帧的图像以一定的速率快速播放所组成的,若要对视频中的人脸进行检测乃至识别,则需将待识别视频还原成单帧的图像,然后对图像中的人脸进行检测乃至识别。在一些实施例中,待识别视频可以是监控摄像头的实时录像,也可以是其他类型的视频,例如电影、电视剧等。对待识别视频进行解码,得到视频数据,其实就是读取待识别视频中需要进行人脸检测或人脸识别的最新一帧图像,然后因视频帧与图像的编码格式不同,需要对该视频帧进行解码,得到特定格式的图像,例如png、jpg、bmp等格式,以便后续进行人脸检测或识别。不断的从待识别视频中读取顺序最前的视频帧,然后将其解码成特定格式的图像,这样就把待识别视频转换成由一定数量的图像组成,这些图像就是待识别视频的视频数据,从而可以对视频中存在的人脸进行检测或识别。

在一个较优的实施例中,通过第三进程单元获取待识别视频,得到组成待识别视频的所有视频帧,并存储于共享内存中的步骤s01,包括:

s011:从视频文件中读取或从摄像设备中实时获取待识别视频的所有视频帧;

s012:将视频帧进行解码以转换成指定格式的图像,并按照播放顺序存储于共享内存中。

在上述步骤s011和步骤s012实施时,在实际应用中,视频人脸检测及识别可以在车站、宾馆、医院等人流密集的地方发挥人眼所不能做到的诸如验证、记录、识别等作用,在一些实施例中,可以通过获取预设识别区域的录像,例如监控视频等作为待识别视频。在另一些实施例中,可以通过摄像头对过往的行人进行实时检测识别。在进行实时检测识别时,摄像头将当前的实时视频帧不断地发送给视频读取进程,供其进行解码并存储。

在一个完整的获取特定的视频帧的流程中,首先,要获取待识别视频,在一些实施例中,可以通过videocapture函数从文件中读取待识别视频,例如:videocapture::videocapture(conststring&filename),又或者从摄像头中读取待识别视频,例如videocapture::videocapture(intdevice);然后,通过videoopen函数打开该视频文件,例如boolvideocapture::open(conststring&filename),或者打开该摄像头,例如boolvideocapture::open(intdevice);然后,通过release函数释放打开的视频,例如capture.release();/*释放打开的视频*/;然后,通过opened函数

判断视频是否被打开,成功打开返回ture,否则false,例如boolvideocapture::open(conststring&filename)boolvideocapture::open(intdevice);最后通过grab函数从视频文件中或者设备中获取视频帧,该方法成功调用返回ture,例如boolvideocapture::grab(),从而从待识别视频中获取到特定的视频帧。在一些实施例中,在获取视频帧时,可以通过get函数doublevideocapture::get(intpropid)和set函数boolvideocapture::set(intpropid,doublevalue)来自定义想要获取到的视频帧帧数。

获取到特定的视频帧之后,通过调用retrive函数对获取的帧进行解码,例如boolvideocapture::retrieve(mat&image,intchannel=0);又或者通过调用read函数直接获取视频帧并解码,例如videocapture&videocapture::operator>>(mat&image)boolvideocapture::read(mat&image)。从而将该视频帧转化为特定格式的图像并进行存储。

在一个较优的实施例中,将人脸检测的检测结果映射到前端对应播放的待识别视频中以进行实时显示的步骤s2,包括:

s21:根据人脸检测的检测结果,确定视频帧中的人脸位置并进行人脸标识;

s22:将人脸标识映射到前端对应播放的视频帧中以进行实时显示。

在上述步骤s21和步骤s22实施时,在将视频帧转换成特定格式的图片进行存储之后,读取图片,通过算法检测出该图片中存在的人脸的具体位置和大小,并对该人脸的具体位置和大小进行标识,得到标识位置。在一些实施例中,算法基于像素方法在图片中定位该标识位置,即主要以像素为单位计算不同特征的显著度图,在显著度图中定位人脸的具体位置和大小,此类方法的计算特征较容易提取、计算量较小、较为快速,但对于噪声较为敏感、鲁棒性较差。在另一些实施例中,算法基于频域分析的方法在图片中定位该标识位置,通过寻找不同特征在频域中的特点,构建频域滤波器来定位人脸的具体位置和大小,此类方法鲁棒性较好。在又一些实施例中,算法基于区域的方法在图片中定位该标识位置,利用分割将图像划分为不同的区域,然后通过区域竞争来定位人脸的具体位置和大小。

对视频帧中的人脸的具体位置和大小进行标识,得到标识位置之后,将该人脸标识映射到前端对应播放的视频帧中,即将标识位置信息映射发送给第一进程单元,由于第一进程单元与第二进程单元为同时并行,在播放速度与检测速度保持一致的条件下,此时第二进程单元进行人脸检测的视频帧正好就是第一进程单元正在播放的视频帧,第一进程单元在接收到第二进程单元映射过来的标识位置信息之后,将标识位置信息叠加在视频帧中以进行实时显示,具体到实际应用中,即是表现为在前端显示页面中能够观察到人脸检测框的存在。在一些实施例中,由于待识别视频的视频帧都是以一定顺序进行排列,在获取待识别视频的所有视频帧时,按照播放顺序对视频帧进行编号排序,第一进程单元在接收到第二进程单元映射过来的标识位置信息之后,会校验该标识位置信息对应的检测视频帧的编号是都与当前播放视频帧的编号一致,若一致,则表明该标识位置信息对应的正是当前播放视频帧中的人脸,对标识位置信息进行实时显示。

在一个较优的实施例中,在将人脸标识映射到前端对应播放的视频帧中以进行实时显示的步骤s22之后,还包括:

s23:通过第一进程单元,以双图层形式对人脸标识和视频帧进行同步输出显示,其中人脸标识位于视频帧的上层图层。

在上述步骤s23实施时,第一进程单元在对人脸标识进行显示时,采用双图层结构,具体到实际应用中,即在显示页面上具有两个叠加的图层,其中第一进程单元在获取到视频帧之后,将视频帧在下层图层进行显示播放,在接收到第二进程单元发送的人脸标识位置信息之后,将人脸标识位置信息在上层图层进行显示播放。由于人脸标识位置信息只是在视频帧出现人脸的位置才进行显示,因此将人脸标识位置信息在上层图层进行显示,只会覆盖在视频帧中存在人脸的位置上,而不会覆盖视频帧中的其他位置,不会妨碍到下层图层的正常显示效果,两个图层的显示互不干扰,且直接将人脸标识位置信息置于视频帧的上层,无需先将人脸标识位置整合到视频帧之后再同一进行显示,减少了视频帧播放之前的预处理量,保证了人脸标识位置信息能够与对应的视频帧进行同步显示,减少延时现象的发生,提高人脸检测时视频播放的流畅度。在一些实施例中,该标识位置在显示页面中表现为一个方框或者圆环等具有显著标识形状,将视频帧中检测到的人脸框选出来并且不会妨碍用户查看人脸。在另一些实施例中,该标识位置在显示页面中表现为一个实心的形状,例如方块或者圆盘,将视频帧中检测到的人脸覆盖住,从而使他人无法查看视频帧中的人脸。

在一个较优的实施例中,以双图层形式对人脸标识和视频帧进行同步输出显示的步骤s23,包括:

s231:持续输出视频帧时,计算第一人脸标识和第二人脸标识在视频帧中的坐标位置差值,第一人脸标识与第二人脸标识分别位于播放顺序相邻的视频帧中;

s232:若坐标位置差值位于预设差值范围内,则判定第一人脸标识与第二人脸标识对应的为同一人脸,对第一人脸标识与第二人脸标识之间的播放切换做运动平滑处理。

在上述步骤s231和步骤s232实施时,持续输出进行人脸检测的视频帧时,由于在一个待识别视频中,不同的视频帧其形状大小都是一致的,所以可以通过视频帧中的坐标位置来定义或确定人脸标识位置在视频帧中显示的具体位置。其中第一人脸标识与第二人脸标识分别位于播放顺序相邻的视频帧中,例如第一人脸标识为第一视频帧中的人脸标识,而第二人脸标识则为第二视频帧中的人脸标识,第一视频帧与第二视频帧为播放顺序相邻的视频帧,通过计算第一人脸标识和第二人脸标识在视频帧中的坐标位置差值,确定第一人脸标识和第二人脸标识在视频帧中的显示位置差值。

由于第一视频帧与第二视频帧之间的时间差很小,只有零点几秒,具体到待识别视频中的人脸,同一张人脸在第一视频帧与第二视频帧之间的相对位移也非常小,不会与其他人脸进行混淆,因此若计算出人脸标识在第一视频帧和第二视频帧之间的坐标位置差值位于预设差值范围内,则判定第一人脸标识与第二人脸标识对应的为同一人脸,对第一人脸标识与第二人脸标识之间的播放切换做运动平滑处理,使得用户体验更好,视频的播放效果更佳。

在一个较优的实施例中,在通过第三进程单元获取待识别视频,得到组成待识别视频的所有视频帧,并存储于共享内存中的步骤s01之后,还包括:

s02:判断在共享内存中,视频帧的数量是否达到预设存储阈值;

s03:若达到,则从共享内存中删除指定数量的视频帧。

在上述步骤s02和步骤s03实施时,第三进程单元获取待识别视频,得到组成待识别视频的所有视频帧,并存储于共享内存中的同时,第一进程单元和第二进程单元从共享内存中读取视频帧进行播放和检测,因此在一段时间后,共享内存中同时存在已经进行过检测的视频帧以及还没有检测过的视频帧,在共享内存中预先设定存储阈值,当视频帧的数量达到了预设存储阈值之后,则说明共享内存中已经存在一定数量的已经经过检测的视频帧,此时将该部分视频帧全部删除或者删除指定数量的视频帧,以节省共享内存中的存储空间。进一步地,在将该部分视频帧全部删除或者删除指定数量的视频帧之前,还可以从中抽取具有保存意义的特定视频帧进行额外存储,通过保留特定视频帧,让用户达到更好的检测体验。

在一个较优的实施例中,在通过第二进程单元在后台对视频帧进行人脸检测,并将人脸检测的检测结果映射到前端对应播放的视频帧中以进行实时显示的步骤s2之后,还包括:

s3:采用神经卷积网络算法对检测出的人脸进行人脸识别。

在上述步骤s3实施中,在检测出待识别视频中存在的人脸之后,进一步地,可以采用神经卷积网络算法对待识别视频中的人脸进行人脸识别,实现例如监控寻人的功能。在一个具体的实施例中,如图2所示,先通过面部特征点估计(facelandmarkestimation)算法找出视频中人脸的68个特征点(landmark),在一个具体的实施例中,如图2所示,68个特征点共包括:下巴轮廓17个点[0-16],左眉毛5个点[17-21],右眉毛5个点[22-26],鼻梁4个点[27-30],鼻尖5个点[31-35],左眼6个点[36-41],右眼6个点[42-47],外嘴唇12个点[48-59],内嘴唇8个点[60-67]。从而进一步得知人脸中五官的具体位置与大小;由于在视频中有些存在的人脸可能光线角度并不好,因此再将图片进行旋转、缩放和错切等操作,使得眼睛和嘴巴尽可能的靠近中心,进行人脸对齐,使图像中显示的人脸更加符合标准人脸;进行人脸对齐操作之后,再通过神经卷积网络算法对对齐后的人脸进行编码,生成一个128维向量x,最后计算这个得到128维向量与数据库中已存在的128维向量y之间的欧式距离,例如通过以下公式:

当与其他向量相比,向量x与向量y之间的欧式距离最近或者向量x与向量y之间的欧式距离位于一定的阈值范围时,即认为是向量x所对应的人脸与向量y所对应的人脸是同一张人脸,也即是同一个人,从而完成人脸识别。

本发明提出一种人脸识别方法,包括:s1:通过第一进程单元和第二进程单元同时从共享内存中读取组成待识别视频的视频帧;s2:通过第一进程单元在前端播放视频帧,同时通过第二进程单元在后台对视频帧进行人脸检测,并将人脸检测的检测结果映射到前端对应播放的视频帧中以进行实时显示。通过双进程结构,在前端播放待识别视频的视频帧时,同时通过系统后台检测视频帧中的人脸,并将人脸检测的结果映射到前端对应播放的视频帧中,播放与检测两个进程可以同时并行,互不妨碍,提高了硬件资源的利用率,使视频播放与人脸检测能够同步显示,减少延时现象的发生,提高人脸检测时视频播放的流畅度。

如图3所示,本发明还提出了一种人脸识别装置,包括:

第一进程单元10,用于从共享内存中读取组成待识别视频的视频帧,并在前端进行播放;

第二进程单元20,用于从共享内存中读取组成待识别视频的视频帧进行人脸检测,并将人脸检测的检测结果映射到前端对应播放的视频帧中以进行实时显示。

在上述第一进程单元10和第二进程单元20中,在一个具体的实施例中,第一进程单元10为前端显示页面及其读取程序,前端显示页面如显示屏等,用于从共享内存中读取组成待识别视频的视频帧并播放,这一步与正常的播放视频没有差别。第二进程单元20为算法检测程序,用于在前端显示页面播放待识别视频的同时,从共享内存中读取组成待识别视频的视频帧进行检测人脸,并将人脸检测的检测结果映射到前端对应播放的视频帧中以进行实时显示。由于第一进程单元10与第二进程单元20为两个各自独立的进程,因此在第一进程单元10播放待识别视频时,并不妨碍第二进程单元20对待识别身份信息的视频帧进行人脸检测,播放视频与人脸检测两个执行程序可以同时并行。通过双进程结构,消除了线程执行中的并行阻碍,提高了硬件资源的利用率,使得对视频帧进行人脸检测的运算速度能够跟上视频帧的播放速度,从而使视频播放与人脸检测能够同步显示,减少延时现象的发生,提高人脸检测时视频播放的流畅度。

在一些实施例中,上述第二进程单元20采用特征检测算法对视频帧中的人脸进行检测,其中特征检测算法包括haar特征检测算法(haar-like)、hog特征检测算法(histogramoforientedgradient,方向梯度直方图)以及lbp特征检测算法(localbinarypattern,局部二值模式)中的一种或多种的组合。例如在hog特征检测算法中,首先将存储图像进行灰度化,然后将图像分割成16×16像素的小方块,再分析存储图像中的每个小方块以及其周围的小方块,根据明暗度画一个箭头,箭头的指向代表了像素逐渐变暗的方向,重复操作每一个小方块,最终所有的小方块都被箭头取代,就形成了梯度直方图,它们能显示出图像从明亮到黑暗流动的变化,然后在每个小方块中,计算出每个主方向各有多少个梯度(有多少指向上,指向右上,指向右等),然后用指向性最强的那个方向箭头来代替原来那个小方块,最终结果,如图1所示,我们将存储图像转换成一个非常简单的hog表达形式,由此捕获了我们面部的基本结构,也即是在存储图像中检测出了人脸的具体位置和大小。同样的,在lbp特征检测算法中也是如此,例如将一幅100*100像素大小的存储图像,划分为10*10=100个子区域,每个子区域的大小为10*10像素;然后在每个子区域内的每个像素点,提取其lbp特征,然后,建立统计直方图;利用这10*10个统计直方图,就可以检测出存储图像中人脸的具体位置以及大小。

本发明提出一种人脸识别装置,包括:第一进程单元10,用于从共享内存中读取组成待识别视频的视频帧,并在前端进行播放;第二进程单元20,用于从共享内存中读取组成待识别视频的视频帧进行人脸检测,并将人脸检测的检测结果映射到前端对应播放的视频帧中以进行实时显示。通过双进程结构,在前端播放待识别视频的视频帧时,同时通过系统后台检测视频帧中的人脸,并将人脸检测的结果映射到前端对应播放的视频帧中,播放与检测两个进程可以同时并行,互不妨碍,提高了硬件资源的利用率,使视频播放与人脸检测能够同步显示,减少延时现象的发生,提高人脸检测时视频播放的流畅度。

在一个较优的实施例中,还包括:

第三进程单元30,用于获取待识别视频,得到组成待识别视频的所有视频帧,并存储于共享内存中。

在上述第三进程单元30中,视频都是由一帧一帧的图像以一定的速率快速播放所组成的,若要对视频中的人脸进行检测乃至识别,则需将待识别视频还原成单帧的图像,然后对图像中的人脸进行检测乃至识别。在一些实施例中,待识别视频可以是监控摄像头的实时录像,也可以是其他类型的视频,例如电影、电视剧等。对待识别视频进行解码,得到视频数据,其实就是读取待识别视频中需要进行人脸检测或人脸识别的最新一帧图像,然后因视频帧与图像的编码格式不同,需要对该视频帧进行解码,得到特定格式的图像,例如png、jpg、bmp等格式,以便后续进行人脸检测或识别。第三进程单元30不断的从待识别视频中读取顺序最前的视频帧,然后将其解码成特定格式的图像,这样就把待识别视频转换成由一定数量的图像组成,这些图像就是待识别视频的视频数据,从而可以对视频中存在的人脸进行检测或识别。

在一个较优的实施例中,第三进程单元30,包括:

读取子单元301,用于从视频文件中读取或从摄像设备中实时获取待识别视频的所有视频帧;

存储子单元302,将视频帧进行解码以转换成指定格式的图像,并按照播放顺序存储于共享内存中。

在上述读取子单元301和存储子单元302中,在实际应用中,视频人脸检测及识别可以在车站、宾馆、医院等人流密集的地方发挥人眼所不能做到的诸如验证、记录、识别等作用,在一些实施例中,可以通过读取子单元301获取预设识别区域的录像,例如监控视频等作为待识别视频。在另一些实施例中,可以通过读取子单元301对过往的行人进行实时检测识别。在进行实时检测识别时,摄像头将当前的实时视频帧不断地发送给视频读取进程,供其进行解码并存储。

在一个完整的获取特定的视频帧的流程中,首先,要获取待识别视频,在一些实施例中,可以通过videocapture函数从文件中读取待识别视频,例如:videocapture::videocapture(conststring&filename),又或者从摄像头中读取待识别视频,例如videocapture::videocapture(intdevice);然后,通过videoopen函数打开该视频文件,例如boolvideocapture::open(conststring&filename),或者打开该摄像头,例如boolvideocapture::open(intdevice);然后,通过release函数释放打开的视频,例如capture.release();/*释放打开的视频*/;然后,通过opened函数

判断视频是否被打开,成功打开返回ture,否则false,例如boolvideocapture::open(conststring&filename)boolvideocapture::open(intdevice);最后通过grab函数从视频文件中或者设备中获取视频帧,该方法成功调用返回ture,例如boolvideocapture::grab(),从而从待识别视频中获取到特定的视频帧。在一些实施例中,在获取视频帧时,可以通过get函数doublevideocapture::get(intpropid)和set函数boolvideocapture::set(intpropid,doublevalue)来自定义想要获取到的视频帧帧数。

读取子单元301获取到特定的视频帧之后,存储子单元302通过调用retrive函数对获取的帧进行解码,例如boolvideocapture::retrieve(mat&image,intchannel=0);又或者通过调用read函数直接获取视频帧并解码,例如videocapture&videocapture::operator>>(mat&image)boolvideocapture::read(mat&image)。从而将该视频帧转化为特定格式的图像并进行存储。

在一个较优的实施例中,第二进程单元20,包括:

确定子单元201,用于根据人脸检测的检测结果,确定视频帧中的人脸位置并进行人脸标识;

映射子单元202,将人脸标识映射到前端对应播放的视频帧中以进行实时显示。

在上述确定子单元201和映射子单元202中,存储子单元302在将视频帧转换成特定格式的图片进行存储之后,确定子单元201读取图片,通过算法检测出该图片中存在的人脸的具体位置和大小,并对该人脸的具体位置和大小进行标识,得到标识位置。在一些实施例中,算法基于像素方法在图片中定位该标识位置,即主要以像素为单位计算不同特征的显著度图,在显著度图中定位人脸的具体位置和大小,此类方法的计算特征较容易提取、计算量较小、较为快速,但对于噪声较为敏感、鲁棒性较差。在另一些实施例中,算法基于频域分析的方法在图片中定位该标识位置,通过寻找不同特征在频域中的特点,构建频域滤波器来定位人脸的具体位置和大小,此类方法鲁棒性较好。在又一些实施例中,算法基于区域的方法在图片中定位该标识位置,利用分割将图像划分为不同的区域,然后通过区域竞争来定位人脸的具体位置和大小。

确定子单元201对视频帧中的人脸的具体位置和大小进行标识,得到标识位置之后,映射子单元202将该人脸标识映射到前端对应播放的视频帧中,即将标识位置信息映射发送给第一进程单元10,由于第一进程单元10与第二进程单元20为同时并行,在播放速度与检测速度保持一致的条件下,此时确定子单元201进行人脸检测的视频帧正好就是第一进程单元10正在播放的视频帧,第一进程单元10在接收到映射子单元202映射过来的标识位置信息之后,将标识位置信息叠加在视频帧中以进行实时显示,具体到实际应用中,即是表现为在前端显示页面中能够观察到人脸检测框的存在。在一些实施例中,由于待识别视频的视频帧都是以一定顺序进行排列,在获取待识别视频的所有视频帧时,按照播放顺序对视频帧进行编号排序,第一进程单元10在接收到映射子单元202映射过来的标识位置信息之后,会校验该标识位置信息对应的检测视频帧的编号是都与当前播放视频帧的编号一致,若一致,则表明该标识位置信息对应的正是当前播放视频帧中的人脸,对标识位置信息进行实时显示。

在一个较优的实施例中,第一进程单元10,还用于:

以双图层形式对人脸标识和视频帧进行同步输出显示,其中人脸标识位于视频帧的上层图层。

在上述第一进程单元10中,第一进程单元10在对人脸标识进行显示时,采用双图层结构,具体到实际应用中,即在显示页面上具有两个叠加的图层,其中第一进程单元10在获取到视频帧之后,将视频帧在下层图层进行显示播放,在接收到第二进程单元发送的人脸标识位置信息之后,将人脸标识位置信息在上层图层进行显示播放。由于人脸标识位置信息只是在视频帧出现人脸的位置才进行显示,因此将人脸标识位置信息在上层图层进行显示,只会覆盖在视频帧中存在人脸的位置上,而不会覆盖视频帧中的其他位置,不会妨碍到下层图层的正常显示效果,两个图层的显示互不干扰,且直接将人脸标识位置信息置于视频帧的上层,无需先将人脸标识位置整合到视频帧之后再同一进行显示,减少了视频帧播放之前的预处理量,保证了人脸标识位置信息能够与对应的视频帧进行同步显示,减少延时现象的发生,提高人脸检测时视频播放的流畅度。在一些实施例中,该标识位置在显示页面中表现为一个方框或者圆环等具有显著标识形状,将视频帧中检测到的人脸框选出来并且不会妨碍用户查看人脸。在另一些实施例中,该标识位置在显示页面中表现为一个实心的形状,例如方块或者圆盘,将视频帧中检测到的人脸覆盖住,从而使他人无法查看视频帧中的人脸。

在一个较优的实施例中,第一进程单元10,包括:

计算子单元101,用于持续输出视频帧时,计算第一人脸标识和第二人脸标识在视频帧中的坐标位置差值,第一人脸标识与第二人脸标识分别位于播放顺序相邻的视频帧中;

切换子单元102,用于若坐标位置差值位于预设差值范围内,则判定第一人脸标识与第二人脸标识对应的为同一人脸,对第一人脸标识与第二人脸标识之间的播放切换做运动平滑处理。

在上述计算子单元101和切换子单元102中,持续输出进行人脸检测的视频帧时,由于在一个待识别视频中,不同的视频帧其形状大小都是一致的,所以计算子单元101可以通过视频帧中的坐标位置来定义或确定人脸标识位置在视频帧中显示的具体位置。其中第一人脸标识与第二人脸标识分别位于播放顺序相邻的视频帧中,例如第一人脸标识为第一视频帧中的人脸标识,而第二人脸标识则为第二视频帧中的人脸标识,第一视频帧与第二视频帧为播放顺序相邻的视频帧,计算子单元101通过计算第一人脸标识和第二人脸标识在视频帧中的坐标位置差值,确定第一人脸标识和第二人脸标识在视频帧中的显示位置差值。

由于第一视频帧与第二视频帧之间的时间差很小,只有零点几秒,具体到待识别视频中的人脸,同一张人脸在第一视频帧与第二视频帧之间的相对位移也非常小,不会与其他人脸进行混淆,因此若计算子单元101计算出人脸标识在第一视频帧和第二视频帧之间的坐标位置差值位于预设差值范围内,则判定第一人脸标识与第二人脸标识对应的为同一人脸,切换子单元102对第一人脸标识与第二人脸标识之间的播放切换做运动平滑处理,使得用户体验更好,视频的播放效果更佳。

在一个较优的实施例中,还包括:

判断单元40,用于判断在共享内存中,视频帧的数量是否达到预设存储阈值;

删除单元50,用于若达到,则从共享内存中删除指定数量的视频帧。

在上述判断单元40和删除单元50中,第三进程单元获取待识别视频,得到组成待识别视频的所有视频帧,并存储于共享内存中的同时,第一进程单元和第二进程单元从共享内存中读取视频帧进行播放和检测,因此在一段时间后,共享内存中同时存在已经进行过检测的视频帧以及还没有检测过的视频帧,在共享内存中预先设定存储阈值,当判断单元40得知视频帧的数量达到了预设存储阈值之后,则说明共享内存中已经存在一定数量的已经经过检测的视频帧,此时删除单元50将该部分视频帧全部删除或者删除指定数量的视频帧,以节省共享内存中的存储空间。进一步地,在删除单元50将该部分视频帧全部删除或者删除指定数量的视频帧之前,还可以从中抽取具有保存意义的特定视频帧进行额外存储,通过保留特定视频帧,让用户达到更好的检测体验。

在一个较优的实施例中,还包括:

识别单元60,用于采用神经卷积网络算法对检测出的人脸进行人脸识别。

在上述识别单元60中,第二进程单元20在检测出待识别视频中存在的人脸之后,进一步地,可以通过识别单元60采用神经卷积网络算法对待识别视频中的人脸进行人脸识别,实现例如监控寻人的功能。在一个具体的实施例中,如图2所示,先通过面部特征点估计(facelandmarkestimation)算法找出视频中人脸的68个特征点(landmark),在一个具体的实施例中,如图2所示,68个特征点共包括:下巴轮廓17个点[0-16],左眉毛5个点[17-21],右眉毛5个点[22-26],鼻梁4个点[27-30],鼻尖5个点[31-35],左眼6个点[36-41],右眼6个点[42-47],外嘴唇12个点[48-59],内嘴唇8个点[60-67]。从而进一步得知人脸中五官的具体位置与大小;由于在视频中有些存在的人脸可能光线角度并不好,因此再将图片进行旋转、缩放和错切等操作,使得眼睛和嘴巴尽可能的靠近中心,进行人脸对齐,使图像中显示的人脸更加符合标准人脸;进行人脸对齐操作之后,再通过神经卷积网络算法对对齐后的人脸进行编码,生成一个128维向量x,最后计算这个得到128维向量与数据库中已存在的128维向量y之间的欧式距离,例如通过以下公式:

当与其他向量相比,向量x与向量y之间的欧式距离最近或者向量x与向量y之间的欧式距离位于一定的阈值范围时,即认为是向量x所对应的人脸与向量y所对应的人脸是同一张人脸,也即是同一个人,从而完成人脸识别。

本发明提出一种人脸识别装置,包括:第一进程单元10,用于从共享内存中读取组成待识别视频的视频帧,并在前端进行播放;第二进程单元20,用于从共享内存中读取组成待识别视频的视频帧进行人脸检测,并将人脸检测的检测结果映射到前端对应播放的视频帧中以进行实时显示。通过双进程结构,在前端播放待识别视频的视频帧时,同时通过系统后台检测视频帧中的人脸,并将人脸检测的结果映射到前端对应播放的视频帧中,播放与检测两个进程可以同时并行,互不妨碍,提高了硬件资源的利用率,使视频播放与人脸检测能够同步显示,减少延时现象的发生,提高人脸检测时视频播放的流畅度。

如图4所示,本发明还提出了一种计算机设备,包括存储器1003和处理器1002,存储器1003存储有计算机程序1004,处理器1002执行计算机程序1004时实现上述中任一项的人脸识别方法,包括:通过第一进程单元和第二进程单元同时从共享内存中读取组成待识别视频的视频帧;通过第一进程单元在前端播放视频帧,同时通过第二进程单元在后台对视频帧进行人脸检测,并将人脸检测的检测结果映射到前端对应播放的视频帧中以进行实时显示。

如图5所示,本发明还提出了一种计算机可读存储介质2001,其上存储有计算机程序2002,,计算机程序2002被处理器执行时实现上述中任一项的人脸识别方法,包括:通过第一进程单元和第二进程单元同时从共享内存中读取组成待识别视频的视频帧;通过第一进程单元在前端播放视频帧,同时通过第二进程单元在后台对视频帧进行人脸检测,并将人脸检测的检测结果映射到前端对应播放的视频帧中以进行实时显示。

以上所述仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1