人脸面部关键表情识别方法
技术领域
本发明涉及动漫制作领域中演员面部关键表情捕捉的技术,特别涉及一种简单、高效的人脸面部关键表情识别方法。
背景技术
在动漫制作领域,起初动漫角色形象都是由美工人员根据剧本要求手工逐帧绘制完成的。随着计算机技术的迅猛发展,角色从形象到动作等都已经通过专业软件进行实现。而伴随着计算机视觉技术的发展,角色动作实现也由设计人员在专业软件中设计关键帧骨骼动画转变为通过专业的动作捕捉系统实时捕捉演员动作来实现,在这方面,好莱坞电影走在世界前列,如《魔戒》、《金刚》、《极地特快》等都是利用动作捕捉系统来实现的。尤其是《极地特快》中,演员汤姆汉克斯一个人扮演了五个角色。
相对来说,人物动作都是幅度比较大的活动,肢体的变化比较容易捕捉,所以,动作捕捉技术和设备近几年已经发展的相当成熟。但是动作捕捉技术仅仅解决了角色肢体动作的捕捉问题,却无法从演员的表演中获得真实的人类表情。正是这一缺陷,创造真实的全CG (Computer Graphics,计算机图形)人类角色一直是动漫制作领域公认的一大难题。
2009年上映的好莱坞电影《阿凡达》中纳美人栩栩如生的面部表情,给观众带来了巨大的震撼。它将人类面部表情的识别和制作带到了一个新的高度。导演卡梅隆协同维塔工作室开发了一套全新的表情捕捉系统。该系统的核心是面部捕捉头戴设备(Facial Capture Head Rig)。该设备是一款特制的安装了微缩高清摄像头的无边帽子,表演时,在演员面部特定部位涂抹绿色的跟踪点并与CG角色面部的相应位置进行了精密的绑定。演员表演过程中,摄像头实时的记录跟踪点的位置变化信息,从而反应到CG角色的相应位置,体现出真实的表情变化。
随着《阿凡达》的空前成功,面部表情识别技术和设备近几年也得到了快速发展,出现了多种采用不同的设备并取得了良好的应用。
目前面部表情识别技术和设备按照摄像头的个数可以分为单摄像头系统和多摄像头系统。单摄像头系统(如《阿凡达》所使用的)只使用一个摄像头,通过固定在演员面前进行视频采集。单摄像头系统结构相对简单,但获得的特征点坐标只可能是二维坐标;多摄像头系统采用多个摄像头从左前、正中、右前三个方向采集视频,能够获得特征点的三维坐标信息且精度比单摄像头系统要高,但结构复杂,要求空间大,对演员表演限制较多。
面部表情识别系统按特征点的种类,可以分为主动发光式和被动发光式。主动发光式系统使用的特征点能够主动发出白色或红色等光线,而被动发光式系统则是在演员面部粘贴或涂抹绿色或蓝色等圆点等。这两种方式实际上的理论基础是一样的,都是确保特征点和人脸面部的色差尽可能的大,从而便于特征点的识别。
目前的面部表情识别系统在实际使用时,还是有各种各样的不便之处。多摄像头系统显然设备复杂、造价昂贵;单摄像头系统虽然相对简单,但在演员面前固定一个摄像头还是不算方便。最主要的是,所有的系统都需要使用额外的特征点,不论是粘贴还是涂抹,每一次表演之前,都要进行这一必要的准备工作。这显然十分不便。而且,这些系统更多的是应用在电影制作中,演员都是专业演员,在获得演员的表情后,由后期的制作人员再进行加工处理。
而在动漫制作领域,不需要非常专业的演员,而且每一个动漫设计人员会设计不止一个的动漫角色。实际上,角色的表情都是由该角色的设计人员来实现的。通过检索,在动漫制作领域中,还没有专门提供给动漫设计人员进行表情捕捉的软件和设备。
发明内容
本发明的目的在于提供一种人脸面部关键表情识别方法,解决了现有技术存在的上述问题。本发明不需要固定的头戴设备,不需要额外的特征点,利用一个高清摄像头采集动漫设计人员的面部视频,通过计算机视觉技术就能够实时获得其面部关键表情,由其将表情信息和设计的角色进行精密绑定,从而实现设计人员的表情实时捕捉并反映到CG角色中去。本发明能够提供给动漫设计人员更大的自由度,能够更好的体现设计人员所需要的效果。
本发明的上述目的通过以下技术方案实现:
人脸面部关键表情识别方法,采用一台高清彩色摄像头,置于动漫设计人员所使用的计算机屏幕上方,具体步骤如下:
(1) 调用摄像头厂商提供的SDK获得拍摄到的视频;
(2) 调用开源Open CV库的相关函数进行人脸识别,得到人脸所在的矩形区域;
(3) 在视频图像的每一帧中,截取该矩形区域的图像作为后继处理的原始图像;
(4) 根据人脸固有的特征,截取人脸所在矩形区域的上1/5至1/3部分作为眉毛所在的区域进行处理得到眉毛的中心点;
(5) 截取人脸所在的矩形区域自上方1/3处开始,矩形区域1/5大小的区域作为眼睛所在的区域进行处理得到眼球的中心点;
(6) 根据嘴巴在人脸所在的位置特征,截取人脸所在的矩形图像的下1/3部分作为嘴巴的区域进行处理得到嘴巴最左边、最右边和最下边三个关键点的信息;
至此,得到两个眉毛、两只眼睛、嘴巴上的三个、共七个关键点的位置信息,通过和已制作好的CG角色面部对应点相关联,能够实时得到CG角色的面部关键表情信息。
所述的步骤(4)截取矩形图像的上1/5至1/3部分作为眉毛所在的区域进行处理得到眉毛的中心点是:
(4.1)根据图像的颜色空间,将图像转变为灰度图像,并进行直方图优化;
(4.2)对灰度图像采用Ostu最优阈值变换方法,将图像转变为黑白二值图像;
(4.3)对二值图像采用数学形态学的膨胀、腐蚀操作,去除图像的噪点,获得更清晰的分割效果;
(4.4)由于眉毛的特殊性质,对左右眉毛分别做横向投影,统计5个像素区域内黑色像素最多的区域,就是眉毛所在的区域,在该区域内计算黑色像素的重心,即得到眉毛的中心点。
所述的步骤(5)截取人脸所在的矩形区域自上方1/3处开始,矩形区域1/5大小的区域作为眼睛所在的区域进行处理得到眼球的中心点是:
(5.1)同(4.1);
(5.2)同(4.2);
(5.3)同(4.3);
(5.4)本发明是实现眼睛睁闭的判断及眼球位置的定位;眼睛闭合时,眼睛区域大部分的颜色都是和肤色一致的;而睁开时,因为眼球是黑色的,和肤色差别很大;所以在二值化后,眼球能够很明显的区分开来;为此,分别对左右眼做纵向投影,统计每一列黑色像素的个数,设定一个阈值,大于此阈值的列认为是眼球所在的列,小于则认为不是眼球所在区域;如果所有的列都低于此阈值,则认为该眼是闭合的,否则是睁开的;对睁开的眼睛,统计列的信息,长度大于设定值的列的集合,就是眼球所在的区域;计算该区域黑色像素的重心,即得到眼球的中心点。
所述的步骤(6)根据嘴巴在人脸所在的位置特征,截取人脸所在的矩形图像的下1/3部分作为嘴巴的区域进行处理得到嘴巴最左边、最右边和最下边三个关键点的信息是:
(6.1)利用Open CV提供的肤色检测函数将区域中肤色部分和非肤色部分分割开来;
(6.2)对分割结果进行数学形态学的腐蚀、膨胀操作,去除图像噪点,得到更好的分割结果;
(6.3)利用Open CV提供的轮廓跟踪函数得到嘴部轮廓的信息;由于有可能有噪声的影响,得到的轮廓信息不止一个,这时,考虑到嘴巴在嘴部区域内是面积最大的非肤色区域;所以,只保留面积最大的轮廓做为嘴巴可能的轮廓;遍历轮廓,即可得到嘴巴最左边、最右边和最下边三个关键点的信息。
本发明的有益效果在于:根据动漫制作领域的特点,能够提供给动漫设计人员更大的自由度,实时获得其面部表情并实时体现在其设计的CG角色当中。设计人员可以根据CG角色的表情效果,即时对表情进行修改完善,能够更好的体现设计人员的内心需求。简单、高效,实用性强。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实例及其说明用于解释本发明,并不构成对本发明的不当限定。
图1为本发明的流程示意图;
图2至图11为本发明的实际效果图。
具体实施方式
下面结合附图进一步说明本发明的详细内容及其具体实施方式。
参见图1,本发明的人脸面部关键表情识别方法,采用一台高清彩色摄像头,可以是外置的,也可以是机器本身自带的,将摄像头置于动漫设计人员所使用的计算机屏幕上方即可。这样,动漫设计人员能够通过软件提供的窗口实时看到自己的表情动作,从而可以实时调整CG角色的效果。
本发明的具体步骤如下:
(1) 调用摄像头厂商提供的SDK(Software Development Kit,,即软件开发工具包 )获得拍摄到的视频;
(2) 调用开源Open CV库(Open Source Computer Vision Library,跨平台计算机视觉库)的相关函数进行人脸识别,得到人脸所在的矩形区域;
(3) 在视频图像的每一帧中,截取该矩形区域的图像作为后继处理的原始图像;
(4) 根据人脸固有的特征,截取人脸所在矩形区域的上1/5至1/3部分作为眉毛所在的区域进行如下处理:
(4.1)根据图像的颜色空间,将图像转变为灰度图像,并进行直方图优化;
(4.2)对灰度图像采用Ostu最优阈值变换方法,将图像转变为黑白二值图像;
(4.3)对二值图像采用数学形态学的膨胀、腐蚀操作,去除图像的噪点,获得更清晰的分割效果;
(4.4)由于眉毛的特殊性质,对左右眉毛分别做横向投影,统计5个像素区域内黑色像素最多的区域,就是眉毛所在的区域,在该区域内计算黑色像素的重心,即得到眉毛的中心点;
(5) 截取人脸所在的矩形区域自上方1/3处开始,矩形区域1/5大小的区域作为眼睛所在的区域进行如下处理:
(5.1)同(4.1);
(5.2)同(4.2);
(5.3)同(4.3);
(5.4)本发明是实现眼睛睁闭的判断及眼球位置的定位;眼睛闭合时,眼睛区域大部分的颜色都是和肤色一致的;而睁开时,因为眼球是黑色的,和肤色差别很大;所以在二值化后,眼球能够很明显的区分开来;为此,分别对左右眼做纵向投影,统计每一列黑色像素的个数,设定一个阈值,大于此阈值的列认为是眼球所在的列,小于则认为不是眼球所在区域;如果所有的列都低于此阈值,则认为该眼是闭合的,否则是睁开的;对睁开的眼睛,统计列的信息,长度大于设定值的列的集合,就是眼球所在的区域;计算该区域黑色像素的重心,即得到眼球的中心点;
(6) 根据嘴巴在人脸所在的位置特征,截取人脸所在的矩形图像的下1/3部分作为嘴巴的区域进行如下处理:
(6.1)利用OpenCV提供的肤色检测函数将区域中肤色部分和非肤色部分分割开来;
(6.2)对分割结果进行数学形态学的腐蚀、膨胀操作,去除图像噪点,得到更好的分割结果;
(6.3)利用OpenCV提供的轮廓跟踪函数得到嘴部轮廓的信息;由于有可能有噪声的影响,得到的轮廓信息不止一个,这时,考虑到嘴巴在嘴部区域内是面积最大的非肤色区域;所以,只保留面积最大的轮廓做为嘴巴可能的轮廓;遍历轮廓,即可得到最左边、最右边和最下边三个关键点的信息;
至此,得到两个眉毛、两只眼睛、嘴巴上的三个、共七个关键点的位置信息,通过和已制作好的CG角色面部对应点相关联,就可以实时得到CG角色的面部关键表情信息。
本实例采用的摄像头为Logitech HD Webcam C270高清彩色摄像头,能够提供800*600大小的单帧图像。采集到的图像如图2所示。
调用Open CV提供的人脸识别函数后,得到的矩形区域如图3所示,矩形用红色方框表示。
对于眉毛,取得眉毛所在区域图像,进行必要的预处理后,得到的图像如图4所示。以横轴中心为界,将图像分为左右两个部分,利用步骤4的方法就能够得到左右眉毛的重心坐标。
对于眼睛,同样的预处理方式得到的睁眼和闭眼图像分别如图5、图6所示。同样以横轴中心为界,将图像分为左右两个部分。利用步骤5的方法就可以分别区分左右眼是否闭合及眼球中心的坐标。
对于嘴巴所在的区域,利用Open CV提供的肤色识别函数,通过步骤6中的预处理后,得到的图像如图7、图8所示。其中,图7描述的是嘴巴闭合时的状态,图8则描述的是嘴巴张开的状态,嘴巴内部的黑色区域是舌头的表现。
至此,所有的关键点信息都已经得到,本实例将眉毛、嘴巴等5个关键点,以蓝色圆点的形式实时绘制到摄像头拍摄到的图像中去。对于眼睛,当睁开时,则在眼球处绘制蓝色圆点,否则不绘制。若干实例图如图9至图11所示。
在得到这些关键点的基础上,就可以将这些点同CG角色面部的相应位置绑定起来,从而实时得到动画制作人员所需要的各种表情。
以上所述仅为本发明的优选实例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。