OpenCV人脸检测及识别(深度学习)

article/2025/10/26 9:33:29

简介

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

更新

2023.06.02  初始文章为OpenCV自带的级联模型,准确率较一般。现升级为深度学习模型,准确率很高,仍建议先阅读原文了解下流程原理,更新内容放置于文章末尾。

环境

版本: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. 再次打开摄像头,获得人脸数据,模型返回编号,根据对应关系得出人脸是谁。

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

深度学习DNN

即使是深度学习,以上的人脸检测以及识别原理仍然是通用的,只不过用深度学习训练出来的人脸特征更为的精确,方法不同但是殊途同归

具体的深度学习原理很复杂,但从我们应用来讲是比较简单的。官方或某些权威组织会开放一些训练好的模型数据,我们需要使用较新版本的OpenCV的dnn模块加载模型,直接调用相关API就能进行检测、训练识别的等操作,简化了操作且极大提升了准确率。OpenCV可以从官方下载不需要自己编译,最好4.6.0版本以上。项目视频效果链接https://www.bilibili.com/video/BV17k4y1s7ys/?vd_source=259d215c2d8dd9e00d77ac0465b81909

最后

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


http://chatgpt.dhexx.cn/article/yP2x3pyb.shtml

相关文章

使用OpenCV简单实现人脸识别

简介 OpenCV是一个非常强大的计算机视觉库,现有的一系列特征检测和特征匹配算法,有很大一部分都已经在OpenCV的库中得以实现,故此我们只需调用OpenCV库中函数即可简单实现人脸识别。 开发环境 版本:Python 3.6 编辑器&#xff…

OpenCv 之(图片人脸识别)和 (摄像头读入)

##先来张人脸识别效果图: ##1、概述 人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术。用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行脸部的一系列相关技术…

(项目笔记)opencv人脸识别

Haar级联: Haar特征:边缘特征,线性特征,中心环绕特征,对角线特征 这些特征组合为特征模板,特征模板里有白色和黑色矩形,模板特征即为白色矩形像素和减去黑色矩形像素和。 Haar 特征的提取简…

【opencv】基于opencv实现人脸识别,原理代码部分

上一部分我们解决了环境问题,这一部分我们可以开始上代码,环境没有配好的可以参照上一篇博客:环境搭建解决: 下面先说一下原理: 一.原理部分 本文基于opencv来实现人脸识别,大致实现流程可以描述为&#…

基于opencv的人脸识别和检测

人脸识别作为一个热门项目,目前有多种方法实现,利用python和opencv来实现,是一个比较简单的项目。 1.环境配置 windows平台 python版本:3.8.6 pycharm版本:2019.1.2 Opencv版本:4.5.3 安装了python后…

C++ OpenCV【人脸识别人眼识别】

此文章仅对人脸位置进行检测&#xff0c;使用haar级联的方法[OpenCV自带] #include <iostream> #include <opencv2/opencv.hpp> #include <vector> #include <cstdio> using namespace std; using namespace cv;//定义7种颜色&#xff0c;用于标记人脸…

通过opencv实现简单的人脸识别

文章目录 通过opencv实现简单的人脸识别1.环境配置2.收集数据集3.人脸数据的处理4.通过神经网络训练模型5.进行人脸识别6.总结 通过opencv实现简单的人脸识别 ​ 网上有很多通过opencv实现的简单人脸识别&#xff0c;本文于其他文章差别不大&#xff0c;仅为作者复现代码后的一…

基于OpenCv的人脸识别(Python完整代码)

实验环境&#xff1a;python 3.6 opencv-python 3.4.14.51 建议使用 anaconda配置相同环境 背景 人脸识别步骤 图1&#xff1a;人脸识别流程图 人脸采集 采集人脸图片的方法多种多样&#xff0c;可以直接从网上下载数据集&#xff0c;可以从视频中提取图片&#xff0c;还可以…

使用opencv实现简单的人脸识别

一、opencv模块的使用 1、简介 opencv-python是一个python绑定库&#xff0c;旨在解决计算机视觉问题。使用opencv模块&#xff0c;可以实现一些对图片和视频的操作。 2、安装 安装opencv之前需要先安装numpy, matplotlib。然后使用pip安装opencv库即可。 3、导入 使用im…

opencv实现人脸识别(c++实现)

