C++开发人脸性别识别教程(1)——前瞻

2024-08-28 18:18

本文主要是介绍C++开发人脸性别识别教程(1)——前瞻,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  大四暑假的时候,帮老师指导了一个本科大学生创新实验,主要目标是通过图像处理相关技术对人脸美丽度进行分类。其中一个很重要的环节就是人脸的性别识别,这里将这个部分单独拿出来,借住OpenCv这个开源的图像处理库,在MFC框架下编写了一个人脸性别识别的程序,本套教程将详细介绍编写过程。

  需要提前说的一点是这个程序是在大四的时候编写的,当时自己还没有正式的进行图像处理方面的研究,编程经验也不够丰富,因此程序只用了OpenCv提供的较为经典的人脸检测和人脸识别算法,在准确度、程序设计、异常机制处理上可能显得不够完善。在制作这套教程之前我并没有刻意去完善它,一是想好好审视下自己两年前的编程水平,二是保持程序的简洁性,使广大读者更容易看懂。教程编写完成后,我会再花些时间来完善自己当年这个处女作。

  一、程序效果演示

  首先给出程序的最终效果:


  从图中可以看出程序一共分为如下几个模块:方法选择、误差补偿及初始化模块;视频性别识别模块;图像性别识别模块;辅助功能;图片显示区域;结果显示区域。

  二、功能介绍

  1、方法选择、误差补偿及初始化模块

  这里一共有三个控件:初始化按钮,方法选择复选框,误差补偿值。初始化按钮与初始化事件相关联,主要是加载相关分类器(会在后面教程中详细介绍),这里的分类器主要包含一个人脸检测分类器以及三个性别识别分类器。单击初始化按钮,初始化完成后程序会给出对应提示:

  注意如果用户在尚未进行初始化的情况下进行其他操作,程序会弹出对话框提示用户先进行初始化:

  紧接着是方法选择列表,这里面提供了四种人脸性别识别的方法供用户选择,分别是PCA变换、Fisher变换、LBP变换、支持向量机:

  然后是误差补偿模块,用来补偿程序存在的一些固定误差,主要用在视频性别识别中,会在以后的教程中详细介绍。这里同样以一个列表控件的形式供用户选择:

  2、视频性别识别模块

  这个模块主要实现视频信号的性别识别,默认由摄像头采集视频。主要包含两个按钮,一个是开始按钮“打开视频”,另一个是暂停按钮。功能很简单,单击“打开视频”按钮,程序会自动检测当前设备上所安装的摄像头,并调用指定摄像头采集视屏,同时对视频进行人脸检测、性别识别,在图片显示区域显示实时的人脸检测结果,在结果显示区域显示性别识别结果。

  这里注意的是模块中的暂停按钮具有复用功能。因为这个程序具有两个功能,对摄像头视频进行性别识别以及对单张图片进行性别识别。当程序在处理视频是,这个按钮的功能是暂停/恢复当前视频;在对单张图片进行性别识别时,这个按钮的功能是自动读取文件夹下的下一张图片。在视频处理时按钮的状态为:

  在识别单张图片时按钮的状态为:

  3、单张图像性别识别模块

  这里同样包含两个按钮,一个“图片文件夹”按钮(这个按钮同样具有复用功能),一个静态文本框区域,注意着两个控件是相互关联的。在对图片进行性别识别时,程序提供了两个工作模式:

  模式一:选定一个文件夹,通过视频性别识别模块中的“下一张”按钮自动加载文件夹下所有图片,无需重复选择。

  模式二:直接选择一个图片文件进行操作。

  程序初始默认为模式一,即文件夹模式。此时单击模块中的“图像文件夹”按钮,将会弹出对话框,提示我们选择一个文件夹:

  我们在“双击此处转换模式”的静态文本框区域双击鼠标,将会切换到模式二:

  此时按钮的文本变为“图片文件”,单击会打开一个对话框要求用户具体选择一张图片来进行处理:

  注意这里两个模式下所弹出的文件对话框是不同的。再次双击可切换回原来的模式。

  4、辅助功能模块

  这部分模块中主要包含三个按钮:人脸批量分割、文件名修改、方法验证。

  这些都是我在编写程序的过程中用到的一些辅助性功能。单击“人脸批量分割”按钮,会弹出一个文件选择对话框,提示用户选择一个文件夹,然后程序会自动检测文件夹下的所有图片文件,对其进行人脸检测,并将检测到的人脸区域图片批量保存到程序制定路径下。同样,如果单击“文件名修改”按钮,同样会弹出一个对话框,提示用户选择文件夹,然后程序会对所有图片的名称按照指定格式进行统一修改,并保存。至于“方法验证”按钮,是一个测试按钮,主要是在开发程序的过程中用作调试按钮。

  5、图片显示区域和结果显示区域

  主要由一个picture控件和三个编辑框组成,用来显示当前的图像信息以及识别结果。其中“男/女识别率”这两个控件是用来在仿真试验中测试识别方法的效果的,将会在后续章节进行详细介绍。

  三、小结

  本篇教程主要介绍了程序的最终效果,让大家对本教程的最终目的有一个大致的了解。最后再次强调,这个程序是我本科阶段编写的,肯定会有很多不足之处,在处理图像时也用的都是经典算法。如果你希望从教程中了解人脸检测、人脸识别等方面最前沿的算法,那这篇教程可能会让你失望。但如果你希望了解MFC的入门级编程方法、图像处理的基本知识以及OpenCv的基本应用,相信你能从这套教程中学到一些东西。

 

 

        

 

