在念研究生,老师给了个任务:从视频中检测到人脸并判断是否是指定的某人,然后判断是活体还是照片。

人工智能(2)

一点背景知识
OpenCV 是一个开源的计算机视觉和机器学习库。它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包。根据这个项目的,OpenCV 已被广泛运用在各种项目上,从谷歌街景的图片拼接,到交互艺术展览的技术实现中,都有 OpenCV 的身影。
OpenCV 起始于 1999 年 Intel 的一个内部研究项目。从那时起,它的开发就一直很活跃。进化到现在,它已支持如 OpenCL 和 OpenGL 等现代技术,也支持如 iOS 和 Android 等平台。
1999 年,发布后大红大热。Intel 奔腾 3 处理器是当时最高级的 CPU,400-500 MHZ 的时钟频率已被认为是相当快。2006 年 OpenCV 1.0 版本发布的时候,当时主流 CPU 的性能也只和 iPhone 5 的 A6 处理器相当。尽管计算机视觉从传统上被认为是计算密集型应用,但我们的移动设备性能已明显地超出能够执行有用的计算机视觉任务的阈值,带着摄像头的移动设备可以在计算机视觉平台上大有所为。
在本文中,我会从一个 iOS 开发者的视角概述一下 OpenCV,并介绍一点基础的类和概念。随后,会讲到如何集成 OpenCV 到你的 iOS 项目中以及一些 Objective-C++ 基础知识。最后,我们会看一个 demo 项目,看看如何在 iOS 设备上使用 OpenCV 实现人脸检测与人脸识别。
OpenCV 概述
OpenCV 的 API 是 C++ 的。它由不同的模块组成,这些模块中包含范围极为广泛的各种方法,从底层的图像颜色空间转换到高层的机器学习工具。
使用 C++ API 并不是绝大多数 iOS 开发者每天都做的事,你需要使用 Objective-C++ 文件来调用 OpenCV 的函数。 也就是说,你不能在 Swift 或者 Objective-C 语言内调用 OpenCV 的函数。 这篇 OpenCV 的
告诉你只要把所有用到 OpenCV 的类的文件后缀名改为 .mm 就行了,包括视图控制器类也是如此。这么干或许能行得通,却不是什么好主意。正确的方式是给所有你要在 app 中使用到的 OpenCV 功能写一层 Objective-C++ 封装。这些 Objective-C++ 封装把 OpenCV 的 C++ API 转化为安全的 Objective-C API,以方便地在所有 Objective-C 类中使用。走封装的路子,你的工程中就可以只在这些封装中调用 C++
代码,从而避免掉很多让人头痛的问题,比如直接改文件后缀名会因为在错误的文件中引用了一个 C++ 头文件而产生难以追踪的编译错误。
OpenCV 声明了命名空间 cv,因此 OpenCV 的类的前面会有个 cv:: 前缀,就像
cv::Mat、 cv::Algorithm 等等。你也可以在 .mm 文件中使用
using namespace cv 来避免在一堆类名前使用 cv:: 前缀。但是,在某些类名前你必须使用命名空间前缀,比如
cv::Rect 和 cv::Point,因为它们会跟定义在 MacTypes.h 中的
Rect 和 Point 相冲突。尽管这只是个人偏好问题,我还是偏向在任何地方都使用 cv:: 以保持一致性。
下面是在中列出的最重要的模块。
core:简洁的核心模块,定义了基本的数据结构,包括稠密多维数组 Mat 和其他模块需要的基本函数。imgproc:图像处理模块,包括线性和非线性图像滤波、几何图像转换 (缩放、仿射与透视变换、一般性基于表的重映射)、颜色空间转换、直方图等等。video:视频分析模块,包括运动估计、背景消除、物体跟踪算法。calib3d:包括基本的多视角几何算法、单体和立体相机的标定、对象姿态估计、双目立体匹配算法和元素的三维重建。features2d:包含了显著特征检测算法、描述算子和算子匹配算法。objdetect:物体检测和一些预定义的物体的检测 (如人脸、眼睛、杯子、人、汽车等)。ml:多种机器学习算法,如 K 均值、支持向量机和神经网络。highgui:一个简单易用的接口,提供视频捕捉、图像和视频编码等功能,还有简单的 UI 接口 (iOS 上可用的仅是其一个子集)。gpu:OpenCV 中不同模块的 GPU 加速算法 (iOS 上不可用)。ocl:使用 OpenCL 实现的通用算法 (iOS 上不可用)。一些其它辅助模块,如 Python 绑定和用户贡献的算法。
基础类和操作
OpenCV 包含几百个类。为简便起见,我们只看几个基础的类和操作,进一步阅读请参考。过一遍这几个核心类应该足以对这个库的机理产生一些感觉认识。
cv::Mat 是 OpenCV 的核心数据结构,用来表示任意 N 维矩阵。因为图像只是 2 维矩阵的一个特殊场景,所以也是使用
cv::Mat 来表示的。也就是说,cv::Mat 将是你在 OpenCV 中用到最多的类。
一个 cv::Mat 实例的作用就像是图像数据的头,其中包含着描述图像格式的信息。图像数据只是被引用,并能为多个 cv::Mat 实例共享。OpenCV 使用类似于 ARC 的引用计数方法,以保证当最后一个来自
cv::Mat 的引用也消失的时候,图像数据会被释放。图像数据本身是图像连续的行的数组 (对 N 维矩阵来说,这个数据是由连续的 N-1 维数据组成的数组)。使用
step[] 数组中包含的值,图像的任一像素地址都可通过下面的指针运算得到:
uchar *pixelPtr = cvMat.data + rowIndex * cvMat.step[0] + colIndex * cvMat.step[1]
每个像素的数据格式可以通过 type() 方法获得。除了常用的每通道 8 位无符号整数的灰度图 (1 通道,CV_8UC1) 和彩色图 (3 通道,CV_8UC3),OpenCV 还支持很多不常用的格式,例如
CV_16SC3 (每像素 3 通道,每通道使用 16 位有符号整数),甚至 CV_64FC4 (每像素 4 通道,每通道使用 64 位浮点数)。
cv::Algorithm
Algorithm 是 OpenCV 中实现的很多算法的抽象基类,包括将在我们的 demo 工程中用到的 FaceRecognizer。它提供的 API 与苹果的 Core Image 框架中的
CIFilter 有些相似之处。创建一个 Algorithm 的时候使用算法的名字来调用 Algorithm::create(),并且可以通过
get() 和 set()方法来获取和设置各个参数,这有点像是键值编码。另外,Algorithm 从底层就支持从/向 XML 或 YAML 文件加载/保存参数的功能。
在 iOS 上使用 OpenCV
添加 OpenCV 到你的工程中
集成 OpenCV 到你的工程中有三种方法:
使用 CocoaPods 就好: pod &OpenCV&。下载官方,并把它添加到工程里。从
拉下代码,并根据自己编译 OpenCV 库。
Objective-C++
如前面所说,OpenCV 是一个 C++ 的 API,因此不能直接在 Swift 和 Objective-C 代码中使用,但能在 Objective-C++ 文件中使用。
Objective-C++ 是 Objective-C 和 C++ 的混合物,让你可以在 Objective-C 类中使用 C++ 对象。clang 编译器会把所有后缀名为
.mm 的文件都当做是 Objective-C++。一般来说,它会如你所期望的那样运行,但还是有一些使用 Objective-C++ 的注意事项。内存管理是你最应该格外注意的点,因为 ARC 只对 Objective-C 对象有效。当你使用一个 C++ 对象作为类属性的时候,其唯一有效的属性就是
assign。因此,你的 dealloc 函数应确保 C++ 对象被正确地释放了。
第二重要的点就是,如果你在 Objective-C++ 头文件中引入了 C++ 头文件,当你在工程中使用该 Objective-C++ 文件的时候就泄露了 C++ 的依赖。任何引入你的 Objective-C++ 类的 Objective-C 类也会引入该 C++ 类,因此该 Objective-C 文件也要被声明为 Objective-C++ 的文件。这会像森林大火一样在工程中迅速蔓延。所以,应该把你引入 C++ 文件的地方都用
#ifdef __cplusplus 包起来,并且只要可能,就尽量只在 .mm 实现文件中引入 C++ 头文件。
要获得更多如何混用 C++ 和 Objective-C 的细节,请查看
Demo:人脸检测与识别
现在,我们对 OpenCV 及如何把它集成到我们的应用中有了大概认识,那让我们来做一个小 demo 应用:从 iPhone 的摄像头获取视频流,对它持续进行人脸检测,并在屏幕上标出来。当用户点击一个脸孔时,应用会尝试识别这个人。如果识别结果正确,用户必须点击 “Correct”。如果识别错误,用户必须选择正确的人名来纠正错误。我们的人脸识别器就会从错误中学习,变得越来越好。
本 demo 应用的源码可从
OpenCV 的 highgui 模块中有个类,CvVideoCamera,它把 iPhone 的摄像机抽象出来,让我们的 app 通过一个代理函数
- (void)processImage:(cv::Mat&)image 来获得视频流。CvVideoCamera 实例可像下面这样进行设置:
CvVideoCamera *videoCamera = [[CvVideoCamera alloc] initWithParentView:view];
videoCamera.defaultAVCaptureDevicePosition = AVCaptureDevicePositionF
videoCamera.defaultAVCaptureSessionPreset = AVCaptureSessionPreset640x480;
videoCamera.defaultAVCaptureVideoOrientation = AVCaptureVideoOrientationP
videoCamera.defaultFPS = 30;
videoCamera.grayscaleMode = NO;
videoCamera.delegate = self;
摄像头的帧率被设置为 30 帧每秒, 我们实现的 processImage 函数将每秒被调用 30 次。因为我们的 app 要持续不断地检测人脸,所以我们应该在这个函数里实现人脸的检测。要注意的是,如果对某一帧进行人脸检测的时间超过 1/30 秒,就会产生掉帧现象。
其实你并不需要使用 OpenCV 来做人脸检测,因为 Core Image 已经提供了 CIDetector 类。用它来做人脸检测已经相当好了,并且它已经被优化过,使用起来也很容易:
CIDetector *faceDetector = [CIDetector detectorOfType:CIDetectorTypeFace context:context options:@{CIDetectorAccuracy: CIDetectorAccuracyHigh}];
NSArray *faces = [faceDetector featuresInImage:image];
从该图片中检测到的每一张面孔都在数组 faces 中保存着一个 CIFaceFeature 实例。这个实例中保存着这张面孔的所处的位置和宽高,除此之外,眼睛和嘴的位置也是可选的。
另一方面,OpenCV 也提供了一套物体检测功能,经过训练后能够检测出任何你需要的物体。该库为多个场景自带了可以直接拿来用的检测参数,如人脸、眼睛、嘴、身体、上半身、下半身和笑脸。检测引擎由一些非常简单的检测器的级联组成。这些检测器被称为 Haar 特征检测器,它们各自具有不同的尺度和权重。在训练阶段,决策树会通过已知的正确和错误的图片进行优化。关于训练与检测过程的详情可参考此。当正确的特征级联及其尺度与权重通过训练确立以后,这些参数就可被加载并初始化级联分类器了:
NSString *faceCascadePath = [[NSBundle mainBundle] pathForResource:@&haarcascade_frontalface_alt2&
ofType:@&xml&];
const CFIndex CASCADE_NAME_LEN = 2048;
char *CASCADE_NAME = (char *) malloc(CASCADE_NAME_LEN);
CFStringGetFileSystemRepresentation( (CFStringRef)faceCascadePath, CASCADE_NAME, CASCADE_NAME_LEN);
CascadeClassifier faceD
faceDetector.load(CASCADE_NAME);
这些参数文件可在 OpenCV 发行包里的 data/haarcascades 文件夹中找到。
在使用所需要的参数对人脸检测器进行初始化后,就可以用它进行人脸检测了:
vector&cv::Rect& faceR
double scalingFactor = 1.1;
int minNeighbors = 2;
int flags = 0;
cv::Size minimumSize(30,30);
faceDetector.detectMultiScale(img, faceRects,
scalingFactor, minNeighbors, flags
cv::Size(30, 30) );
检测过程中,已训练好的分类器会用不同的尺度遍历输入图像的每一个像素,以检测不同大小的人脸。参数 scalingFactor 决定每次遍历分类器后尺度会变大多少倍。参数
minNeighbors 指定一个符合条件的人脸区域应该有多少个符合条件的邻居像素才被认为是一个可能的人脸区域;如果一个符合条件的人脸区域只移动了一个像素就不再触发分类器,那么这个区域非常可能并不是我们想要的结果。拥有少于
minNeighbors 个符合条件的邻居像素的人脸区域会被拒绝掉。如果 minNeighbors 被设置为 0,所有可能的人脸区域都会被返回回来。参数
flags 是 OpenCV 1.x 版本 API 的遗留物,应该始终把它设置为 0。最后,参数 minimumSize 指定我们所寻找的人脸区域大小的最小值。faceRects 向量中将会包含对
img 进行人脸识别获得的所有人脸区域。识别的人脸图像可以通过 cv::Mat 的 () 运算符提取出来,调用方式很简单:cv::Mat faceImg = img(aFaceRect)。
不管是使用 CIDetector 还是 OpenCV 的 CascadeClassifier,只要我们获得了至少一个人脸区域,我们就可以对图像中的人进行识别了。
OpenCV 自带了三个人脸识别算法:Eigenfaces,Fisherfaces 和局部二值模式直方图 (LBPH)。如果你想知道它们的工作原理及相互之间的区别,请阅读 OpenCV 的详细。
针对于我们的 demo app,我们将采用 LBPH 算法。因为它会根据用户的输入自动更新,而不需要在每添加一个人或纠正一次出错的判断的时候都要重新进行一次彻底的训练。
要使用 LBPH 识别器,我们也用 Objective-C++ 把它封装起来。这个封装中暴露以下函数:
+ (FJFaceRecognizer *)faceRecognizerWithFile:(NSString *)
- (NSString *)predict:(UIImage*)img confidence:(double *)
- (void)updateWithFace:(UIImage *)img name:(NSString *)
像下面这样用工厂方法来创建一个 LBPH 实例:
+ (FJFaceRecognizer *)faceRecognizerWithFile:(NSString *)path {
FJFaceRecognizer *fr = [FJFaceRecognizer new];
fr-&_faceClassifier = createLBPHFaceRecognizer();
fr-&_faceClassifier-&load(path.UTF8String);
预测函数可以像下面这样实现:
- (NSString *)predict:(UIImage*)img confidence:(double *)confidence {
cv::Mat src = [img cvMatRepresentationGray];
self-&_faceClassifier-&predict(src, label, *confidence);
return _labelsArray[label];
请注意,我们要使用一个类别方法把 UIImage 转化为 cv::Mat。此转换本身倒是相当简单直接:使用
CGBitmapContextCreate 创建一个指向 cv::Image 中的 data 指针所指向的数据的
CGContextRef。当我们在此图形上下文中绘制此 UIImage 的时候,cv::Image 的
data 指针所指就是所需要的数据。更有趣的是,我们能对一个 Objective-C 类创建一个 Objective-C++ 的类别,并且确实管用。
另外,OpenCV 的人脸识别器仅支持整数标签,但是我们想使用人的名字作标签,所以我们得通过一个 NSArray 属性来对二者实现简单的转换。
一旦识别器给了我们一个识别出来的标签,我们把此标签给用户看,这时候就需要用户给识别器一个反馈。用户可以选择,“是的,识别正确”,也可以选择,“不,这是 Y,不是 X”。在这两种情况下,我们都可以通过人脸图像和正确的标签来更新 LBPH 模型,以提高未来识别的性能。使用用户的反馈来更新人脸识别器的方式如下:
- (void)updateWithFace:(UIImage *)img name:(NSString *)name {
cv::Mat src = [img cvMatRepresentationGray];
NSInteger label = [_labelsArray indexOfObject:name];
if (label == NSNotFound) {
[_labelsArray addObject:name];
label = [_labelsArray indexOfObject:name];
vector&cv::Mat& images = vector&cv::Mat&();
images.push_back(src);
vector&int& labels = vector&int&();
labels.push_back((int)label);
self-&_faceClassifier-&update(images, labels);
这里,我们又做了一次了从 UIImage 到 cv::Mat、int 到
NSString 标签的转换。我们还得如 OpenCV 的 FaceRecognizer::update API所期望的那样,把我们的参数放到
std::vector 实例中去。
如此“预测,获得反馈,更新循环”,就是文献上所说的。
OpenCV 是一个强大而用途广泛的库,覆盖了很多现如今仍在活跃的研究领域。想在一篇文章中给出详细的使用说明只会是让人徒劳的事情。因此,本文仅意在从较高层次对 OpenCV 库做一个概述。同时,还试图就如何集成 OpenCV 库到你的 iOS 工程中给出一些实用建议,并通过一个人脸识别的例子来向你展示如何在一个真正的项目中使用 OpenCV。如果你觉得 OpenCV 对你的项目有用, OpenCV 的官方文档写得非常好非常详细,请继续前行,创造出下一个伟大的 app!
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:26729次
积分:1125
积分:1125
排名:千里之外
原创:74篇
转载:26篇
评论:21条
文章:10篇
阅读:6097
(30)(26)(12)(11)(18)(5)(2)(4)(1)一种基于视频方式的人脸识别样本采集方法及系统的制作方法
一种基于视频方式的人脸识别样本采集方法及系统的制作方法
【专利摘要】本发明提供一种基于视频方式的人脸识别样本采集方法及系统,首先获取视频的图像帧中具有运动信息的图像区域,然后检测所述图像区域以获取人脸像素区域,接着对含有人脸的图像帧中人脸像素区域进行跟踪,获取同一人脸的历史图像帧,再对质量高的同一人脸的历史图像帧进行人脸特征提取,获取人脸识别所需的人脸特征,最后存储所述人脸特征。整个人脸识别样本采集的过程不需要样本采集工作者手动操作,采集的速度快、效率高。
【专利说明】一种基于视频方式的人脸识别样本采集方法及系统
【技术领域】
[0001]本发明涉及人脸识别【技术领域】,特别涉及一种基于视频方式的人脸识别样本采集方法及系统。
【背景技术】
[0002]人脸识别不仅是人工智能领域的研宄热点,在公共安全领域,其研宄也有着重要的现实意义。人脸识别技术包括人脸图像样本采集、样本图像预处理、分类器训练和样本识别这几个技术环节,而样本采集工作是人脸识别的基石,其意义不言而喻。
[0003]人脸识别样本采集工作以往都是基于图像的方式。比如,先让志愿者依次有序的处于某个拍摄点;然后,样本采集工作者根据姿态、光照、表情等差异对志愿者进行多次拍摄;最后,样本采集工作者根据拍摄得到的图像进行筛选处理,建立人脸识别样本库。这种基于图像的方式虽然直观,但仍然存在三点不足:第一,让大量的志愿者依次有序的处于拍摄点进行多次拍照,这种做法十分耗时耗力;第二,人脸识别对人脸样本在分辨率上有严格的要求,因此,拍摄的图像能否达到识别标准,尚须要样本采集工作者一一查验;第三,样本整理是一个长期过程,样本采集工作者在整理时难免产生工作疲劳,因此,入库的人脸信息也存在错误的风险。
[0004]现有技术中也有一些人脸识别样本采集工作是基于视频方式的。比如,用监控摄像机在某一定点拍摄视频,样本采集工作者在后台截取视频中含有人脸的图像帧,然后对含有人脸的图像帧根据姿态、光照、表情等进行识别,将符合的图像帧放入人脸识别样本库。这种基于视频方式的样本采集技术,不需要志愿者依次有序的处于拍摄点进行多次拍摄,但是还是需要样本采集工作者手动选取含有人脸的图像帧,并人工查验该图像帧是否达到识别标准,再进行样本整理。整个过程费时费力,效率低。
【发明内容】
[0005]为此,本发明所要解决的技术问题在于现有技术中基于视频的人脸识别样本采集方法速度慢、耗时长且效率低,从而提出一种基于视频方式的人脸识别样本采集方法及系统。
[0006]为解决上述技术问题,本发明提供如下技术方案:
[0007]一种基于视频方式的人脸识别样本采集方法,包括如下步骤:
[0008]获取视频的图像帧中具有运动信息的图像区域;
[0009]检测所述图像区域以获取人脸像素区域;
[0010]对含有人脸的图像帧中人脸像素区域进行跟踪,获取同一人脸的历史图像帧;
[0011]对质量高的同一人脸的历史图像帧进行人脸特征提取,获取人脸识别所需的人脸特征;
[0012]存储所述人脸特征。
[0013]上述基于视频方式的人脸识别样本采集方法,所述获取视频的图像帧中具有运动信息的图像区域步骤包括:
[0014]利用所述视频中的初始图像帧建立背景模型;
[0015]对当前图像帧建立前景模型;
[0016]计算所述背景模型和所述前景模型的差异;
[0017]获取在前景模型和背景模型之间的差异大于预设阈值的像素区域,作为具有运动信息的图像区域。
[0018]上述基于视频方式的人脸识别样本采集方法,所述检测所述图像区域以获取人脸像素区域步骤包括:
[0019]对当前图像帧建立图像金字塔;
[0020]载入离线训练的各姿态人脸模型;
[0021]计算各层图像金字塔上的特征;
[0022]计算所述特征在离线训练的各姿态人脸模型上的响应值;
[0023]获取最大响应值达到人脸检测阈值的图像帧,提取当前图像帧中人脸像素区域及人脸的姿态信息。
[0024]上述基于视频方式的人脸识别样本采集方法,所述对所述含有人脸的图像帧中人脸像素区域进行跟踪步骤包括:
[0025]建立人脸跟踪模型和人脸轨迹初始节点;
[0026]计算当前图像帧中人脸像素区域的纹理特征和边缘特征在人脸跟踪模型上的响应;
[0027]将当前图像帧中最大响应所对应的人脸像素区域坐标加入人脸轨迹的尾部节占.V,
[0028]若当前图像帧的人脸像素区域到达图像帧的边界时,结束跟踪,获取从人脸轨迹初始节点到人脸轨迹尾部节点的同一人脸的历史图像帧。
[0029]上述基于视频方式的人脸识别样本采集方法,所述对质量高的同一人脸的历史图像帧进行人脸特征提取步骤包括:
[0030]对质量高的图像帧进行光照预处理;
[0031]计算经光照预处理后的图像帧中人脸像素区域的人脸特征;
[0032]对所述人脸特征进行主要成分分析和独立成分分析;
[0033]获取人脸识别所需的人脸特征。
[0034]上述基于视频方式的人脸识别样本采集方法,所述存储所述人脸特征步骤包括:
[0035]将所述人脸特征与人脸样本库中的各个人脸特征进行比对;
[0036]若所述人脸特征与人脸样本库中某一个人脸特征相近,则将所述人脸特征及对应的人脸像素区域存储到相近的该人脸特征样本信息样本库中;
[0037]若所述人脸特征与人脸样本库中各个人脸特征差异较大,则新建一个人脸特征信息样本库存储所述人脸特征及对应的人脸像素区域。
[0038]一种基于视频方式的人脸识别样本采集系统,包括:
[0039]图像区域获取模块,用于获取视频的图像帧中具有运动信息的图像区域;
[0040]人脸检测模块,用于检测所述图像区域以获取人脸像素区域;
[0041]人脸跟踪模块,用于对含有人脸的图像帧中人脸像素区域进行跟踪,获取同一人脸的历史图像帧;
[0042]人脸特征获取模块,用于对质量高的同一人脸的历史图像帧进行人脸特征提取,获取人脸识别所需的人脸特征;
[0043]人脸特征存储模块,用于存储所述人脸特征。
[0044]上述基于视频方式的人脸识别样本采集系统,所述图像区域获取模块包括:
[0045]背景模型建立子模块,用于利用所述视频中的初始图像帧建立背景模型;
[0046]前景模型建立子模块,用于对当前图像帧建立前景模型;
[0047]差异计算子模块,用于计算所述背景模型和所述前景模型的差异;
[0048]图像区域获取子模块,用于获取在前景模型和背景模型之间的差异大于预设阈值的像素区域,作为具有运动信息的图像区域。
[0049]上述基于视频方式的人脸识别样本采集系统,所述人脸检测模块中:
[0050]图像金字塔建立子模块,用于对当前图像帧建立图像金字塔;
[0051]离线模型载入子模块,用于载入离线训练的各姿态人脸模型;
[0052]特征计算子模块,用于计算各层图像金字塔上的特征;
[0053]响应值计算子模块,用于计算所述特征在离线训练的各姿态人脸模型上的响应值;
[0054]人脸像素区域获取子模块,用于获取最大响应值达到人脸检测阈值的图像帧,提取当前图像帧中人脸像素区域及人脸的姿态信息。
[0055]上述基于视频方式的人脸识别样本采集系统,所述人脸跟踪模块包括:
[0056]人脸跟踪模型建立子模块,用于建立人脸跟踪模型和人脸轨迹初始节点;
[0057]特征响应计算子模块,用于计算当前图像帧中人脸像素区域的纹理特征和边缘特征在人脸跟踪模型上的响应;
[0058]最大响应处理子模块,用于将当前图像帧中最大响应所对应的人脸像素区域坐标加入人脸轨迹的尾部节点;
[0059]同一人脸的历史图像帧获取子模块,用于在当前图像帧的人脸像素区域到达图像帧的边界时,结束跟踪,获取从人脸轨迹初始节点到人脸轨迹尾部节点的同一人脸的历史图像帧。
[0060]上述基于视频方式的人脸识别样本采集系统,所述人脸特征获取模块包括:
[0061]预处理子模块,用于对质量高的图像帧进行光照预处理;
[0062]人脸特征计算子模块,用于计算经光照预处理后的图像帧中人脸像素区域的人脸特征;
[0063]人脸分析子模块,用于对所述人脸特征进行主要成分分析和独立成分分析;
[0064]人脸特征获取子模块,用于获取人脸识别所需的人脸特征。
[0065]上述基于视频方式的人脸识别样本采集系统,所述人脸特征存储模块包括:
[0066]人脸特征比对子模块,用于将人脸特征获取模块中所述人脸特征与人脸样本库中的各个人脸特征进行比对;
[0067]人脸特征存储子模块,用于若所述人脸特征与人脸样本库中某一个人脸特征相近,则将所述人脸特征及对应的人脸像素区域存储到相近的该人脸特征样本信息样本库中;若所述人脸特征与人脸样本库中各个人脸特征差异较大,则新建一个人脸特征信息样本库存储所述人脸特征及对应的人脸像素区域。
[0068]本发明的上述技术方案相比现有技术具有以下优点:
[0069](I)本发明所述的一种基于视频方式的人脸识别样本采集方法及系统,首先获取视频的图像帧中具有运动信息的图像区域,然后检测所述图像区域以获取人脸像素区域,接着对含有人脸的图像帧中人脸像素区域进行跟踪,获取同一人脸的历史图像帧,再对质量高的同一人脸的历史图像帧进行人脸特征提取,获取人脸识别所需的人脸特征,最后存储所述人脸特征。整个人脸识别样本采集的过程不需要样本采集工作者手动操作,采集的速度快、效率高。
【专利附图】
【附图说明】
[0070]为了使本发明的内容更容易被清楚的理解,下面根据本发明的具体实施例并结合附图,对本发明作进一步详细的说明,其中
[0071]图1是本发明一个实施例的一种基于视频方式的人脸识别样本采集方法流程图;
[0072]图2是本发明一个实施例的一种获取具有运动信息的图像区域的方法流程图;
[0073]图3是本发明一个实施例的一种人脸检测的方法流程图;
[0074]图4是本发明一个实施例的一种人脸跟踪的方法流程图;
[0075]图5是本发明一个实施例的一种人脸特征获取的方法流程图;
[0076]图6是本发明的一个实施例的一种人脸识别样本采集信息网络拓扑结构图;
[0077]图7是本发明一个实施例的一种人脸识别样本采集方法流程图;
[0078]图8是本发明一个实施例的一种基于视频方式的人脸识别样本采集系统框图。
[0079]图中附图标记表示为:1_普通采集前端、2-智能采集前端、3-前端处理器、4-第一服务器、5-第二服务器、6-第一客户端、7-第二客户端。
【具体实施方式】
[0080]实施例1
[0081]本实施例提供一种基于视频方式的人脸识别样本采集方法,如图1所示,包括如下步骤:
[0082]S1:获取视频的图像帧中具有运动信息的图像区域,如图2所示,包括:
[0083]先利用视频的初始图像帧建立每个像素或像素区域的背景模型,初始图像帧可以选取第I帧或者前3帧。
[0084]对当前图像帧中每个像素或像素区域建立前景模型。
[0085]计算每个像素或像素区域的背景模型与前景模型之间的差异。
[0086]确定一个预设阈值20*20像素,如果产生所述差异的像素区域的连通区域小于所述预设阈值,说明当前帧图像未产生运动信息,不可能存在人脸,删除不可能产生人脸的图像帧,更新背景模型,如果产生所述差异的像素区域的连通区域大于等于所述预设阈值,说明当前帧图像产生运动信息,可能存在人脸,保留当前帧并获取所述像素区域作为具有运动信息的图像区域。
[0087]S2:检测所述图像区域以获取人脸像素区域,如图3所示,包括:
[0088]对当前帧图像建立图像金字塔,对步骤SI中获取的具有运动信息的图像区域进行缩放并生成图像金字塔。
[0089]载入离线训练的各姿态人脸模型,所述多姿态人脸模型中用于人脸检测的人脸像素区域为20*20像素。所述离线训练的各姿态人脸模型是预先离线训练好的,在本方法中只要载入就可以使用。各姿态人脸模型的离线训练过程为:首先将采集的含有真实人脸的图像存储至人脸正样本库;采集的不含有人脸的图像存储至人脸负样本库;通过样本采集工作者人工标定,确定出正样本库中人脸在采集图像中的精确坐标和姿态朝向;根据人脸坐标信息从采集图像中提取背景干扰较少的人脸像素区域,并计算所述像素区域的特征,所述特征为Haar特征;对所述特征进行整合,获得离线训练的各姿态人脸模型。
[0090]计算各层图像金字塔上的特征,所述特征为Haar特征。
[0091]计算所述特征在离线训练的各姿态人脸模型上的响应值,通过将各层图像金字塔上的特征在离线训练的各姿态人脸模型上进行滤波操作从而得到响应值。
[0092]综合分析所述响应值,获取最大响应值,若最大响应值小于人脸检测阈值,则输出非人脸标识,删除当前图像帧;若最大响应值大于等于人脸检测阈值,则输出人脸标识,提取当前图像帧中人脸像素区域及人脸的姿态信息。
[0093]S3:对含有人脸的图像帧中人脸像素区域进行跟踪,获取同一人脸的历史图像帧,如图4所示,包括:
[0094]建立人脸跟踪模型和人脸轨迹初始节点,先判断在步骤S2中获取的当前图像帧中人脸像素区域是否已经有人脸跟踪模型:如果没有,则计算人脸区域的纹理和边缘特征并形成人脸跟踪模型,并将人脸像素区域坐标加入人脸轨迹初始节点,所述人脸跟踪模型可以由一族Haar滤波器组成;若果有,则继续下一步骤。
[0095]计算当前图像帧中人脸像素区域的纹理特征和边缘特征在人脸跟踪模型上的响应;
[0096]将当前图像帧中最大响应所对应的人脸像素区域坐标加入人脸轨迹的尾部节占.V,
[0097]若当前图像帧的人脸像素区域已到达图像帧的边界,结束跟踪,获取从人脸轨迹初始节点到人脸轨迹尾部节点的同一人脸的历史图像帧;否则,返回到所述建立人脸跟踪模型和人脸轨迹初始节点步骤。
[0098]S4:对质量高的同一人脸的历史图像帧进行人脸特征提取,获取人脸识别所需的人脸特征,如图5所示,包括:
[0099]对质量高的图像帧进行光照预处理。所述质量高的图像帧的获取方法为对步骤S3中获取的同一人脸的历史图像帧进行人脸评价处理:根据人脸的分辨率、人脸姿态、清晰度和对称性对同一人脸的历史图像帧中的每一图像帧的人脸像素区域进行综合评价给出质量评分,根据所述质量评分同一人脸的历史图像帧中的每一图像帧进行排序,获取所述质量评分达到设定阈值的图像帧作为质量高的图像帧。对质量高的图像帧进行光照预处理之后将人脸像素区域缩放到限制的人脸分辨率,一般选取96*96像素。
[0100]计算经光照预处理后的图像帧中人脸像素区域的人脸特征。设定5个尺度8个方向的40个Gabor核,通过所述Gabor核对经光照处理后的图像帧中人脸像素区域做卷积,再进行分块处理获得人脸特征。
[0101]对所述人脸特征进行主要成分分析和独立成分分析。通过主要成分分析降低所述人脸特征之间的线性冗余度,通过独立成分分析提升所述人脸特征之间的区分度,实现对所述人脸特征的降维。
[0102]获取人脸识别所需的人脸特征。
[0103]S5:存储所述人脸特征,包括:
[0104]将步骤S4中获取的所述人脸特征与人脸样本库中的各个人脸特征进行比对,在比对时可以采用欧式距离进行比对。
[0105]若所述人脸特征与人脸样本库中某一个人脸特征相近,则将所述人脸特征及对应的人脸像素区域存储到相近的该人脸特征样本信息样本库中;
[0106]若所述人脸特征与人脸样本库中各个人脸特征差异较大,则新建一个人脸特征信息样本库存储所述人脸特征及对应的人脸像素区域。
[0107]在步骤SI之前,还包括步骤:
[0108]SO:获取拍摄的视频。根据摄像机的内外参数和人脸识别所需要的最小人脸成像分辨率确定摄像机架设点与拍摄工作点,再获取摄像机拍摄的视频。最小人脸成像分辨率可以限制人脸识别的人脸两眼瞳距不低于50*50像素,或者是人脸识别的人脸像素区域不低于96*96像素,在本实施例中选取人脸像素区域不低于96*96像素。一般的,摄像机架设离地面高度为2.5-4米,监控宽度为3米左右,相机俯仰角为15度以内,镜头的焦距为25-50mmo
[0109]本实施例所述的一种基于视频方式的人脸识别样本采集方法,首先获取视频的图像帧中具有运动信息的图像区域,然后检测所述图像区域以获取人脸像素区域,接着对含有人脸的图像帧中人脸像素区域进行跟踪,获取同一人脸的历史图像帧,再对质量高的同一人脸的历史图像帧进行人脸特征提取,获取人脸识别所需的人脸特征,最后存储所述人脸特征。整个人脸识别样本采集的过程不需要样本采集工作者手动操作,采集的速度快、效率高。
[0110]实施例2
[0111]本实施例提供一种基于视频方式的人脸识别样本采集方法。人脸识别样本采集信息网络拓扑图如图6所示,按照功能主要有采集前端、后端服务器和客户管理端三个部分。采集前端有普通采集前端I和智能采集前端2两种形式,前端处理器3输出前端视频文件,普通采集前端I输出编码后的视频图像,智能采集前端2的输出包括智能前端所提取的部分人脸信息,具体指经过浓缩的视频帧、人脸抓拍区域图像或人脸特征数据等形式的信息。后端服务器包括第一服务器4和第二服务器5,第一服务器4将前端采集的视频进行人脸特征提取,然后与人脸样本数据库中的人脸进行特征比对,第二服务器5用于根据比对结果对样本数据库进行扩容操作。客户管理端包括第一客户端6和第二客户端7等,主要用于人工对人脸识别样本数据库进行增、删、改、查等操作。
[0112]人脸识别对采集的人脸图像在分辨率上有严格的要求,因此需要根据人脸识别设计者先确定算法所能适应的最小人脸图像分辨率,接着样本工作者根据摄像机内外参数估算出人脸成像分辨率,最后选择合适的相机架设点与拍摄工作点。由于一般人脸识别算法要求人脸区域的成像分辨率为96*96,本实施例中,采用百万级高清摄像机。相机离监控区域中央的距离U (米)可根据摄像机的焦距f (毫米)、监控宽度W (米)及Sensor靶面尺寸a(毫米)估算出来:经验公式为U近似等于f*W/a。一般的,摄像机架设离地面高度为2.5-4米,监控宽度为3米左右,相机俯仰角为15度以内,镜头的焦距为25-50mm。如果存在逆光、偏光时,需要相机支持低照度和宽动态等功能。如果用于夜晚场景,需要支持自动光圈。
[0113]人脸识别样本采集方法流程图如图7所示:
[0114]首先,确定人脸识别所需的最小人脸分辨率限制,比如要求供人脸识别的人脸两眼瞳距距离不低于50*50像素,或要求人脸识别的人脸在像素上不低于96*96像素。
[0115]接着,向人脸样本自动采集系统载入离线训练的多姿态人脸检测模型,比如20*20像素;以及某个固定分辨率上的人脸特征提取模型,比如96*96像素。
[0116]然后,打开人脸样本自动采集系统,并对视频中的每一帧进行分析处理。处理过程包括如下步骤:
[0117]Tl:视频浓缩处理,先利用视频的初始帧建立每个像素或像素区域的背景模型,初始帧可以选取第I帧或前3帧。背景模型建立完毕后,计算每个像素或像素区域的前景模型,如果发现每个像素或像素区域的前景与背景模型之间差异较大,则为该像素或像素区域赋予前景标识。如果含有前景标识的像素或像素区域具备一定规模,例如含有前景标识的连通区域超过20*20像素,则输出运动信息标识,否则,则输出无运动信息标识,并对无运动信息标志的像素或像素区域的背景模型进行更新。
[0118]T2:人脸检测处理,首先对视频浓缩模块输出的图像帧或含有运动信息的区域图像帧进行缩放并生成图像金字塔;然后,将各层金字塔图像与离线训练的多姿态人脸模型上做滤波操作从而得到响应图像,比如,离线训练的多姿态人脸模型是一族Haar滤波器,则让各层金字塔通过这一族Haar滤波器;最后,综合分析这些滤波响应,确定出该运动标识的区域是否为人脸以及人脸的具体姿态。
[0119]T3:人脸跟踪处理,人脸跟踪主要用于生成人脸运动轨迹。首先在人脸检测模块输出的人脸像素区域上建立人脸跟踪模型和人脸轨迹初始节点,人脸跟踪模型由一族Haar滤波器等组成,然后,当图像分析周期到来时,在上一帧人脸像素区域周围生成局部图像,让这个局部图像通过人脸跟踪模型,接着,根据局部图像在模型上的响应,将最大响应所对应的坐标加入到人脸轨迹的节点尾部。
[0120]T4:人脸评价处理,当某人脸的运动轨迹达到图像边界时,利用视频缓冲池中缓冲的图像信息和人脸历史轨迹信息,获得该人脸的历史图像帧,并考察历史人脸的分辨率、姿态、清晰度及对称性,给出历史人脸图像帧的质量评分。对该质量评分进行排序,并输出那些评分达到人脸识别要求所对应的历史人脸图像帧。
[0121]T5:人脸特征提取处理,首先对历史人脸图像帧进行光照预处理并将人脸图像帧缩放到人脸特征模型所限制的人脸分辨率,比如96*96像素;然后,设定40个Gabor核,如5个尺度、8个方向,用这些Gabor核对图像做卷积,再分块获得人脸的特征;接着通过主要成分分析降低特征之间的线性冗余度;再通过独立成分分析提升特征之间的区分度;最终,获得人脸识别所需的人脸特征。
[0122]T6:人脸比对与入库模块,将历史人脸图像帧的人脸特征与人脸样本库中各个人脸特征进行比对,如欧式距离等,如果某个样本的特征与采集的人脸特征“距离”较近,则采集的人脸及其特征追加到样本库中存放该人脸的信息区域,否则,则在人脸样本库中为采集的人脸及特征新建一个信息存放区域。
[0123]本实施例提供的一种基于视频方式的人脸识别样本采集方法,在完成人脸识别样本自动采集过程中,志愿者只需经过监控点位,而且样本采集工作者只需保证网络正常且拍摄点位的正常供电,这样对样本采集工作者而言,既省时也省力;由于相机固定场景架设是根据人脸识别算法设计的,而且在采集过程中,摄像机内外参数不变,所以拍摄的人脸在分辨率上是符合人脸识别要求的;能自动从视频中定位出人脸,也能选择出合适人脸识别的人脸,还能够根据人脸识别的结果对原有人脸识别样本库进行自动扩容,所以,最大限度的减少了人脸样本库管理人员的信息录入。
[0124]实施例3
[0125]本实施例提供一种基于视频方式的人脸识别样本采集系统,如图8所示,包括:
[0126]图像区域获取模块,用于获取视频的图像帧中具有运动信息的图像区域;
[0127]人脸检测模块,用于检测所述图像区域以获取人脸像素区域;
[0128]人脸跟踪模块,用于对含有人脸的图像帧中人脸像素区域进行跟踪,获取同一人脸的历史图像帧;
[0129]人脸特征获取模块,用于对质量高的同一人脸的历史图像帧进行人脸特征提取,获取人脸识别所需的人脸特征;
[0130]人脸特征存储模块,用于存储所述人脸特征。
[0131]所述图像区域获取模块包括:
[0132]背景模型建立子模块,用于利用所述视频中的初始图像帧建立背景模型;
[0133]前景模型建立子模块,用于对当前图像帧建立前景模型;
[0134]差异计算子模块,用于计算所述背景模型和所述前景模型的差异;
[0135]图像区域获取子模块,用于获取在前景模型和背景模型之间的差异大于预设阈值的像素区域,作为具有运动信息的图像区域。
[0136]所述人脸检测模块中:
[0137]图像金字塔建立子模块,用于对当前图像帧建立图像金字塔;
[0138]离线模型载入子模块,用于载入离线训练的各姿态人脸模型;
[0139]特征计算子模块,用于计算各层图像金字塔上的特征;
[0140]响应值计算子模块,用于计算所述特征在离线训练的各姿态人脸模型上的响应值;
[0141]人脸像素区域获取子模块,用于获取最大响应值达到人脸检测阈值的图像帧,提取当前图像帧中人脸像素区域及人脸的姿态信息。
[0142]所述人脸跟踪模块包括:
[0143]人脸跟踪模型建立子模块,用于建立人脸跟踪模型和人脸轨迹初始节点;
[0144]特征响应计算子模块,用于计算当前图像帧中人脸像素区域的纹理特征和边缘特征在人脸跟踪模型上的响应;
[0145]最大响应处理子模块,用于将当前图像帧中最大响应所对应的人脸像素区域坐标加入人脸轨迹的尾部节点;
[0146]同一人脸的历史图像帧获取子模块,用于在当前图像帧的人脸像素区域到达图像帧的边界时,结束跟踪,获取从人脸轨迹初始节点到人脸轨迹尾部节点的同一人脸的历史图像帧。
[0147]所述人脸特征获取模块包括:
[0148]预处理子模块,用于对质量高的图像帧进行光照预处理;
[0149]人脸特征计算子模块,用于计算经光照预处理后的图像帧中人脸像素区域的人脸特征;
[0150]人脸分析子模块,用于对所述人脸特征进行主要成分分析和独立成分分析;
[0151]人脸特征获取子模块,用于获取人脸识别所需的人脸特征。
[0152]所述人脸特征存储模块包括:
[0153]人脸特征比对子模块,用于将人脸特征获取模块中所述人脸特征与人脸样本库中的各个人脸特征进行比对;
[0154]人脸特征存储子模块,用于若所述人脸特征与人脸样本库中某一个人脸特征相近,则将所述人脸特征及对应的人脸像素区域存储到相近的该人脸特征样本信息样本库中;若所述人脸特征与人脸样本库中各个人脸特征差异较大,则新建一个人脸特征信息样本库存储所述人脸特征及对应的人脸像素区域。
[0155]本实施例所述的一种基于视频方式的人脸识别样本采集系统,首先获取视频的图像帧中具有运动信息的图像区域,然后检测所述图像区域以获取人脸像素区域,接着对含有人脸的图像帧中人脸像素区域进行跟踪,获取同一人脸的历史图像帧,再对质量高的同一人脸的历史图像帧进行人脸特征提取,获取人脸识别所需的人脸特征,最后存储所述人脸特征。整个人脸识别样本采集的过程不需要样本采集工作者手动操作,采集的速度快、效率高。
[0156]本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
[0157]本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的
[0158]这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0159]这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0160]尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
【权利要求】
1.一种基于视频方式的人脸识别样本采集方法,其特征在于,包括如下步骤:
获取视频的图像帧中具有运动信息的图像区域;
检测所述图像区域以获取人脸像素区域;
对含有人脸的图像帧中人脸像素区域进行跟踪,获取同一人脸的历史图像帧;
对质量高的同一人脸的历史图像帧进行人脸特征提取,获取人脸识别所需的人脸特征;
存储所述人脸特征。
2.根据权利要求1所述的基于视频方式的人脸识别样本采集方法,其特征在于,所述获取视频的图像帧中具有运动信息的图像区域步骤包括:
利用所述视频中的初始图像帧建立背景模型;
对当前图像帧建立前景模型;
计算所述背景模型和所述前景模型的差异;
获取在前景模型和背景模型之间的差异大于预设阈值的像素区域,作为具有运动信息的图像区域。
3.根据权利要求1或2所述的基于视频方式的人脸识别样本采集方法,其特征在于,所述检测所述图像区域以获取人脸像素区域步骤包括:
对当前图像帧建立图像金字塔;
载入离线训练的各姿态人脸模型;
计算各层图像金字塔上的特征;
计算所述特征在离线训练的各姿态人脸模型上的响应值;
获取最大响应值达到人脸检测阈值的图像帧,提取当前图像帧中人脸像素区域及人脸的姿态信息。
4.根据权利要求1-3任一所述的基于视频方式的人脸识别样本采集方法,其特征在于,所述对所述含有人脸的图像帧中人脸像素区域进行跟踪步骤包括:
建立人脸跟踪模型和人脸轨迹初始节点;
计算当前图像帧中人脸像素区域的纹理特征和边缘特征在人脸跟踪模型上的响应;
将当前图像帧中最大响应所对应的人脸像素区域坐标加入人脸轨迹的尾部节点;
若当前图像帧的人脸像素区域到达图像帧的边界时,结束跟踪,获取从人脸轨迹初始节点到人脸轨迹尾部节点的同一人脸的历史图像帧。
5.根据权利要求1-4任一所述的基于视频方式的人脸识别样本采集方法,其特征在于,所述对质量高的同一人脸的历史图像帧进行人脸特征提取步骤包括:
对质量高的图像帧进行光照预处理;
计算经光照预处理后的图像帧中人脸像素区域的人脸特征;
对所述人脸特征进行主要成分分析和独立成分分析;
获取人脸识别所需的人脸特征。
6.根据权利要求1-5任一所述的基于视频方式的人脸识别样本采集方法,其特征在于,所述存储所述人脸特征步骤包括:
将所述人脸特征与人脸样本库中的各个人脸特征进行比对;
若所述人脸特征与人脸样本库中某一个人脸特征相近,则将所述人脸特征及对应的人脸像素区域存储到相近的该人脸特征样本信息样本库中;
若所述人脸特征与人脸样本库中各个人脸特征差异较大,则新建一个人脸特征信息样本库存储所述人脸特征及对应的人脸像素区域。
7.一种基于视频方式的人脸识别样本采集系统,其特征在于,包括:
图像区域获取模块,用于获取视频的图像帧中具有运动信息的图像区域;
人脸检测模块,用于检测所述图像区域以获取人脸像素区域;
人脸跟踪模块,用于对含有人脸的图像帧中人脸像素区域进行跟踪,获取同一人脸的历史图像帧;
人脸特征获取模块,用于对质量高的同一人脸的历史图像帧进行人脸特征提取,获取人脸识别所需的人脸特征;
人脸特征存储模块,用于存储所述人脸特征。
8.根据权利要求7所述的基于视频方式的人脸识别样本采集系统,其特征在于,所述图像区域获取模块包括:
背景模型建立子模块,用于利用所述视频中的初始图像帧建立背景模型;
前景模型建立子模块,用于对当前图像帧建立前景模型;
差异计算子模块,用于计算所述背景模型和所述前景模型的差异;
图像区域获取子模块,用于获取在前景模型和背景模型之间的差异大于预设阈值的像素区域,作为具有运动信息的图像区域。
9.根据权利要求7或8所述的基于视频方式的人脸识别样本采集系统,其特征在于,所述人脸检测模块中:
图像金字塔建立子模块,用于对当前图像帧建立图像金字塔;
离线模型载入子模块,用于载入离线训练的各姿态人脸模型;
特征计算子模块,用于计算各层图像金字塔上的特征;
响应值计算子模块,用于计算所述特征在离线训练的各姿态人脸模型上的响应值;人脸像素区域获取子模块,用于获取最大响应值达到人脸检测阈值的图像帧,提取当前图像帧中人脸像素区域及人脸的姿态信息。
10.根据权利要求7-9任一所述的基于视频方式的人脸识别样本采集系统,其特征在于,所述人脸跟踪模块包括:
人脸跟踪模型建立子模块,用于建立人脸跟踪模型和人脸轨迹初始节点;
特征响应计算子模块,用于计算当前图像帧中人脸像素区域的纹理特征和边缘特征在人脸跟踪模型上的响应;
最大响应处理子模块,用于将当前图像帧中最大响应所对应的人脸像素区域坐标加入人脸轨迹的尾部节点;
同一人脸的历史图像帧获取子模块,用于在当前图像帧的人脸像素区域到达图像帧的边界时,结束跟踪,获取从人脸轨迹初始节点到人脸轨迹尾部节点的同一人脸的历史图像帧。
11.根据权利要求7-10任一所述的基于视频方式的人脸识别样本采集系统,其特征在于,所述人脸特征获取模块包括:
预处理子模块,用于对质量高的图像帧进行光照预处理; 人脸特征计算子模块,用于计算经光照预处理后的图像帧中人脸像素区域的人脸特征;
人脸分析子模块,用于对所述人脸特征进行主要成分分析和独立成分分析;
人脸特征获取子模块,用于获取人脸识别所需的人脸特征。
12.根据权利要求7-11任一所述的基于视频方式的人脸识别样本采集系统,其特征在于,所述人脸特征存储模块包括:
人脸特征比对子模块,用于将人脸特征获取模块中所述人脸特征与人脸样本库中的各个人脸特征进行比对;
人脸特征存储子模块,用于若所述人脸特征与人脸样本库中某一个人脸特征相近,则将所述人脸特征及对应的人脸像素区域存储到相近的该人脸特征样本信息样本库中;若所述人脸特征与人脸样本库中各个人脸特征差异较大,则新建一个人脸特征信息样本库存储所述人脸特征及对应的人脸像素区域。
【文档编号】G06K9/20GKSQ
【公开日】日
申请日期:日
优先权日:日
【发明者】鄢展鹏, 姜莎, 张泉, 张震国, 晋兆龙, 陈卫东
申请人:苏州科达科技股份有限公司

我要回帖

 

随机推荐