人脸特征点定位方法和装置
技术领域
本发明涉及信息技术领域,尤其涉及一种人脸特征点定位方法和装置。
背景技术
人脸识别在安全、娱乐等方面有着广泛应用。人脸识别的结果受到人脸特征点定位准确性的影响。人脸特征点定位的过程中会遇到外部因素和人脸因素的干扰,外部因素例如光照不均、背景复杂等,人脸因素例如头发、胡子、眼镜、表情等。
现有技术中,可以利用基于fern结构的特征点定位方法。该方法构造了若干个串联的fern结构,每个fern结构是一个满二叉树,在训练过程中,对每个fern结构依次进行训练。在对每个fern结构进行训练时会采用特征点对,现有技术中,特征点对是根据像素值与偏移量之间的关系确定的。
但是,这种方式的定位效果不够理想。
发明内容
本发明旨在至少在一定程度上解决相关技术中的技术问题之一。
为此,本发明的一个目的在于提出一种人脸特征点定位方法,该方法可以提高人脸特征点定位效果。
本发明的另一个目的在于提出一种人脸特征点定位装置。
为达到上述目的,本发明第一方面实施例提出的人脸特征点定位方法,包括:接收人脸图片;获取所述人脸图片中人脸特征点的初始值;根据预先建立的训练模型,确定所述人脸特征点的特征点对和阈值,并根据所述特征点对和阈值确定所述人脸图片在所述训练模型中对应的节点,并获取所述节点的节点值,其中,所述特征点对和阈值使得对应同一个节点的不同人脸图片具有相同的位置关系;根据所述初始值和所述节点值,确定所述人脸特征点的定位结果。
本发明第一方面实施例提出的人脸特征点定位方法中,所述特征点对和阈值使得对应同一个节点的不同人脸图片具有相同的位置关系,可以在训练时将具有相同位置关系的训练样本最终归入同一个节点中,从而该节点的节点值是由具有相同位置关系的训练样本得到的,从而可以提高定位效果。
为达到上述目的,本发明第二方面实施例提出的人脸特征点定位装置,包括:接收模块,用于接收人脸图片;获取模块,用于获取所述人脸图片中人脸特征点的初始值;处理模块,用于根据预先建立的训练模型,确定所述人脸特征点的特征点对和阈值,并根据所述特征点对和阈值确定所述人脸图片在所述训练模型中对应的节点,并获取所述节点的节点值,其中,所述特征点对和阈值使得对应同一个节点的不同人脸图片具有相同的位置关系;确定模块,用于根据所述初始值和所述节点值,确定所述人脸特征点的定位结果。
本发明第二方面实施例提出的人脸特征点定位装置中,所述特征点对和阈值使得对应同一个节点的不同人脸图片具有相同的位置关系,可以在训练时将具有相同位置关系的训练样本最终归入同一个节点中,从而该节点的节点值是由具有相同位置关系的训练样本得到的,从而可以提高定位效果。
本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
图1是本发明一实施例提出的人脸特征点定位方法的流程示意图;
图2是本发明实施例中定位出人脸特征点的流程示意图;
图3是本发明实施例中fern结构示意图;
图4是本发明实施例中需要定位的特征点示意图;
图5是本发明实施例中建立训练模块流程示意图;
图6是本发明另一实施例提出的人脸特征点定位方法的流程示意图;
图7是本发明实施例中选取特征点对方法示意图;
图8是本发明另一实施例提出的人脸特征点定位方法的流程示意图;
图9是本发明实施例中对训练样本进行划分的结果示意图;
图10是本发明另一实施例提出的人脸特征点定位装置的结构示意图;
图11是本发明另一实施例提出的人脸特征点定位装置的结构示意图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。相反,本发明的实施例包括落入所附加权利要求书的精神和内涵范围内的所有变化、修改和等同物。
图1是本发明一实施例提出的人脸特征点定位方法的流程示意图,该方法包括:
S11:接收人脸图片。
其中,接收的人脸图片是要进行人脸特征点定位的人脸图片。
S12:获取所述人脸图片中人脸特征点的初始值。
人脸特征点是指人脸的关键点,具体的关键点可以预先指定,例如,关键点包括:眼角、嘴角、鼻子等位置的点。
例如,参见图2,接收到人脸图片后,可以根据预设规则在人脸图片中确定出人脸框21,再根据人脸框定位出人脸特征点,如图2所示,人脸特征点用填充的黑点表示。
人脸特征点的初始值可以根据人脸框的位置以及预设规则进行初始化,例如将人脸框从左侧数第n个,且从上侧数第m个像素点的位置确定为左眼的初始值等。
S13:根据预先建立的训练模型,确定所述人脸特征点的特征点对和阈值,并根据所述特征点对和阈值确定所述人脸图片在所述训练模型中对应的节点,并获取所述节点的节点值,其中,所述特征点对和阈值使得对应同一个节点的不同人脸图片具有相同的位置关系。
本实施例是对现有的基于fern结构的人脸特征点定位方法的改进。
Face Alignment by Explicit Shape Regression论文提出了一种基于fern结构的特征点定位方法。该方法构造了若干个串联的fern结构,每个fern结构是一个满二叉树,在训练过程中,对每个fern结构依次进行训练。如:在训练一个fern(A)的时候,需要将所有的给定初始值的训练样本按照fern(A)各层节点的分类规则进行分类,直至每个训练样本进入fern(A)最后一层的某一个节点里,最后一层的节点称为二进制(bin)节点,最后统计每个bin里落入的训练样本定位特征点的偏移量,取平均值,即为这个bin的偏移量,从而完成了对fern(A)的更新。而后重新计算每个样本应该落在哪个bin里,将该bin的偏移量加到样本上,即完成了对样本的更新。之后,重复进行对下一个fern的训练,直至所有训练样本误差不再变化。
本实施例中,采用的训练模型包括fern结构,参见图3,fern结构是一个满二叉树,该满二叉树的最后一层的节点31称为二进制(bin)节点,除最后一层的bin节点外,其他层的节点32都是分类节点。
二叉树是指每个节点最多有两个子树的树结构,每个节点的左侧的子树称为“左子树”,每个节点的右侧的子树称为“右子树”。
一棵深度为k,且有2k-1个节点的二叉树称为满二叉树。深度是指二叉树包括的节点的层数,如图3所示,该二叉树的深度是5。
fern结构中,分类节点的层数与要定位的特征点的个数相同,例如,参见图4,要定位的特征点有四个,分别是左眼,右眼,左嘴角和右嘴角,则参见图3,fern结构的分类节点是四层,最后一层是bin节点。
基于fern结构的人脸特征点定位时,每个要定位的人脸图片最终要对应到一个bin节点,具体可以从该要定位的人脸图片中确定出特征点对和阈值,再根据特征点对和阈值确定该人脸图片在fern结构对应的bin节点。
在对应到bin节点后,可以获取该bin节点的节点值,bin节点的节点值可以在训练过程中确定。
可选的,可以预先建立人脸特征点与特征点对和阈值的对应关系,之后在获取到要定位的人脸图片的人脸特征点的初始值后,根据该对应关系,可以确定该要定位的人脸图片中人脸特征点的特征点对和阈值。
其中,人脸特征点与特征点对和阈值的对应关系也可以在训练过程中确定。
在训练过程中可以建立训练模型,参见图5,建立训练模块包括:
S51:根据人脸特征点的个数,建立满二叉树,所述满二叉树包括分类节点和二进制节点,且每层分类节点对应一个人脸特征点。
例如,参见图4,人脸特征点是4个时,可以建立如图3所示的满二叉树。
其中,满二叉树的最后一层节点称为二进制(bin)节点,除最后一层节点之外的其余各层节点称为分类节点。
S52:根据训练样本,进行特征提取,获取人脸特征点与特征点对和阈值之间的对应关系,并根据所述对应关系,确定所述分类节点对应的特征点对和阈值。
训练样本是预先收集的多个人脸图片。
对应每个训练样本可以进行特征提取,得到每个人脸特征点对应的特征点对和阈值,特征提取后可以将训练样本归入相应的bin节点中,并更新bin节点值,根据更新后的bin节点值可以得到训练样本的定位结果,根据训练样本的定位结果和真实值可以判断是否达到收敛条件,例如,定位结果与真实值的差值小于预设值表明达到收敛条件,在达到收敛条件时,将达到收敛条件时对应的训练样本确定出的人脸特征点与特征点对和阈值的对应关系确定为最终定位时采用的对应关系。
在得到人脸特征点与特征点对和阈值的对应关系时,在定位时,对应要定位的人脸图片,根据该对应关系就可以得到该人脸图片的特征点对应的特征点对和阈值,例如,在训练时得到右眼对应(i*,j*)和λ*,则在定位时可以确定右眼对应的特征点对和阈值是:(i*,j*)和λ*。
具体的,特征点对(i*,j*)的值可以是相对值,在训练时,对应人脸特征点确定出特征点对后,根据训练样本的真实值可以得到特征点对与真实值之间的相对值,训练时得到的人脸特征点对应的特征点对的值就可以用该相对值表示,而在定位时,根据该相对值以及人脸特征点的初始值,可以得到人脸特征点对应的特征点对的位置。
参见图6,所述根据训练样本,进行特征提取,获取人脸特征点与特征点对和阈值之间的对应关系,包括:
S61:获取所述训练样本中的人脸特征点的真实值和初始值。
其中,初始值可以采用预设规则的初始化方式确定。
真实值是指训练样本的人脸特征点的真实值,由于训练样本是已知的,真实值也是已知的。
S62:在所述人脸特征点中确定当前处理的人脸特征点,并对应所述当前处理的人脸特征点获取可供选择的参数,所述参数包括:特征点对,方向角度和阈值。
其中,通常人脸特征点是多个,在处理时可以依次对应每个人脸特征点进行处理。
假设当前处理的人脸特征点是右眼,其余人脸特征点的处理方式可以依此类推。
特征点对是指当前处理的人脸特征点周围预设范围内的任意两个像素点。例如,参见图7,当前处理的人脸特征点是右眼,可以以右眼的真实值为圆心,以预设的半径值r为半径画一个圆,在该圆内任意选择两个像素点作为一对特征点对。参见图7,以右眼为例,对应的特征点对用填充的黑点表示,分别是眉头和眼尾的点。可以理解的是,在具体选择时,可以选择预设数量的特征点对,而不是将所有可能的选择方式都选取,以降低运算复杂度。
方向角度是指穿过当前处理的人脸特征点的真实值位置的直线与预设直线之间的角度,例如,预设直线是水平方向的直线。具体如,参见图7,穿过右眼画出一条直线71,方向角度是该直线71与预设直线之间的角度。
阈值是预设的多个值。
从上述选择参数的过程中可以看出,特征点对,方向角度和阈值都存在多个值,在处理时,可以依次遍历每个值,从中选择出最优的值。
S63:在所述参数中,遍历每组特征点对,每个方向角度和每个阈值,根据当前遍历的特征点对,方向角度和阈值,以及当前处理的人脸特征点的真实值和初始值,得到当前遍历的特征点对的分数,并将分数最高时的特征点对和阈值确定为所述当前处理的人脸特征点对应的特征点对和阈值。
可选的,参见图8,所述根据当前遍历的特征点对,方向角度和阈值,以及当前处理的人脸特征点的真实值和初始值,得到当前遍历的特征点对的分数,包括:
S81:确定当前遍历的特征点对和阈值;
例如,当前遍历的特征点对表示为:i点和j点。
当前遍历的阈值表示为:λ。
S82:根据所述真实值和所述方向角度,确定当前直线,所述当前直线是经过所述真实值且角度是所述方向角度的直线。
例如,当前遍历的方向角度是θ,假设该直线用图7中的直线71表示。
S83:根据所述特征点对和阈值,以及所述初始值,对所述训练样本进行划分。
其中,可以将训练样本划分为第一样本和第二样本,例如,所述第一样本是特征取值小于或等于当前遍历的阈值的样本,第二样本是特征取值大于当前遍历的阈值的样本,特征取值是当前遍历的特征点对在样本上的颜色值的差值。可以理解的是,等于时也可以归为第二样本,例如,第一样本是特征取值小于当前遍历的阈值的样本,第二样本是特征区域大于或等于当前遍历的阈值的样本。本实施例以等于时归为第一样本为例。
以颜色值是灰度值为例,对应一个训练样本,可以找到i点和j点,并且可以确定i和j点之间的灰度值的差值,如果该差值小于或等于λ,则该训练样本是第一样本,反之,如果i和j点之间的灰度值的差值大于λ,则该训练样本是第二样本。
如图9所示,第一样本和第二样本用不同填充方式的圆点表示。
S84:根据所述当前直线和划分后的训练样本的个数,计算所述分数。
所述分数的计算公式为:
Score=C_left/S_left+C_right/S_right,
其中,Score是当前遍历的特征点对的分数,C_left是位于当前直线左侧的第一样本的个数,S_left是位于当前直线左侧的第一样本和第二样本的总数,C_right是位于当前直线右侧的第一样本的个数,S_right是位于当前直线右侧的第一样本和第二样本的总数。
例如,在图9所示的情况下,Score=8/11+3/15。
如图8所示的流程,可以得到当前遍历的特征点对,方向角度和阈值所对应的分数,依此类推,可以获取每个特征点对,方向角度和阈值对应的分数,之后,通过比较,可以得到分数最高时对应的特征点对,方向角度和阈值,也就是最优的特征点对,方向角度和阈值,假设分别表示为(i*,j*),θ*,λ*。
S64:建立所述人脸特征点与特征点对和阈值之间的对应关系。
如上所示,对应当前处理的人脸特征点,可以得到最优的特征点对,方向角度和阈值,由于后续定位时不需要方向角度,因此可以建立人脸特征点与特征点对和阈值之间的对应关系。
例如,当前处理的人脸特征点是右眼,对应的最优值包括:(i*,j*),λ*,则可以建立右眼与(i*,j*)和λ*的对应关系。
其他人脸特征点与特征点对和阈值之间的对应关系也可以依此原理得到,从而可以得到每个人脸特征点与特征点对和阈值之间的对应关系。
在建立人脸特征点与特征点对和阈值之间的对应关系后,由于分类节点与人脸特征点对应,也可以确定分类节点对应的特征点对和阈值,例如,fern结构的第一层节点对应右眼,则第一层节点对应的特征点对和阈值就是右眼对应的特征点对和阈值。
S53:根据所述分类节点以及所述分类节点对应的特征点对和阈值,将所述训练样本划分到所述二进制节点中,并根据二进制节点中训练样本的初始值得到所述二进制节点的节点值。
对应每个训练样本,获取每个分类节点对应的特征点对和阈值后,假设对应第一层节点,可以根据该第一层节点对应的特征点对选取该训练样本中的特征点对,例如,根据(i*,j*)的坐标值在训练样本中选择对应位置的特征点对。需要说明的是,(i*,j*)的坐标值可以是相对于预设的坐标圆点的绝对坐标值,也可以是相对于训练样本的人脸特征点的真实值的相对坐标值,或者,在人脸特征点定位时,相对于要定位的人脸图片中人脸特征点的初始值的相对坐标值。
在确定出训练样本的特征点对后,可以获取该特征点对之间的灰度差值,再与该分类节点对应的阈值比较大小,根据比较结果对训练样本进行分类,例如,灰度差值小于阈值时划分到左子树,灰度差值大于阈值时划分到右子树。
依此按照每层进行划分,可以将训练样本划分到最后一层的bin节点中。
通过上述流程可以将具有相同位置关系的训练样本落入同一个bin节点中,例如,第一个bin节点包括的训练样本是:右眼的初始值小于真实值,左眼的初始值小于真实值,左嘴角的初始值小于真实值,且右嘴角的初始值小于真实值,第二个bin节点包括的训练样本是:右眼的初始值大于真实值,左眼的初始值小于真实值,左嘴角的初始值小于真实值,且右嘴角的初始值小于真实值等。
假设第一个bin节点包括的训练样本包括A1,A2和A3,则可以根据A1,A2和A3的人脸特征点的初始值和真实值确定该第一个bin节点的节点值,例如,根据A1的人脸特征点的初始值和真实值可以得到第一差值,类似的,可以得到A2对应的第二差值,A3对应的第三差值,之后,可以对第一差值,第二差值和第三差值取均值,将该均值确定为第一个bin节点的节点值。
S14:根据所述初始值和所述节点值,确定所述人脸特征点的定位结果。
例如,对应一个人脸特征点,将该人脸特征点的初始值与该人脸图片对应的节点的节点值之和,确定为该人脸特征点的定位结果。
在具体实施时,本实施例可以采用C语言实现。
本实施例中,所述特征点对和阈值使得对应同一个节点的不同人脸图片具有相同的位置关系,可以在训练时将具有相同位置关系的训练样本最终归入同一个节点中,从而该节点的节点值是由具有相同位置关系的训练样本得到的,从而可以提高定位效果。
图10是本发明另一实施例提出的人脸特征点定位装置的结构示意图,该装置100包括接收模块101、获取模块102、处理模块103以及确定模块104。
接收模块101,用于接收人脸图片。
其中,接收的人脸图片是要进行人脸特征点定位的人脸图片。
获取模块102,用于获取所述人脸图片中人脸特征点的初始值。
人脸特征点是指人脸的关键点,具体的关键点可以预先指定,例如,关键点包括:眼角、嘴角、鼻子等位置的点。
例如,参见图2,接收到人脸图片后,可以根据预设规则在人脸图片中确定出人脸框21,再根据人脸框定位出人脸特征点,如图2所示,人脸特征点用填充的黑点表示。
人脸特征点的初始值可以根据人脸框的位置以及预设规则进行初始化,例如将人脸框从左侧数第n个,且从上侧数第m个像素点的位置确定为左眼的初始值等。
处理模块103,用于根据预先建立的训练模型,确定所述人脸特征点的特征点对和阈值,并根据所述特征点对和阈值确定所述人脸图片在所述训练模型中对应的节点,并获取所述节点的节点值,其中,所述特征点对和阈值使得对应同一个节点的不同人脸图片具有相同的位置关系。
本实施例是对现有的基于fern结构的人脸特征点定位方法的改进。
Face Alignment by Explicit Shape Regression论文提出了一种基于fern结构的特征点定位方法。该方法构造了若干个串联的fern结构,每个fern结构是一个满二叉树,在训练过程中,对每个fern结构依次进行训练。如:在训练一个fern(A)的时候,需要将所有的给定初始值的训练样本按照fern(A)各层节点的分类规则进行分类,直至每个训练样本进入fern(A)最后一层的某一个节点里,最后一层的节点称为二进制(bin)节点,最后统计每个bin里落入的训练样本定位特征点的偏移量,取平均值,即为这个bin的偏移量,从而完成了对fern(A)的更新。而后重新计算每个样本应该落在哪个bin里,将该bin的偏移量加到样本上,即完成了对样本的更新。之后,重复进行对下一个fern的训练,直至所有训练样本误差不再变化。
本实施例中,采用的训练模型包括fern结构,参见图3,fern结构是一个满二叉树,该满二叉树的最后一层的节点31称为二进制(bin)节点,除最后一层的bin节点外,其他层的节点32都是分类节点。
二叉树是指每个节点最多有两个子树的树结构,每个节点的左侧的子树称为“左子树”,每个节点的右侧的子树称为“右子树”。
一棵深度为k,且有2k-1个节点的二叉树称为满二叉树。深度是指二叉树包括的节点的层数,如图3所示,该二叉树的深度是5。
fern结构中,分类节点的层数与要定位的特征点的个数相同,例如,参见图4,要定位的特征点有四个,分别是左眼,右眼,左嘴角和右嘴角,则参见图3,fern结构的分类节点是四层,最后一层是bin节点。
基于fern结构的人脸特征点定位时,每个要定位的人脸图片最终要对应到一个bin节点,具体可以从该要定位的人脸图片中确定出特征点对和阈值,再根据特征点对和阈值确定该人脸图片在fern结构对应的bin节点。
在对应到bin节点后,可以获取该bin节点的节点值,bin节点的节点值可以在训练过程中确定。
可选的,可以预先建立人脸特征点与特征点对和阈值的对应关系,之后在获取到要定位的人脸图片的人脸特征点的初始值后,根据该对应关系,可以确定该要定位的人脸图片中人脸特征点的特征点对和阈值。
其中,人脸特征点与特征点对和阈值的对应关系也可以在训练过程中确定。
确定模块104,用于根据所述初始值和所述节点值,确定所述人脸特征点的定位结果。
例如,对应一个人脸特征点,将该人脸特征点的初始值与该人脸图片对应的节点的节点值之和,确定为该人脸特征点的定位结果。
在具体实施时,本实施例可以采用C语言实现。
一个实施例中,所述节点值是二进制节点的节点值,参见图11,所述装置100还包括建立模块105,所述建立模块105用于建立训练模型。所述建立模块105包括:
第一单元1051,用于根据人脸特征点的个数,建立满二叉树,所述满二叉树包括分类节点和二进制节点,且每层分类节点对应一个人脸特征点。
例如,参见图4,人脸特征点是4个时,可以建立如图3所示的满二叉树。
其中,满二叉树的最后一层节点称为二进制(bin)节点,除最后一层节点之外的其余各层节点称为分类节点。
第二单元1052,用于根据训练样本,进行特征提取,获取人脸特征点与特征点对和阈值之间的对应关系,并根据所述对应关系,确定所述分类节点对应的特征点对和阈值。
训练样本是预先收集的多个人脸图片。
对应每个训练样本可以进行特征提取,得到每个人脸特征点对应的特征点对和阈值,特征提取后可以将训练样本归入相应的bin节点中,并更新bin节点值,根据更新后的bin节点值可以得到训练样本的定位结果,根据训练样本的定位结果和真实值可以判断是否达到收敛条件,例如,定位结果与真实值的差值小于预设值表明达到收敛条件,在达到收敛条件时,将达到收敛条件时对应的训练样本确定出的人脸特征点与特征点对和阈值的对应关系确定为最终定位时采用的对应关系。
在得到人脸特征点与特征点对和阈值的对应关系时,在定位时,对应要定位的人脸图片,根据该对应关系就可以得到该人脸图片的特征点对应的特征点对和阈值,例如,在训练时得到右眼对应(i*,j*)和λ*,则在定位时可以确定右眼对应的特征点对和阈值是:(i*,j*)和λ*。
具体的,特征点对(i*,j*)的值可以是相对值,在训练时,对应人脸特征点确定出特征点对后,根据训练样本的真实值可以得到特征点对与真实值之间的相对值,训练时得到的人脸特征点对应的特征点对的值就可以用该相对值表示,而在定位时,根据该相对值以及人脸特征点的初始值,可以得到人脸特征点对应的特征点对的位置。
另一个实施例中,参见图11,所述第二单元1052具体包括:
第一子单元10521,用于获取所述训练样本中的人脸特征点的真实值和初始值。
其中,初始值可以采用预设规则的初始化方式确定。
真实值是指训练样本的人脸特征点的真实值,由于训练样本是已知的,真实值也是已知的。
第二子单元10522,用于在所述人脸特征点中确定当前处理的人脸特征点,并对应所述当前处理的人脸特征点获取可供选择的参数,所述参数包括:特征点对,方向角度和阈值。
其中,通常人脸特征点是多个,在处理时可以依次对应每个人脸特征点进行处理。
假设当前处理的人脸特征点是右眼,其余人脸特征点的处理方式可以依此类推。
特征点对是指当前处理的人脸特征点周围预设范围内的任意两个像素点。例如,参见图7,当前处理的人脸特征点是右眼,可以以右眼的真实值为圆心,以预设的半径值r为半径画一个圆,在该圆内任意选择两个像素点作为一对特征点对。参见图7,以右眼为例,对应的特征点对用填充的黑点表示,分别是眉头和眼尾的点。可以理解的是,在具体选择时,可以选择预设数量的特征点对,而不是将所有可能的选择方式都选取,以降低运算复杂度。
方向角度是指穿过当前处理的人脸特征点的真实值位置的直线与预设直线之间的角度,例如,预设直线是水平方向的直线。具体如,参见图7,穿过右眼画出一条直线71,方向角度是该直线71与预设直线之间的角度。
阈值是预设的多个值。
从上述选择参数的过程中可以看出,特征点对,方向角度和阈值都存在多个值,在处理时,可以依次遍历每个值,从中选择出最优的值。
第三子单元10523,用于在所述参数中,遍历每组特征点对,每个方向角度和每个阈值,根据当前遍历的特征点对,方向角度和阈值,以及当前处理的人脸特征点的真实值和初始值,得到当前遍历的特征点对的分数,并将分数最高时的特征点对和阈值确定为所述当前处理的人脸特征点对应的特征点对和阈值。
另一个实施例中,所述第三子单元10523具体用于:
确定当前遍历的特征点对和阈值;
例如,当前遍历的特征点对表示为:i点和j点。
当前遍历的阈值表示为:λ。
根据所述真实值和所述方向角度,确定当前直线,所述当前直线是经过所述真实值且角度是所述方向角度的直线;
例如,当前遍历的方向角度是θ,假设该直线用图7中的直线71表示。
根据所述特征点对和阈值,以及所述初始值,对所述训练样本进行划分;
其中,可以将训练样本划分为第一样本和第二样本,例如,所述第一样本是特征取值小于或等于当前遍历的阈值的样本,第二样本是特征取值大于当前遍历的阈值的样本,特征取值是当前遍历的特征点对在样本上的颜色值的差值。可以理解的是,等于时也可以归为第二样本,例如,第一样本是特征取值小于当前遍历的阈值的样本,第二样本是特征区域大于或等于当前遍历的阈值的样本。本实施例以等于时归为第一样本为例。
以颜色值是灰度值为例,对应一个训练样本,可以找到i点和j点,并且可以确定i和j点之间的灰度值的差值,如果该差值小于或等于λ,则该训练样本是第一样本,反之,如果i和j点之间的灰度值的差值大于λ,则该训练样本是第二样本。
如图9所示,第一样本和第二样本用不同填充方式的圆点表示。
根据所述当前直线和划分后的训练样本的个数,计算所述分数。
所述分数的计算公式为:
Score=C_left/S_left+C_right/S_right,
其中,Score是当前遍历的特征点对的分数,C_left是位于当前直线左侧的第一样本的个数,S_left是位于当前直线左侧的第一样本和第二样本的总数,C_right是位于当前直线右侧的第一样本的个数,S_right是位于当前直线右侧的第一样本和第二样本的总数;
其中,所述第一样本和所述第二样本是根据特征取值和当前遍历的阈值对训练样本划分后得到的,所述特征取值是当前遍历的特征点对在样本上的颜色值的差值。
例如,在图9所示的情况下,Score=8/11+3/15。
如图8所示的流程,可以得到当前遍历的特征点对,方向角度和阈值所对应的分数,依此类推,可以获取每个特征点对,方向角度和阈值对应的分数,之后,通过比较,可以得到分数最高时对应的特征点对,方向角度和阈值,也就是最优的特征点对,方向角度和阈值,假设分别表示为(i*,j*),θ*,λ*。
第四子单元10524,用于建立所述人脸特征点与特征点对和阈值之间的对应关系,以便根据所述对应关系,确定所述接收的人脸图片中人脸特征点的特征点对和阈值。
如上所示,对应当前处理的人脸特征点,可以得到最优的特征点对,方向角度和阈值,由于后续定位时不需要方向角度,因此可以建立人脸特征点与特征点对和阈值之间的对应关系。
例如,当前处理的人脸特征点是右眼,对应的最优值包括:(i*,j*),λ*,则可以建立右眼与(i*,j*)和λ*的对应关系。
其他人脸特征点与特征点对和阈值之间的对应关系也可以依此原理得到,从而可以得到每个人脸特征点与特征点对和阈值之间的对应关系。
在建立人脸特征点与特征点对和阈值之间的对应关系后,由于分类节点与人脸特征点对应,也可以确定分类节点对应的特征点对和阈值,例如,fern结构的第一层节点对应右眼,则第一层节点对应的特征点对和阈值就是右眼对应的特征点对和阈值。
第三单元1053,用于根据所述分类节点以及所述分类节点对应的特征点对和阈值,将所述训练样本划分到所述二进制节点中,并根据二进制节点中训练样本的初始值得到所述二进制节点的节点值。
对应每个训练样本,获取每个分类节点对应的特征点对和阈值后,假设对应第一层节点,可以根据该第一层节点对应的特征点对选取该训练样本中的特征点对,例如,根据(i*,j*)的坐标值在训练样本中选择对应位置的特征点对。需要说明的是,(i*,j*)的坐标值可以是相对于预设的坐标圆点的绝对坐标值,也可以是相对于训练样本的人脸特征点的真实值的相对坐标值,或者,在人脸特征点定位时,相对于要定位的人脸图片中人脸特征点的初始值的相对坐标值。
在确定出训练样本的特征点对后,可以获取该特征点对之间的灰度差值,再与该分类节点对应的阈值比较大小,根据比较结果对训练样本进行分类,例如,灰度差值小于阈值时划分到左子树,灰度差值大于阈值时划分到右子树。
依此按照每层进行划分,可以将训练样本划分到最后一层的bin节点中。
通过上述流程可以将具有相同位置关系的训练样本落入同一个bin节点中,例如,第一个bin节点包括的训练样本是:右眼的初始值小于真实值,左眼的初始值小于真实值,左嘴角的初始值小于真实值,且右嘴角的初始值小于真实值,第二个bin节点包括的训练样本是:右眼的初始值大于真实值,左眼的初始值小于真实值,左嘴角的初始值小于真实值,且右嘴角的初始值小于真实值等。
假设第一个bin节点包括的训练样本包括A1,A2和A3,则可以根据A1,A2和A3的人脸特征点的初始值和真实值确定该第一个bin节点的节点值,例如,根据A1的人脸特征点的初始值和真实值可以得到第一差值,类似的,可以得到A2对应的第二差值,A3对应的第三差值,之后,可以对第一差值,第二差值和第三差值取均值,将该均值确定为第一个bin节点的节点值。
本实施例中,所述特征点对和阈值使得对应同一个节点的不同人脸图片具有相同的位置关系,可以在训练时将具有相同位置关系的训练样本最终归入同一个节点中,从而该节点的节点值是由具有相同位置关系的训练样本得到的,从而可以提高定位效果。
需要说明的是,在本发明的描述中,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行***执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
此外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。
上述提到的存储介质可以是只读存储器,磁盘或光盘等。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。