湖南视频网站建设/运营推广计划
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- ssd + opencv Eigenfaces 和 LBPH算法进行人脸监测和识别
- 1. ssd 目标监测
- 2.opencv的三种人脸识别方法
- 2.1 Eigenfaces
- 2.2 LBPH
前言
ssd + opencv Eigenfaces 和 LBPH算法进行人脸监测和识别
1. ssd 目标监测
其实不一定使用ssd,fasterRcnn, yolov 都可以~
所以假设我们已经实现了这个监测模型。那么我们直接进入识别环境。
2.opencv的三种人脸识别方法
OpenCV提供了三种人脸识别的方法,分别是LBPH方法、EigenFishfaces方法、Fisherfaces方法。
2.1 Eigenfaces
EigenFaces就是对原始数据使用PCA方法进行降维,获取其中的主成分信息,从而实现人脸识别的方法。opencv已经帮我们打包好了。
具体使用步骤:
1.cv2.face.EigenFaceRecognizer_create()生成EigenFaces特征脸识别器实例模型
2.应用函数cv2.face_FaceRecognizer.train()完成训练
3.cv2.face_FaceRecognizer.predict()完成人脸识别。
在使用EigenFaces模块完成人脸识别时,其流程如图1所示。
2.2 LBPH
LBPH(Local Binary PatternsHistograms)局部二进制编码直方图,建立在LBPH基础之上的人脸识别法基本思想如下:首先以每个像素为中心,判断与周围像素灰度值大小关系,对其进行二进制编码,从而获得整幅图像的LBP编码图像;再将LBP图像分为个区域,获取每个区域的LBP编码直方图,继而得到整幅图像的LBP编码直方图,通过比较不同人脸图像LBP编码直方图达到人脸识别的目的,其优点是不会受到光照、缩放、旋转和平移的影响。
由于这种方法的灵活性, LBPH是唯一允许模型样本人脸和检测到的人脸在形状、 大小上可以不同的人脸识别算法。
人脸录入
import cv2cap = cv2.VideoCapture(0)
face_detector = cv2.CascadeClassifier('D:/opencv\sources/data/haarcascades/haarcascade_frontalface_default.xml')
face_id = input('User data input,Look at the camera and wait ...')
count = 0while cap.isOpened():ret, frame = cap.read()if ret is True:gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)else:breakfaces = face_detector.detectMultiScale(gray, 1.3, 5)for (x, y, w, h) in faces:cv2.rectangle(frame, (x, y), (x + w, y + w), (255, 0, 0))count += 1cv2.imwrite("D:/opencv_test/" + str(face_id) + '.' + str(count) + '.jpg', gray[y:y + h, x:x + w])cv2.imshow('image', frame)k = cv2.waitKey(1)if k == 27:breakelif count >= 200:breakcap.release()
cv2.destroyAllWindows()
代码解析:
cap = cv2.VideoCapture(0):调用摄像头,参数0表示默认为笔记本的内置第一个摄像头
cap.isOpened():判断视频对象是否成功读取,成功读取视频对象返回True,这里作为循环一直执行的条件。
ret,frame = cap.read():按帧读取视频,返回值ret是布尔型,正确读取则返回True,读取失败或读取视频结尾则会返回False;frame为每一帧的图像。
faces = face_detector.detectMultiScale(gray, 1.3, 5):#第一个参数是灰度图像,第二个参数是尺度变换,就是向上或者向下每次是原来的多少倍,这里是1.02倍,第三个参数是人脸检测次数,设置越高,误检率越低,但是对于迷糊图片,我们设置越高,越不易检测出来,要适当降低
key = cv2.waitKey(1):等待键盘输入,参数1表示延时1ms切换到下一帧,参数为0表示显示当前帧,相当于暂停,让其等于27,27在电脑上表示Esc退出。
这里根据count的数值,录入200张结束,实际也可以录入更多,但也不是更多更好。
这里的保存的图片都固定放到了一个人脸图像集里面,里面的图片名为user.count.jpg
运行代码会在User data input,Look at the camera and wait …停下,这里是要输入,因为后期是需要用names数组来显示名字,所以这里的user名为0,1,2的下标,输入为0,1,2……
人脸训练完整代码:
import os
import cv2
import numpy as np
from PIL import Imagepath = 'D:/opencv_test/'
recognizer = cv2.face.LBPHFaceRecognizer_create()
detector = cv2.CascadeClassifier('D:/opencv\sources/data/haarcascades/haarcascade_frontalface_default.xml')def get_images_and_labels(path):image_paths = [os.path.join(path, f) for f in os.listdir(path)]face_samples = []ids = []for image_path in image_paths:img = Image.open(image_path).convert('L')img_np = np.array(img, 'uint8')if os.path.split(image_path)[-1].split(".")[-1] != 'jpg':continueid = int(os.path.split(image_path)[-1].split(".")[0])faces = detector.detectMultiScale(img_np)for (x, y, w, h) in faces:face_samples.append(img_np[y:y + h, x:x + w])ids.append(id)return face_samples, idsfaces, ids = get_images_and_labels(path)
recognizer.train(faces, np.array(ids))
recognizer.save('trainer/trainer.yml')
代码解析:
recognizer = cv2.face.LBPHFaceRecognizer_create():生成LBPH识别器实例模型
cv2.face_FaceRecognizer.train():对每个参考图像计算LBPH,得到一个向量,每个人脸都是整个向量集中的一个点
detector = cv2.CascadeClassifier(‘sources/data/haarcascades/haarcascade_frontalface_default.xml’):调用Opencv自带训练好的人脸检测器(默认)
OpenCV自带的人脸检测器在sources/data/目录下,根据每个人OpenCV安装的目录不同,这里也都是用的绝对地址
这里获取的id是user而不是count,这也就是我改善了那位博客主的代码问题,将对应路径下的所有人脸图片按对应的user名进行训练,保存训练好的数据集。
人脸识别流程:
step1:调用摄像头,获取视频流的图像帧,框出人脸,用训练好的人脸图像集去和视频中的人脸进行匹配,使用预测函数predict()获取置信评分。
step2:LBPH识别置信评分80以上就算是不合格,所以判断预测出来的置信评分,如果视频流中的人脸没有在训练集中,那么就表示成unknow。
step3:框出的视频流图像帧,把人脸框出来,显示置信评分和预测出来的人脸的标签,用标签去指定输出是图像集中的哪个人。
step4:释放摄像头资源并关闭窗口。
人脸识别完整代码
import cv2recognizer = cv2.face.LBPHFaceRecognizer_create()
recognizer.read('trainer/trainer.yml')
face_cascade = cv2.CascadeClassifier("D:/opencv\sources/data/haarcascades/haarcascade_frontalface_default.xml")
font = cv2.FONT_HERSHEY_SIMPLEX
idnum = 0cam = cv2.VideoCapture(0)
cam.set(6, cv2.VideoWriter.fourcc('M', 'J', 'P', 'G'))
minW = 0.1 * cam.get(3)
minH = 0.1 * cam.get(4)names = ['linluocheng','zhupengcheng']while True:ret, img = cam.read()gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)faces = face_cascade.detectMultiScale(gray,scaleFactor=1.2,minNeighbors=5,minSize=(int(minW), int(minH)))for (x, y, w, h) in faces:cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)idnum, confidence = recognizer.predict(gray[y:y + h, x:x + w])if confidence < 80:idum = names[idnum]confidence = "{0}%".format(round(100 - confidence))else:idum = "unknown"confidence = "{0}%".format(round(100 - confidence))cv2.putText(img, str(idum), (x + 5, y - 5), font, 1, (0, 0, 255), 1)cv2.putText(img, str(confidence), (x + 5, y + h - 5), font, 1, (0, 0, 0), 1)cv2.imshow('camera', img)k = cv2.waitKey(10)if k == 27:breakcam.release()
cv2.destroyAllWindows()
代码解析:
recongnizer.predict():一个预测函数,获取图像的标签和图像和训练集的相似度,也称置信评分。
cv2.putText():参数(图片 添加的文字 位置 字体 字体大小 字体颜色 字体粗细),将文字显示到图像上,中文会显示乱码。
format 格式化函数:基本语法是通过{}和:来代替之前前的%,有点类似C语言的格式符
round() 方法返回浮点数x的四舍五入值
转成灰度图并在上面框住人脸,用人脸和训练好的去比较,当置信评分达到一定程度,即为匹配成功,显示人脸和置信评分。
这里还是有一处是那位博客主的错误,就是format函数和前面的“”之前是用.隔开,而不是逗号.
相关文章:

