本发明涉及视频检测技术领域,特别涉及一种视频中人脸微笑表情的检测方法。
背景技术:
近几年来,表情识别技术在计算机视觉和模式识别领域逐步成为一个重要的研究热点,已经有越来越多的科研成果是基于图像或视频的表情识别算法和系统的。在机器视觉和模式识别领域,常用到十折交叉验证和OpenCV模块。
其中,十折交叉验证算法的英文名叫做10-foldcross-validation,用来测试算法准确性,是常用的测试方法。该方法将数据集分成10份,轮流将其中9份作为训练数据,1份作为测试数据进行试验。每次试验都会得出相应的正确率(或差错率),10次试验结果的正确率(或差错率)的平均值作为对算法精度的估计,一般还需要进行多次10折交叉验证(例如10次10折交叉验证),再求其均值,作为对算法准确性的估计。
OpenCV模块是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列C函数和少量C++类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口,该库也有大量的Python、Java and MATLAB/OCTAVE(版本2.5)的接口。这些语言的API接口函数可以通过在线文档获得。如今也提供对于C#、Ch、Ruby、GO的支持。
现有对视频中人脸进行检测的方法大多数是对人脸是否存在的检测,而对人脸表情识别的检测多数是在图像数据上进行检测,缺乏实时性。
技术实现要素:
针对现有技术的缺点与不足,本发明提供一种检测视频中人脸微笑表情的方法,能够实时进行笑脸检测,可应用于实时微笑检测方面的软件。
本发明采用如下技术方案来实现:一种检测视频中人脸微笑表情的方法,包括:
S1:随机采集人脸数据库的图片数据,并标记每张图片是否为微笑表情图片;
S2:设置比例选取训练图像与测试图像,对所设比例的训练图像进行预处理,将预处理后的训练图像输入人脸微笑检测模型进行训练;
S3:用十折交叉验证法处理训练数据,统计每次交叉验证的误差,取误差最小的模型为最终的人脸微笑检测模型,将S2中所设比例的测试图像输入最终的人脸微笑检测模型进行测试;
S4:加载OpenCV模块自带的人脸检测分类器,调用视频文件并展示后,使用OpenCV模块自带的函数进行人脸识别;
S5:逐帧捕获视频人脸图像并放大,加载最终的人脸微笑检测模型,并设置输出参数以调整最终的人脸微笑检测模型,最终的人脸微笑检测模型输出是否微笑的结果总和。
本发明与现有技术相比,其优点和有益效果在于:本发明结合开源OpenCV模块和sklearn人脸数据库,采用十折交叉验证算法升级模型精度,可实时进行人脸微笑检测,还能进一步对所检测的视频中人脸微笑表情图像进行统计,除此之外,该方法也可应用于多组图像数据的人脸微笑检测。
附图说明
图1是本发明一个实施例中人脸微笑表情检测方法流程图;
图2是十折交叉验证算法基本原理示意图。
具体实施方式
下面结合实施例及附图对本发明作进一步详细的描述,但本发明的实施方式不限于此。
本实施例检测视频中人脸微笑表情的方法,如图1所示,包括以下步骤:
S1:随机采集Sklearn人脸数据库中400张图片数据,并标记每张图片是否为微笑表情图片,具体为:从Sklearn上导入400张图像数据至本地电脑,并读取其中行列数,是否微笑表情图片则分别对应1与0。
S2:设置8:2的比例选取训练图像(也叫训练数据)与测试图像(也叫测试数据),对80%的图片数据(即训练图像)进行预处理,将预处理后的训练图像输入人脸微笑检测模型进行训练,具体为:按照8:2比例选取训练图像和测试图像,调用OpenCV的Ptr<FaceRecognizer>model=createEigenFaceRecognizer()函数,输入训练图像并给图像打标签,保存人脸微笑检测模型。
S3:用十折交叉验证法处理训练数据,十折交叉验证法基本原理如图2所示,统计每次交叉验证的误差,取误差最小模型为最终的人脸微笑检测模型,将剩余20%图片数据作为测试数据输入最终模型进行测试;具体为:移去一个已知采样点的数据,用其他采样点的数据来估计该点以检验插值精度,检验插值精度的误差包括误差序列、平均误差、平均绝对误差和均方根误差。选取误差最小模型(即最终的人脸微笑检测模型)后,将测试图像与标签输入到误差最小模型进行测试。
其中,检验插值精度的各种误差的计算公式分别如下:
1)误差序列(Error)
2)平均误差(Mean Error)
1)平均绝对误差(Mean Absolute Error)
2)均方根误差(Root Mean Square Error)
其中,Z0为采样值,Ze为对应点的估计值。
S4:加载OpenCV自带的人脸检测分类器,调用视频文件并展示后,使用OpenCV中的函数进行人脸识别;具体为:加载OpenCV自带的haarcascade_frontalface_alt.xml分类器,输入视频文件路径,使用函数detectMultiScale进行人脸识别。
S5:逐帧捕获视频人脸图像并放大,加载步骤S3训练好的最终人脸微笑检测模型,并设置主要输出参数调整该最终人脸微笑检测模型,最终人脸微笑检测模型输出是否微笑的结果总和。具体为:用capture.read()函数读取视频帧,对每帧图像进行灰度处理与直方图均衡化,放大获得的图像后输入预先构造好的最终人脸微笑检测模型,最终人脸微笑检测模型输出是否微笑的结果总和。前述主要输出参数指人脸微笑检测模型的参数,其中包括Opencv的createEigenFaceRecognizer()函数里的PCA主成分的维数num_components和预测时的阙值threshold以及detectMultiScale函数里面的参数,包括image、objects、scaleFactor、minNeighbors、flags、minSize和maxSize。
上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。