这篇关于C++开发人脸性别识别教程(1)——前瞻的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1115519

相关文章

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

Linux卸载自带jdk并安装新jdk版本的图文教程

《Linux卸载自带jdk并安装新jdk版本的图文教程》在Linux系统中,有时需要卸载预装的OpenJDK并安装特定版本的JDK,例如JDK1.8,所以本文给大家详细介绍了Linux卸载自带jdk并... 目录Ⅰ、卸载自带jdkⅡ、安装新版jdkⅠ、卸载自带jdk1、输入命令查看旧jdkrpm -qa

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

springboot简单集成Security配置的教程

《springboot简单集成Security配置的教程》:本文主要介绍springboot简单集成Security配置的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录集成Security安全框架引入依赖编写配置类WebSecurityConfig(自定义资源权限规则

MySQL Workbench 安装教程(保姆级)

《MySQLWorkbench安装教程(保姆级)》MySQLWorkbench是一款强大的数据库设计和管理工具,本文主要介绍了MySQLWorkbench安装教程,文中通过图文介绍的非常详细,对大... 目录前言:详细步骤:一、检查安装的数据库版本二、在官网下载对应的mysql Workbench版本,要是

C++ 中的 if-constexpr语法和作用

《C++中的if-constexpr语法和作用》if-constexpr语法是C++17引入的新语法特性,也被称为常量if表达式或静态if(staticif),:本文主要介绍C++中的if-c... 目录1 if-constexpr 语法1.1 基本语法1.2 扩展说明1.2.1 条件表达式1.2.2 fa

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

通过Docker Compose部署MySQL的详细教程

《通过DockerCompose部署MySQL的详细教程》DockerCompose作为Docker官方的容器编排工具,为MySQL数据库部署带来了显著优势,下面小编就来为大家详细介绍一... 目录一、docker Compose 部署 mysql 的优势二、环境准备与基础配置2.1 项目目录结构2.2 基

Linux安装MySQL的教程

《Linux安装MySQL的教程》:本文主要介绍Linux安装MySQL的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux安装mysql1.Mysql官网2.我的存放路径3.解压mysql文件到当前目录4.重命名一下5.创建mysql用户组和用户并修