【人脸识别】ssd + opencv Eigenfaces 和 LBPH算法进行人脸监测和识别
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言ssd opencv Eigenfaces 和 LBPH算法进行人脸监测和识别1. ssd 目标监测2.opencv的三种人脸识别方法2.1 Eigenfaces2.2 LBPH前言 ssd opencv Eigenfaces 和 LB…...

PMP项目管理项目成本管理
目录1 项目成本管理概述2 规划成本管理3 估算成本4 制定预算5 控制成本1 项目成本管理概述 项目成本管理包括为使项目在批准的预算内完成而对成本进行规划、估算、预测、融资、筹资、管理和控制的各个过程,从而确保项目在批准的预算内完工。核心概念 项目成本管理旨…...

Vue3视频播放器组件Vue3-video-play入门教程
Vue3-video-play适用于 Vue3 的 hls.js 播放器组件 | 并且支持MP4/WebM/Ogg格式。 1、支持快捷键操作 2、支持倍速播放设置 3、支持镜像画面设置 4、支持关灯模式设置 5、支持画中画模式播放 6、支持全屏/网页全屏播放 7、支持从固定时间开始播放 8、支持移动端,移动…...

操作系统经典问题——消费者生产者问题
今日在学习操作系统的过程中遇到了这个问题,实在是很苦恼一时间对于这种问题以及老师上课根据这个问题衍生的问题实在是一头雾水。在网络上寻找了一些大佬的讲解之后算是暂时有了点茅塞顿开的感觉。 首先第一点什么是生产者——消费者问题: 系统中有一…...