1 说明 本文章基于opencv VS2015 实现人脸检测 2 效果 可以直接打开摄像头对人脸进行识别&#xff0c;这些标识框也会跟随你的人脸移动。隐私问题&#xff0c;我这里对图片进行了识别。 3 相关类及函数介绍 opencv中文文档 3.1 cv::VideoCapture 官方文档说明 功能 &am…

11 OpenCV图像识别之人脸识别

文章目录 1 Eigenfaces1.1 建模流程1.2 示例代码 2 Fisherfaces2.1 建模流程2.2 示例代码 3 Local Binary Histogram3.1 建模流程3.2 示例代码 OpenCV 提供了三种人脸识别方法&#xff1a; Eigenfaces Eigenfaces是一种基于PCA&#xff08;Principal Component Analysis&#…

OpenCV人脸识别

OpenCV人脸识别与口罩检测 下载文件 人脸检测 人脸检测的检测方法主要有两类:基于知识(根据眼睛,眉毛,嘴巴,鼻子等器官特征及相互几何位置关系来检测)和基于统计(将人脸看作一个二维像素矩阵,通过大量人脸图像样本构造人脸模式空间,由相似度量判断人脸是否存在). 基于知识的…

【OpenCV】 人脸识别

目录 一&#xff1a;前言 二&#xff1a;人脸识别案例 实现步骤及完整代码 步骤1 灰度化处理 步骤2 将灰度图再次进行 行列压缩 步骤3 直方图均值化 步骤4 使用模型 对每一个像素点遍历 图像甄别 人脸识别案例 源码分享 结果测试&#xff1a;可对人脸框选识别 三&…

OpenCv人脸识别开发实战

一、OpenCV简介 OpenCV&#xff08;全称&#xff1a;Open Source Computer Vision Library&#xff09;&#xff0c;是一个跨平台的计算机视觉库。OpenCV可用于开发实时的图像处理、计算机视觉以及模式识别程序。 ​ OpenCV用C语言编写&#xff0c;它的主要接口也是C语言&#…

opencv-人脸识别

人脸识别即程序对输入的图像进行判别是否有人脸&#xff0c;并识别出有人脸的图像所对应的人。即我们常说的人脸识别一般包含了人脸检测和人脸识别两部分。下面对其在opencv中的相应模块进行分别介绍。 在opencv官网中&#xff0c;有许多推荐人脸在线数据集&#xff1a;http:/…

基于opencv的人脸识别

目录 一、OpenCV的简介 1、应用场景 二、人脸识别 1、人脸识别简介 2、人脸识别系统基本组成 三、人脸识别流程 四、主要代码注释 1、人脸采集函数 2、人脸训练函数 3、人脸识别函数&#xff08;注取消语音播报识别会流畅多&#xff09; 五、功能实现 六、演示视频…

最简单体验opencv人脸识别

所需软件&#xff1a;PyCharm 所需硬件&#xff1a;一台电脑 如果没有安装PyCharm&#xff0c;csdn上面搜一下安装教程就行&#xff0c;很简单的。 打开PyCharm&#xff0c;如果没有装opencv&#xff0c;则点击最下面的terminal&#xff0c;在终端下输入pip install opencn-p…

基于opencv的人脸识别(适合初学者)

简单易懂的人脸识别&#xff0c;学不会直接跪倒&#xff01; 一、人脸识别步骤 二、直接上代码 &#xff08;1&#xff09;录入人脸.py import cv2face_name cjw # 该人脸的名字# 加载OpenCV人脸检测分类器 face_cascade cv2.CascadeClassifier("D:/BaiduNetdiskDow…

手把手教你opencv做人脸识别(附源码+文档)

文章目录 一、环境二、使用Haar级联进行人脸检测三、Haar级联结合摄像头四、使用SSD的人脸检测五、 SSD结合摄像头人脸检测六、结语 一、环境 pip install opencv-pythonpython3.9 pycharm2020 人狠话不多&#xff0c;直接上代码&#xff0c;注释在代码里面&#xff0c;不说废…

SIFT算法实现图片匹配

SIFT (Scale-Invariant Feature Transform)是David Lowe 在1999发明的一种算法。它在世界范围内&#xff0c;作为图像对齐和对象识别的参考方法。此方法的鲁棒性能够检测场景的不同比例、角度和照明的因素。silx 中可用的实现使用 OpenCL&#xff0c;这意味着它可以在图形处理单…