简介

最近做了一个人脸检测以及识别的程序,很多的文章都有比较详细的叙述,可以自行查找。但是个人觉得大部分文章都太细致了以至于初学者无法快速领会主干(不是否认质量),是侧重点问题。所以结合我遇到了一些问题,现在做个总结。本文主要叙述实现的思路,对大的方向有了解了,剩下的结合其他详细文章自然水到渠成。

环境

版本:Qt 5.12.6

IDE: QtCreator 4.10.2

编译器:MSVC2017 64bit

OpenCV版本:4.5.1

OpenCV版本

先上图

人脸检测和人脸识别是两个方面。一个是检测某个画面中有没有人脸,而另一个是要识别的出现的人脸是谁。所以作为一个强大的开源库,对于基本的人脸检测功能,直接下载的库已经可以实现此功能了,即opencv(图中标注1)。但是对于人脸识别高阶一点的功能这个版本是不支持的,所以需要opencv_contrib扩展版本(图中标注2),可以理解为在原来的库基础上增加了很多高级功能,人脸识别就包括在里面。但要保证基础库和扩展库的版本号要一致。所以想要人脸识别的功能就要把扩展库再编译进来。方式就是通过cmake工具,重新编译生成新的lib以及动态库dll,具体操作自行百度,按部就班操作也很简单。图中标注3就是编译后的库,有了库导入工程后,自然天高任鸟飞,看自己的发挥了。我使用的是msvc编译器编译,mingw理论是一样的,这里我没有尝试。这里编译的opencv源码用来生成库的编译器是MSVC2017 64bit。自己的人脸代码引用该库也要注意编译器的一致,你要是用个MinGW,还是个32位的编译器,那你不会快乐了。

人脸检测以及识别原理

人脸检测

人脸检测就是检测某个画面内是不是人脸,顶多再框起来醒目一点。人的面目基本的是结构相同的,比如眉眼鼻口耳,都是有的。类比代码就是对外接口相同,细节实现不同。大的接口相同,就是大的特征相同,官方把这种特征抽象到一个文件(比如haarcascade_frontalface_default.xml),可以理解为已经设置好了一些条件,当输入的一张图片符合这些条件就认为是人脸。自己获得区域返回值,通过位置可以把脸部圈起来。

人脸识别

对于人脸识别,不再是检测出来是人脸就行,而是还识别出来是谁。大道至简,其实就这样理解,有五个人你分别见一面,记住他们的面容以及姓名。然后单独挑出来一个,你说出来他们的姓名就算是识别出来了。然后把这个过程类比到计算机处理过程,五个人分别见面并记住他们的面容姓名,属于训练;单独挑一个人属于识别。

然后再深入类比一下,就是计算机如何进行训练以及识别呢?

训练:假设有三人xiaoA,xiaoB,xiaoC的照片,对应编号1,2,3;生成文档如下形式

xiaoA.jpg;1

xiaoB.jpg;2

xiaoC.jpg;3

opencv内部会读取照片以及对应编号,相当于把xiaoA.jpg包含的特征信息与编号1绑定, xiaoB的特征信息与2绑定,xiaoC也一样绑定。此时xiaoA又拿出一张自己的照片,让机器识别,因为是同一个人所以和xiaoA.jpg的特征信息很相似,机器返回绑定号1,即识别出是xiaoA。编号是数字,是自定义的,自己可以用map建立对应关系,比如编号1即是xiaoA

当然为保证准确率,每个人理论上的照片越多训练的效果越好(一般10个就可以了),识别会更准确。现在假设每个人三张照片训练的话,那么文档内容形式如下

xiaoA1.jpg;1

xiaoA2.jpg;1

xiaoA3.jpg;1

xiaoB1.jpg;2

xiaoB2.jpg;2

xiaoB3.jpg;2

xiaoC1.jpg;3

xiaoC2.jpg;3

xiaoC3.jpg;3

实践思路

结合以上,大致步骤如下

1. 使用opencv的方法打开摄像头,进行屏幕截图,每张截图对应一个编号,将图片路径以及编号写入文件例如data.txt,格式上文已经叙述。

2. 获得步骤一的文件data.txt,解析数据,训练模型

3. 再次打开摄像头,获得人脸数据,模型返回编号,根据对应关系得出人脸是谁。

除了步骤一需要写一些控制逻辑外,步骤二、三其实调用几个函数即可。具体的就需要自己对应去找了,也很简单。

最后

这篇是定位思路、实现方式的文章,没有细节实现,但是把脉络理清,按部就班,问题各个击破就可以。