网络安全工程师在面试安全岗位时,哪些内容是加分项?
金三银四已经来了,很多小伙伴都在困惑,面试网络安全工程师的时候,有哪些技能是加分项呢?接下来,我简单说说! 去年我在微博上贴了一些在面试安全工作时会加分的内容,如下: 1. wooyu…...

前端整理 —— vue
1. vue的生命周期 经典爱问,感觉内容挺多的 介绍一下有哪几个 vue2中的生命周期有11个,分别为beforeCreate,created,beforeMount,mounted,beforeUpdate,updated,beforeDestroy&…...

HTML快速入门
目录HTML概念HTML基本格式基本语法常用标签1.文件标签:构成html最基本的标签2.文本标签:和文本有关的标签3.列表标签4.图片标签5.超链接标签6.表格标签7.表单标签HTML概念 HTML是最基础的网页开发语言,Hyper Text Markup Language࿰…...

哈希冲突
为什么会有哈希冲突?哈希表通过哈希函数来计算存放数据,在curd数据时不用多次比较,时间复杂度O(1)。但是凡事都有利弊,不同关键字通过相同哈希函数可能计算出来相同的存放地址,这种现象被称为哈…...

git添加子模块(submodule)
git添加子模块(submodule) 背景 有时候自己的项目需要用到别人的开源代码,例如 freertos 和 tinyusb 这个时候有两种选择 将开源的代码下载下来放到自己的 git 中管理 缺点:如果远端仓库更新,自己仓库的代码不会更新 将开源代码通过子模块…...

C++ 11 pair
class pair 可将两个 value视为一个单元。C标准库内多处用到了这个 class 。尤其是容器 map、multimap、unordered_map和 unordered_multimap就是使用 pair 来管理其以 key/value pair形式存在的元素。任何函数如果需要返回两个 value,也需要用到 pair,例…...

反向传播与随机梯度下降
反向传播实际上就是在算各个阶段梯度,每层的传入实际是之前各层根据链式法则梯度相乘的结果。反向传播最初传入的Δout是1,Δ通常表示很少量的意思,Δout1的时候这样在反向传播的时候算出来的dw和dx刚好就是当前梯度。深度神经网络中每层都会…...

一个conda引起的CPU异常
03/11/2023 登陆访问用户CPU异常 错误描述 早上向往常一样打开机器,突然感觉CPU有点"乱飙",因为是个人机器,没有别人使用,所以感觉有点问题。 排错流程 首先查看各个进程的资源占用情况 top # 按住P,以CPU的…...

java Date 和 Calendar类 万字详解(通俗易懂)
Date类介绍及使用关于SimpleDateFormat类Calendar类介绍及使用LocalDateTime类介绍及使用关于DateTimeFormatter类一、前言本节内容是我们《API-常用类》专题的第五小节了。本节内容主要讲Date 类 和 Calendar 类,内容包括但不限于Date类简介,Date类使用…...

扩展欧几里得算法及其应用
前言 由于数论的板子真的很抽象,也很难背,所以特此记录扩展欧几里得算法的板子和它的用途 本篇文章只涉及应用,不涉及证明,如需理解证明还请各位移步其他优秀的讲解! 扩展欧几里得算法 先粘一下板子的代码 typedef lo…...

JAVA练习75-全排列
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 前言 提示:这里可以添加本文要记录的大概内容: 3月11日练习内容 提示:以下是本篇文章正文内容,下面案例可供参考 一、题目-…...

Linux下Docker安装mysql-超详细步骤
安装Docker Engine官方参考文档:https://docs.docker.com/engine/install/centos/若之前有安装docker,需要先卸载之前的dockersudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \d…...

