大四暑假的时候,帮老师指导了一个本科大学生创新实验。主要目标是通过图像处理相关技术对人脸漂亮度进行分类。
当中一个非常重要的环节就是人脸的性别识别,这里将这个部分单独拿出来,借住OpenCv这个开源的图像处理库,在MFC框架下编写了一个人脸性别识别的程序,本套教程将具体介绍编写过程。
须要提前说的一点是这个程序是在大四的时候编写的,当时自己还没有正式的进行图像处理方面的研究,编程经验也不够丰富,因此程序仅仅用了OpenCv提供的较为经典的人脸检測和人脸识别算法,在精确度、程序设计、异常机制处理上可能显得不够完好。
在制作这套教程之前我并没有刻意去完好它,一是想好好审视下自己两年前的编程水平,二是保持程序的简洁性。使广大读者更easy看懂。教程编写完毕后,我会再花些时间来完好自己当年这个处女作。
一、程序效果演示
首先给出程序的终于效果:
从图中能够看出程序一共分为例如以下几个模块:方法选择、误差补偿及初始化模块;视频性别识别模块。图像性别识别模块。辅助功能;图片显示区域;结果显示区域。
二、功能介绍
1、方法选择、误差补偿及初始化模块
这里一共同拥有三个控件:初始化button,方法选择复选框,误差补偿值。
初始化button与初始化事件相关联。主要是载入相关分类器(会在后面教程中具体介绍),这里的分类器主要包括一个人脸检測分类器以及三个性别识别分类器。单击初始化button。初始化完毕后程序会给出相应提示:
注意假设用户在尚未进行初始化的情况下进行其它操作,程序会弹出对话框提示用户先进行初始化:
紧接着是方法选择列表。这里面提供了四种人脸性别识别的方法供用户选择,各自是PCA变换、Fisher变换、LBP变换、支持向量机:
然后是误差补偿模块,用来补偿程序存在的一些固定误差,主要用在视频性别识别中,会在以后的教程中具体介绍。这里相同以一个列表控件的形式供用户选择:
2、视频性别识别模块
这个模块主要实现视频信号的性别识别,默认由摄像头採集视频。主要包括两个button,一个是開始button“打开视频”。还有一个是暂停button。功能非常easy,单击“打开视频”button,程序会自己主动检測当前设备上所安装的摄像头,并调用指定摄像头採集视屏,同一时候对视频进行人脸检測、性别识别,在图片显示区域显示实时的人脸检測结果,在结果显示区域显示性别识别结果。
这里注意的是模块中的暂停button具有复用功能。
由于这个程序具有两个功能,对摄像头视频进行性别识别以及对单张图片进行性别识别。当程序在处理视频是。这个button的功能是暂停/恢复当前视频;在对单张图片进行性别识别时,这个button的功能是自己主动读取目录下的下一张图片。
在视频处理时button的状态为:
在识别单张图片时button的状态为:
3、单张图像性别识别模块
这里相同包括两个button,一个“图片目录”button(这个button相同具有复用功能),一个静态文本框区域,注意着两个控件是相互关联的。
在对图片进行性别识别时。程序提供了两个工作模式:
模式一:选定一个目录,通过视频性别识别模块中的“下一张”button自己主动载入目录下全部图片。无需反复选择。
模式二:直接选择一个图片文件进行操作。
程序初始默觉得模式一,即目录模式。此时单击模块中的“图像目录”button,将会弹出对话框。提示我们选择一个目录:
我们在“双击此处转换模式”的静态文本框区域双击鼠标。将会切换到模式二:
此时button的文本变为“图片文件”,单击会打开一个对话框要求用户具体选择一张图片来进行处理:
注意这里两个模式下所弹出的文件对话框是不同的。再次双击可切换回原来的模式。
4、辅助功能模块
这部分模块中主要包括三个button:人脸批量切割、文件名称改动、方法验证。
这些都是我在编敲代码的过程中用到的一些辅助性功能。单击“人脸批量切割”button,会弹出一个文件选择对话框。提示用户选择一个目录。然后程序会自己主动检測目录下的全部图片文件,对其进行人脸检測,并将检測到的人脸区域图片批量保存到程序制定路径下。
相同,假设单击“文件名称改动”button,相同会弹出一个对话框,提示用户选择目录。然后程序会对全部图片的名称依照指定格式进行统一改动,并保存。
至于“方法验证”button。是一个測试button,主要是在开发程序的过程中用作调试button。
5、图片显示区域和结果显示区域
主要由一个picture控件和三个编辑框组成,用来显示当前的图像信息以及识别结果。
当中“男/女识别率”这两个控件是用来在仿真试验中測试识别方法的效果的,将会在兴许章节进行具体介绍。
三、小结
本篇教程主要介绍了程序的终于效果,让大家对本教程的终于目的有一个大致的了解。
最后再次强调,这个程序是我本科阶段编写的,肯定会有非常多不足之处,在处理图像时也用的都是经典算法。假设你希望从教程中了解人脸检測、人脸识别等方面最前沿的算法,那这篇教程可能会让你失望。
但假设你希望了解MFC的入门级编程方法、图像处理的基本知识以及OpenCv的基本应用,相信你能从这套教程中学到一些东西。