Qt之OpenCV人脸检测以及识别相关推荐

  1. 人脸识别案例:【实战】opencv人脸检测+Haar特征分类器

    1 基础 我们使用机器学习的方法完成人脸检测,首先需要大量的正样本图像(面部图像)和负样本图像(不含面部的图像)来训练分类器.我们需要从其中提取特征.下图中的 Haar 特征会被使用,就像我们的卷积核 ...

  2. keras系列︱人脸表情分类与识别:opencv人脸检测+Keras情绪分类(四)

    人脸识别热门,表情识别更加.但是表情识别很难,因为人脸的微表情很多,本节介绍一种比较粗线条的表情分类与识别的办法. Keras系列: 1.keras系列︱Sequential与Model模型.kera ...

  3. 人脸识别系统——OpenCV人脸检测

    EduCoder:人脸识别系统--OpenCV人脸检测 第1关:图片基本操作 编程要求: 请在右侧编辑器中的BEGIN-END之间编写代码,完成如下要求: 导入openCV库(cv2): 读取路径 s ...

  4. 【EduCoder答案】人脸识别系统——OpenCV人脸检测

    简介 答案查询的入口网页版 其他各类实训答案的目录见这里 答案获取的方法简介见这里 并不是所有的关卡都有答案,有些只有部分关卡有 不要直接复制答案哦 人脸识别系统 -- OpenCV人脸检测 > ...

  5. 基于opencv的人脸检测与识别(python)(1)

    基于opencv的人脸检测与识别(python语言)(1) 人脸检测和识别技术就目前而言,已经相对成熟,各类算法层出不穷,这都归功于各位奋斗在一线的大佬的努力(站在巨人的肩膀上的感觉就是爽).本文是参 ...

  6. OpenCV与图像处理学习十七——OpenCV人脸检测(含代码)

    OpenCV与图像处理学习十七--OpenCV人脸检测(含代码) 一.人脸识别概要 1.1 人脸检测 1.2 人脸对齐(Face Alignment) 1.3 人脸特征提取(Face Feature ...

  7. python实现人脸检测及识别(1)---- 采集人脸数据

    本次项目是采用keras深度学习框架,训练人脸识别模型,采用opencv实时检测与识别周围的人脸,本文主要讲解如何采集训练集,本次代码在人脸识别的代码上添加了将识别的照片依次写入指定文件夹,并命名(0 ...

  8. 人脸检测和识别的开源库总结

    背景 人脸相关的任务有以下几种: 人脸检测(将图片中包含的人脸进行初步定位,以及关键点如眼睛.鼻子.嘴巴等更精细的定位,文章封面即为典型人脸检测结果): 人脸跟踪(视频中跟踪人脸位置变化): 人脸验证 ...

  9. 目标人脸检测与识别(计算机视觉)

    一.实验目的 通过python 语言编程设计人脸检测算法,以此人脸作为训练样本,训练目标人脸模型,进一步实现目标人脸的识别.通过上述编程促进学生理解并掌握人脸检测及识别的相关原理,同时培养学生的编程能 ...

最新文章

  1. Select和SelectMany之间的区别
  2. 开课吧python课程-开课吧的python课程怎么样,值得报名吗?
  3. opencv连通域去除小块面积_晋中市建成区面积排名,榆次区最大,榆社县最小,来了解一下?...
  4. SpringBoot 源码解析 —— SpringApplication 源码分析
  5. 突然发现缓存这么好用
  6. fmt.Println、fmt.Printf、fmt.Sprintf、fmt.Sprintln
  7. python语言例子_【Python】SimPy的使用示例-Go语言中文社区
  8. 虚拟机的磁盘扩大超过2T,发现超过2T的这部分无分区
  9. 在未来人类在计算机行业中扮演什么角色,刘慈欣:未来人类可能生活在计算机里...
  10. mysql5.6 慢查询_MySQL5.6 如何优化慢查询的SQL语句
  11. 用友erpU8V10服务器数据库整体迁移解决方法采用数据库附加方法
  12. iOS平台上的音视频即时通讯应用开发
  13. 使用JAVA基础语法做一个简易的发票管理系统
  14. 本科毕业设计——基于C++的棋类游戏自动生成工具的设计与实现
  15. 个人邮箱地址格式,如何能够正确的书写?
  16. html怎么画虚线空心圆,PS怎么画虚线圆圈 一个工具轻松搞定
  17. 数据安全建设的准绳和参考标准
  18. 初学C语言中的浮点数
  19. JavaScript的相关知识与问题
  20. Moment.js 用法

热门文章

  1. 简单模拟ATM的取款过程
  2. intrupt 6410裸机中断
  3. 全球及中国塑料助剂市场需求前景与十四五投资潜力研究报告2022年
  4. P10 JFrame 窗口
  5. [杂]记一次买笔记本电脑
  6. android项目:手机防盗软件
  7. Go结构体初始化的几种方式
  8. Polysh使用简介
  9. java 位或运算符_Java 运算符(位运算符)
  10. 开源?Highcharts JS 10.3.2 | Highcharts Javascript