弹性存储-对象存储OSS部分
对象存储介绍 对象存储(object storage service,简称oss),具备与平台无关的rest api接口,可提供99.9999999999%(12个9)的数据持久性和99.995%的数据可用性。 OSS优势 功能介绍 存储空间bucke…...

强推!30个遥感数据下载网站整理分享
1、中国遥感数据共享网(http://rs.ceode.ac.cn/)国内存档周期最长的数据网站,对Landsat数据免费共享,也可订购国外商业卫星数据。注册账号,通过审核就可直接下载。2、中国资源卫星应用中心(https://data.cr…...

进程系统调用
进程系统调用 文章目录进程系统调用fork()进程创建:fock()fork函数fork用法僵尸进程孤儿进程vfork函数vfork与fork区别exec函数族exec函数族-何时使用?exec函数族语法exec函数族使用区别exit和_exit_exit和exit的区别wait和waitpidfork() 进程创建&…...

dubbo进阶——服务导出
服务导出 在这里记录一下对" Dubbo 导出服务的过程"的研究。 触发时机 public class ServiceBean<T> extends ServiceConfig<T> implements InitializingBean, DisposableBean, ApplicationContextAware, ApplicationListener<ContextRefreshedEv…...

【竞品分析】如何撰写竞品分析?竞品分析的基本结构?以及优秀的竞品分析案例
文章目录一、撰写竞品分析的意义二、撰写的节点三、竞品分析内容的基本结构四、总结本文对视频 如何撰写竞品分析(demo)进行了总结。一、撰写竞品分析的意义 竞品分析是指对现有的或潜在的竞争产品的优势和劣势进行评价。现在被广泛应用于互联网产品的…...

海思ubootsd卡协议
在start_armboot()函数中调用mmc_initialize(0)初始化mmc;最终调用到int hi_mci_initialize(unsigned int dev_num)函数;内容如下:static int hi_mci_initialize(unsigned int dev_num) {struct mmc *mmc NULL;static struct himci_host *host;unsigned int regval;unsigned l…...

nuxt3使用总结
目录 背景 安装 项目配置 路由 Tailwindcss引入 全局样式配置 css预处理器 安装 Tailwindcss 项目的配置 部署上线 seo优化 背景 新入职了一家公司,刚进入公司第一个需求就是先做一个公司的官网,需要使用vue写,作为祖师爷的粉丝…...

指向函数的指针详解,以及如何使用指向函数的指针变量做函数参数
指向函数的指针作为函数参数,是 C 语言实际应用中的一个比较深入的部分。 目录 一、什么是函数的指针 二、用函数指着变量调用函数 2.1举例说明 三、怎样定义和使用指向函数的指针变量 3.1定义指向函数的指针变量 3.2指向函数的指针变量详解 3.3通过指针变量…...

Spring——spring整合JUnit
JUnit定义: Junit测试是程序员测试,即所谓 白盒测试 ,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。 Junit是一套框架,继承TestCase类,就可以用Junit进行…...

保障信息安全:使用PyZbar库识别二维码图片可以快速获取二维码中的信息,保障信息安全。
目录 简介: 源代码: 源代码说明: 效果如下所示: 简介: 不用摄像头识别二维码可以应用在以下场景: 批量处理二维码图片:可以在服务器上使用PyZbar等库来批量处理二维码图片,例如读…...

从LeNet到ResNet:深入探索卷积神经网络
❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…...

计算机组成原理_总线标准
计算机组成原理总目录总线标准 总线标准是系统与各模块、模块与模块之间的一个互连的标准,就像我们用汉语来相互交流一样。 1. 系统总线 ISA总线的扩展插槽,其颜色一般为黑色,比PCI接口插槽要长些,位于主板的最下端。 可插接显卡&…...

蓝桥杯C/C++VIP试题每日一练之芯片测试
💛作者主页:静Yu 🧡简介:CSDN全栈优质创作者、华为云享专家、阿里云社区博客专家,前端知识交流社区创建者 💛社区地址:前端知识交流社区 🧡博主的个人博客:静Yu的个人博客 🧡博主的个人笔记本:前端面试题 个人笔记本只记录前端领域的面试题目,项目总结,面试技…...

树莓派测试wifi与eth速率
测试网速方法: 1.安装插件: 首先在树莓派端安装iperf3 sudo apt install iperf3PC端也需要安装iperf3,单击下面网址即可 下载网址 压缩包解压到桌面,文件内容如下图所示: 2.开始测速服务: 树莓派端在…...