具体实施方式
本发明实施例提供了一种确定人脸姿态的方法和装置,用于快速得出人脸姿态。
图1是根据一示例性实施例示出的一种确定人脸姿态的方法的流程图。该方法可执行在多种设备上,参见图1,本发明实施例提供的方法流程包括:
步骤101:获取待检测的二维人脸图像;
步骤102:提取二维人脸图像的二维关键点;
步骤103:确定二维关键点在成像平面坐标系中的二维坐标数值;
步骤104:提取预置的三维人脸模型的三维关键点,其中三维关键点与二维关键点对应;
步骤105:确定三维关键点在世界坐标系中的三维坐标数值;
步骤106:获取摄像机在摄取二维人脸图像时的焦距;
步骤107:根据二维坐标数值、三维坐标数值和焦距,得到旋转矩阵的解;
步骤108:根据旋转矩阵的解确定二维人脸图像的人脸姿态。
可选地,三维人脸模型在世界坐标系的三个坐标轴方向的偏转角度分别为零;
根据旋转矩阵的解确定二维人脸图像的人脸姿态,包括:
根据旋转矩阵的解确定二维人脸图像的人脸在世界坐标系里的姿态。
可选地,根据二维坐标数值、三维坐标数值和焦距,得到旋转矩阵的解,包括:
将二维坐标数值、三维坐标数值和焦距带入预设公式,得到旋转矩阵的解,预设公式为:
其中,为平移向量;
为旋转矩阵。
(x,y)为二维坐标数值,(Xw,Yw,Zw)为三维坐标数值,(Xc,Yc,Zc)为摄像机坐标数值,f为焦距。
可选地,根据旋转矩阵的解确定二维人脸图像的人脸在世界坐标系里的姿态,包括:
根据旋转矩阵的解,确定二维人脸图像的人脸在世界坐标系的至少一坐标轴的方向上的偏转角度值。
可选地,确定二维人脸图像的人脸在世界坐标系的至少一坐标轴的方向上的偏转角度值,包括:
根据第一公式确定二维人脸图像的人脸在第一坐标轴的方向上的第一偏转角度yaw,其中第一公式为yaw=arctan2(-R[1][0],R[0][0]);和/或,
根据第二公式确定二维人脸图像的人脸在第二坐标轴的方向上的第二偏转角度pitch,其中第二公式为pitch=arcsin(R[2][0]);和/或,
根据第三公式确定二维人脸图像的人脸在第三坐标轴的方向上的第三偏转角度roll,其中第三公式为roll=arctan2(-R[2][1],R[2][2]);
其中,arctan是反正切函数,arcsin是反正弦函数,R[1][0]表示R的第2行第1列元素,R[0][0]表示R的第1行第1列元素,R[2][0]表示R的第3行第1列元素,R[2][1]表示R的第3行第2列元素,R[2][2]表示R的第3行第3列元素,第一坐标轴、第二坐标轴和第三坐标轴为世界坐标系的三个坐标轴。
可选地,成像平面坐标系包括以像素的个数为单位的图像坐标系或者以物理长度为单位的物理图像坐标系。
综上所述,获取待检测的二维人脸图像后,提取该二维人脸图像的二维关键点,确定该二维关键点在成像平面坐标系中的二维坐标数值,然后,提取预置的三维人脸模型的三维关键点,其中三维关键点与二维关键点对应,确定三维关键点在世界坐标系中的三维坐标数值,以及,获取摄像机在摄取二维人脸图像时的焦距,根据二维坐标数值、三维坐标数值和焦距,得到旋转矩阵的解,从而根据旋转矩阵的解确定二维人脸图像的人脸姿态。这样,通过分别获取二维人脸图像和三维人脸模型上的相互对应的关键点,并求出两组关键点在不同坐标系上的数值,利用这两组数值和摄取二维人脸图像的焦距,求出旋转矩阵的解,根据该旋转矩阵的解,即可得出该二维人脸图像相对三维人脸模型的姿态。
图2是根据一示例性实施例示出的一种确定人脸姿态的方法的流程图。该方法可执行在多种设备上,以设备执行本发明实施例提供的方法的角度为例,参见图2,本发明实施例提供的方法流程包括:
步骤201:获取待检测的二维人脸图像。
设备获取待检测的二维人脸图像,若设备设有摄像头,则可以是通过摄像头直接摄取人脸得到二维人脸图像,当然,也可以是获取从其他设备或器件发送过来的二维人脸图像。获取二维人脸图像后,设备即可对该二维人脸图像进行人脸姿态的估计。
其中执行本发明实施例的设备包括但不限于人脸识别设备、智能终端等电子设备。
步骤202:提取二维人脸图像的二维关键点。
设备根据人脸对齐算法对二维人脸图像进行二维关键点检测,提取出该二维人脸图像的关键点,本发明实施例中,称二维人脸图像的关键点为二维关键点。关键点为人脸上的能表示人脸特征的特征点。
其中,使用的人脸对齐算法包括但不限于SDM、LBF、CFSS等。而二维关键点在二维人脸图像的数目可以是9点、49点、64点等数目,本发明实施例对二维关键点的数目不作具体限定。如图3和图4所示,其示出了在两张二维人脸图像上分别提取出49点的二维人脸关键点。
步骤203:确定该二维关键点在成像平面坐标系中的二维坐标数值。
提取出二维人脸图像上的二维关键点后,设备确定这些二维关键点在成像平面坐标系中的数值,记为二维坐标数值(x,y),因二维关键点为多个,得出的二维坐标数值也包括多个,可记为(x1,y1;x2,y2;x3,y3;……;xn,yn)。
其中,成像平面坐标系是以摄像机拍摄的二维图像为基准建立的坐标系。用于指定物体在照片中的位置。在本发明实施例中,以该成像平面坐标系的单位为像素的个数为例进行说明,如单位为个。此时,以个为单位的二维坐标(x,y)的坐标系的原点在图片的左上角,即该二维人脸图像在存储器存储时二维人脸图像的首地址。
可以理解,在有的实施例中,成像平面坐标系的单位也可以是物理长度单位,例如为毫米。此时,以物理长度为单位的二维坐标(u,v)的坐标系的原点位于摄像机光轴与成像平面的焦点O上。
步骤204:提取预置的三维人脸模型的三维关键点。
其中,三维关键点与二维关键点对应,三维人脸模型上的三维关键点和二维人脸图像上的二维关键点对应,即三维关键点在三维人脸模型上的人脸位置与二维关键点在二维人脸图像上的人脸位置相互对应,即三维人脸模型的2维剖面与二维人脸的关键点一一对应。且三维关键点的数量和二维关键点的数量相同。
在本发明实施例中预先设置有三维人脸模型,设备根据人脸对齐算法对该三维人脸模型进行关键点检测,提取出该三维人脸模型的关键点,将三维人脸模型上的关键点记为三维关键点,三维关键点是人脸模型上的能表示人脸特征的特征点。
其中使用的人脸对齐算法包括但不限于SDM、LBF、CFSS等。而三维关键点在三维人脸模型的数目可以是9点、49点、64点等数目,本发明实施例对三维关键点的数目不作具体限定。如图5所示,其示出了在三维人脸模型上提取49点三维人脸关键点的图示。其中图5的三维关键点和图3、图4的二维关键点都为49点,且二维关键点在二维人脸图像上的位置和三维关键点在三维人脸模型上的位置相同。
在本发明实施例中,三维人脸模型在世界坐标系的三个坐标轴的方向上的偏转角度分别为零。即,世界坐标系包括三个坐标轴:第一坐标轴、第二坐标轴和第三坐标轴,三维人脸模型在该第一坐标轴、该第二坐标轴和该第三坐标轴的方向上的偏转角度分别为零。因本发明实施例的方法求出的人脸姿态为二维人脸图像的人脸相对三维人脸模型的偏转角度,当三维人脸模型在世界坐标系的三个坐标轴的方向上的偏转角度为零时,求出的二维人脸图像的人脸姿态即为二维人脸图像的人脸在世界坐标系的三个坐标轴方向上的偏转角度,这样的设置可方便且直观地确定二维人脸图像的人脸姿态。
其中,世界坐标系是物体位置的参考系。除了无穷远,世界坐标可以根据运算方便与否自由放置。在双目视觉中世界坐标系主要有三个用途:1)、标定时确定标定物的位置;2)、作为双目视觉的系统参考系,给出两个摄像机相对世界坐标系的关系,从而求出相机之间的相对关系;3)、作为重建得到三维坐标的容器,盛放重建后的物体的三维坐标。
步骤205:确定三维关键点在世界坐标系中的三维坐标数值。
设备在提取出三维关键点后,在世界坐标系中确定三维关键点的数值,将该数值记为三维坐标数值(Xw,Yw,Zw)。因三维关键点包括多个,可对三维关键点的三维坐标数值记为(X1,Y1,Z1;X2,Y2,Z2;……Xn,Yn,Zn)。
步骤206:获取摄像机在摄取该二维人脸图像时的焦距;
本发明实施例中,设备还要获取二维人脸图像对应的焦距,即摄像机在摄取该二维人脸图像时的焦距f。
可以理解,本发明实施例对获取二维人脸图像、获取焦距和提取三维人脸模型的三维关键点等步骤的执行顺序不作具体限定。例如,可以是先执行步骤204和步骤205,也可以是先执行步骤206。
步骤207:根据二维坐标数值、三维坐标数值和焦距,得到旋转矩阵的解。
在获取到二维坐标数值(x1,y1;x2,y2;x3,y3;……;xn,yn)、三维坐标数值(X1,Y1,Z1;X2,Y2,Z2;……Xn,Yn,Zn)和焦距f的具体数值后,即可根据这些具体数值计算旋转矩阵R的解。
其中,旋转矩阵R的具体形式为:
旋转矩阵R的第i行表示摄像机坐标系中的第i个坐标轴方向的单位向量在世界坐标系里的坐标;它的第i列表示世界坐标系中的第i个坐标轴方向的单位向量在摄像机坐标系里的坐标。
具体的求取旋转矩阵的方法,例如,可以是:
将二维坐标数值(x1,y1;x2,y2;x3,y3;……;xn,yn)、三维坐标数值(X1,Y1,Z1;X2,Y2,Z2;……Xn,Yn,Zn)和焦距f带入预设公式,通过计算该预设公式即可得出旋转矩阵的解。
该预设公式为:
其中,为平移向量;
为旋转矩阵。
(x,y)为二维坐标数值,(Xw,Yw,Zw)为三维坐标数值,(Xc,Yc,Zc)为摄像机坐标数值,f为焦距。
其中,该预设公式的得出,是利用了摄像机坐标系和世界坐标系的关系,以及摄像机坐标系和成像平面坐标系的关系得出的。
即,摄像机坐标系和世界坐标系的关系如坐标系公式一所示:
其中,(Xc,Yc,Zc)是摄像机坐标系中的点,(Xw,Yw,Zw)是世界坐标系中的点,R是旋转矩阵,T是平移向量,T表示从世界坐标系到摄像机坐标系的平移向量,T正好是世界坐标系的原点在摄像机坐标系的坐标。
摄像机坐标系和成像平面坐标系的关系为如坐标系公式二所示:
X=(f/Zc)Xc,y=(f/Zc)Yc。
将坐标系公式二带入坐标系公式一即可得出预设公式:
其中,本发明实施主要使用的是,预设公式的如下等式部分:
可以理解,在本发明有的实施例中,可能会对多张二维人脸图像的人脸姿态进行确定。此时,三维人脸模型可以预设为1个,三维人脸模型的关键点,例如64个点时,它的坐标值是个常数,是不变的,每个点位置顺序也是不变的。而不同的二维人脸图像的关键点,例如每个二维人脸图像为64个点时,不同图像的关键点的坐标值可能是不同的,但每个点位置顺序是一样的。当然,在有的实施例中,还可以设置多个符合要求的三维人脸模型。
步骤208:根据旋转矩阵的解确定二维人脸图像的人脸在世界坐标系里的姿态。
在求出旋转矩阵R的解后,即可根据该旋转矩阵确定二维人脸图像的人脸在世界坐标系里的姿态。
因为旋转矩阵的解里包含有二维人脸图像的人脸相对三维人脸模型的偏转角度的相关数据,在有的实施例中,可以直接以该旋转矩阵的解作为二维人脸图像的姿态。
为了更直观地得出二维人脸图像的姿态,在本发明实施例中,可以根据该旋转矩阵的解计算得出二维人脸图像的人脸在世界坐标系的至少一坐标轴的方向上的偏转角度值,以该偏转角度值作为二维人脸图像的人脸在世界坐标系里的姿态。
具体的确定二维人脸图像的人脸在世界坐标系的坐标轴的方向上的偏转角度值的方法,例如可以是:
根据第一公式确定二维人脸图像的人脸在第一坐标轴的方向上的第一偏转角度值yaw,其中第一公式为yaw=arctan2(-R[1][0],R[0][0]);
根据第二公式确定二维人脸图像的人脸在第二坐标轴的方向上的第二偏转角度值pitch,其中第二公式为pitch=arcsin(R[2][0]);
根据第三公式确定二维人脸图像的人脸在第三坐标轴的方向上的第三偏转角度值roll,其中第三公式为roll=arctan2(-R[2][1],R[2][2]);
其中,上述的arctan是反正切函数,arcsin是反正弦函数,R[1][0]表示R的第2行第1列元素,R[0][0]表示R的第1行第1列元素,R[2][0]表示R的第3行第1列元素,R[2][1]表示R的第3行第2列元素,R[2][2]表示R的第3行第3列元素,第一坐标轴、第二坐标轴和第三坐标轴为世界坐标系的三个坐标轴。
通过上述的方法即可求出二维人脸图像在世界坐标系的三个坐标轴方向的不同的偏转角度值,其中,本发明实施例可以求出二维人脸图像相对一个坐标轴方向的偏转角度值,也可以求出相对两个或者三个不同坐标轴方向的偏转角度值,本发明实施例对此不作具体限定。
可以理解,本发明实施例的成像平面坐标系是以像素个数为单位进行说明的,但是本发明实施例的成像平面坐标系也可以是以物理长度为单位的坐标系,例如,成像平面坐标系以毫米为单位。此时,可以将成像平面坐标系的以毫米为单位的数值根据转换公式转换成以像素个数为单位的数值。
该转换公式可以是
x=(u/du)+x0;y=(v/dv)+y0;
其中,du代表x轴方向一个像素的宽度,dv代表y轴方向上一个像素的宽度。du、dv为摄像机的内参数。(x0,y0)称为图像平面的主点,也是摄像机的内参数。这样相当于对x轴和y轴的离散化。
可以理解,上述的三维人脸模型在世界坐标系中的三个坐标轴方向的偏转角度为零。但是,在其它的实施例中,对三维人脸模型在世界坐标系中的三个坐标轴方向的偏转角度可以不作具体限定,即,三维人脸模型在世界坐标系中的偏转角度可以为零也可以不为零,此时,求出的二维人脸图像的人脸姿态为在世界坐标系中二维人脸图像的人脸相对三维人脸模型的偏转角度。
为了对本发明实施例的方法的效果进行验证,本发明实施例还提供了对本发明图2所示实施例的确定人脸姿态的方法的验证实验。此时,三维人脸模型在世界坐标系的三个坐标轴的方向上的偏转角度分别为零。
在公开数据库Genki4k数据库上进行验证测试,按yaw,pitch,roll的顺序,计算的绝对误差平均值分别为0.0250,0.0472和0.0353。图3和图4是Genki4k数据库的其中两幅人脸图像,图3和图4的测试结果如下所示。
对于图3,根据Genki4k数据库提供的数据,按yaw,pitch,roll顺序,ground truth(即标注结果,用弧度制表示)依次为:0.000000,0.047124,0.171268,利用本方法预测的结果为:yaw=-0.0076694400,pitch=0.13463236,roll=0.13941991。
对于图4,根据Genki4k数据库提供的数据,按yaw,pitch,roll顺序,ground truth(即标注结果,用弧度制表示)依次为:-0.104156,0.038397,-0.189147,利用本方法预测的结果为yall=-0.11314188,pitch=0.031535741,roll=-0.20432696。
从Genki4k数据库上的测试结果来看,本文提出的人脸姿态估计方法是有效的。
综上所述,获取待检测的二维人脸图像后,提取该二维人脸图像的二维关键点,确定该二维关键点在成像平面坐标系中的二维坐标数值,然后,提取预置的三维人脸模型的三维关键点,其中三维关键点与二维关键点对应,确定三维关键点在世界坐标系中的三维坐标数值,以及,获取摄像机在摄取二维人脸图像时的焦距,根据二维坐标数值、三维坐标数值和焦距,得到旋转矩阵的解,从而根据旋转矩阵的解确定二维人脸图像的人脸姿态。这样,通过分别获取二维人脸图像和三维人脸模型上的相互对应的关键点,并求出两组关键点在不同坐标系上的数值,利用这两组数值和摄取二维人脸图像的焦距,求出旋转矩阵的解,再根据该旋转矩阵的解,即可得出该二维人脸图像相对三维人脸模型的姿态。
图6是根据一示例性实施例示出的一种确定人脸姿态的装置的结构示意图,该装置可集成于设备上,该设备用于执行上述图1和图2对应的实施例中的设备执行的功能。参见图6,该装置包括:
图像获取单元601,用于获取待检测的二维人脸图像;
第一提取单元602,用于提取二维人脸图像的二维关键点;
二维数值确定单元603,用于确定二维关键点在成像平面坐标系中的二维坐标数值;
第二提取单元604,用于提取预置的三维人脸模型的三维关键点,其中三维关键点与二维关键点对应;
三维数值确定单元605,用于确定三维关键点在世界坐标系中的三维坐标数值;
焦距获取单元606,用于获取摄像机在摄取二维人脸图像时的焦距;
求取单元607,用于根据二维坐标数值、三维坐标数值和焦距,得到旋转矩阵的解;
姿态确定单元608,用于根据旋转矩阵的解确定二维人脸图像的人脸姿态。
可选地,三维人脸模型在世界坐标系的三个坐标轴方向的偏转角度分别为零;
姿态确定单元608,还用于根据旋转矩阵的解确定二维人脸图像的人脸在世界坐标系里的姿态。
可选地,求取单元607,还用于将二维坐标数值、三维坐标数值和焦距带入预设公式,得到旋转矩阵的解,预设公式为:
其中,为平移向量;
为旋转矩阵。
(x,y)为二维坐标数值,(Xw,Yw,Zw)为三维坐标数值,(Xc,Yc,Zc)为摄像机坐标数值,f为焦距。
可选地,姿态确定单元608,还用于根据旋转矩阵的解,确定二维人脸图像的人脸在世界坐标系的至少一坐标轴的方向上的偏转角度值。
可选地,姿态确定单元608,还用于根据第一公式确定二维人脸图像的人脸在第一坐标轴的方向上的第一偏转角度yaw,其中第一公式为yaw=arctan2(-R[1][0],R[0][0]);和/或,
根据第二公式确定二维人脸图像的人脸在第二坐标轴的方向上的第二偏转角度pitch,其中第二公式为pitch=arcsin(R[2][0]);和/或,
根据第三公式确定二维人脸图像的人脸在第三坐标轴的方向上的第三偏转角度roll,其中第三公式为roll=arctan2(-R[2][1],R[2][2]);
其中,arctan是反正切函数,arcsin是反正弦函数,R[1][0]表示R的第2行第1列元素,R[0][0]表示R的第1行第1列元素,R[2][0]表示R的第3行第1列元素,R[2][1]表示R的第3行第2列元素,R[2][2]表示R的第3行第3列元素,第一坐标轴、第二坐标轴和第三坐标轴为世界坐标系的三个坐标轴。
可选地,成像平面坐标系包括以像素的个数为单位的图像坐标系或者以物理长度为单位的物理图像坐标系。
综上所述,图像获取单元601获取待检测的二维人脸图像后,第一提取单元602提取该二维人脸图像的二维关键点,二维数值确定单元603确定该二维关键点在成像平面坐标系中的二维坐标数值,然后,第二提取单元604提取预置的三维人脸模型的三维关键点,其中三维关键点与二维关键点对应,三维数值确定单元605确定三维关键点在世界坐标系中的三维坐标数值,以及,焦距获取单元606获取摄像机在摄取二维人脸图像时的焦距,求取单元607根据二维坐标数值、三维坐标数值和焦距,得到旋转矩阵的解,从而姿态确定单元608根据旋转矩阵的解确定二维人脸图像的人脸姿态。这样,通过分别获取二维人脸图像和三维人脸模型上的相互对应的关键点,并求出两组关键点在不同坐标系上的数值,利用这两组数值和摄取二维人脸图像的焦距,求出旋转矩阵的解,根据该旋转矩阵的解,即可得出该二维人脸图像相对三维人脸模型的姿态。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。