【附源码】基于opencv+pyqt5搭建的人脸识别系统

文章目录

  • 前言
  • 一、人脸检测
  • 二、人脸识别
    • 1.训练识别器
    • 2.识别人脸
  • 三、界面相关
    • 1.Qlabel展示图片
    • 2.表格跟随内容而增加和减少
    • 3.选择图片文件
    • 4.警告框
  • 四、源码获取
  • 总结


前言

人脸识别技术作为人工智能领域的一颗璀璨明珠,正逐渐渗透到我们生活的每一个角落,从智能手机的解锁到机场的快速通关,从金融交易的安全认证到智慧城市的高效管理,它正以其独特的优势和强大的功能,为我们的生活带来前所未有的便捷与安全。本篇文章将借助opencv和pyqt5在本地搭建自己的人脸识别系统,编码不易,源码请私聊我有偿获取或点击这里获取。运行结果大概如下:
主界面
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


一、人脸检测

这里直接用opencv来进行人脸检测,代码如下:

 self.face_detor = cv2.CascadeClassifier(cfg.face_det_xml)  # 加载人脸识别级联分类器
 faces = self.face_detor.detectMultiScale(img, 1.15, 4)  # 找出图像中所有的人脸

需要注意的是,这里传入的是灰度图


二、人脸识别

1.训练识别器

要进行识别,首先我们需要提前训练识别器,这里给出了三种识别器,可自由选择,代码如下

if cfg.face_recoger_type=="LBPH": #当识别器类型制定为LBPH时
   self.recoger=cv2.face.LBPHFaceRecognizer_create()  # LBPH识别器
   self.conf= 100  
elif cfg.face_recoger_type=="Eigen": #当识别器类型制定为Eigen时
   self.recoger=cv2.face.EigenFaceRecognizer_create()  
   self.conf = 4000 
elif cfg.face_recoger_type=="Fisher":
   self.recoger=cv2.face.FisherFaceRecognizer_create()  # Fisher识别器
   self.conf=4000 
self.recoger.train(photos, np.array(lables))  # 识别器开始训练

2.识别人脸

识别器训练完成后,我们便可以直接拿来进行人脸识别,这里给出了人脸检测+识别的所有代码,代码如下:

img_gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #转为灰度图
faces = self.face_det(img_gray)  # 找出图像中所有的人脸
roi_face_=img.copy()
if len(faces)>0: #当检测到人脸时间才去进行识别,否则直接退出
    x, y, w, h = faces[0] #人脸的左上坐标和宽高
    roi_face = img_gray[y:y + h, x:x + w]
    roi_face_ = img[y:y + h, x:x + w]
    roi_face=cv2.resize(roi_face, (self.cfg.imgw, self.cfg.imgh))  # 将当前帧缩放成统一大小
    label, confidence = self.recoger.predict(roi_face)  # 识别器开始分析人脸图像
    if str(label) in self.users:
        name = self.users[str(label)]
    if confidence > self.conf:  # 忽略评分大于最高评分的结果
        name="unknown"
    print(f"识别结果:{name},{confidence}")


三、界面相关

主要的界面处理代码会在这里给出,注意,这里只给出的是逻辑代码,具体怎么用需要各位根据自己的情况结合使用。

1.Qlabel展示图片

当我们想在界面上展示图片,如opencv时,执行以下代码即可,仅限BGR图片,

rgb_img = cv2.cvtColor(face_img, cv2.COLOR_BGR2RGB)
qimg = QtGui.QImage(rgb_img, rgb_img.shape[1], rgb_img.shape[0], rgb_img.shape[1] * 3,
                    QtGui.QImage.Format_RGB888)
self.label_3.setPixmap(QtGui.QPixmap.fromImage(qimg))
self.label_3.setScaledContents(True)  # 图片自适应大小

2.表格跟随内容而增加和减少

由于表格的内容会或多或少,所以我们需要动态的管理表格行列,直接使用如下代码即可:

 self.num = 0
 for i in range(len(select_list)):  # 遍历每个框
     self.num += 1
     idx=select_list[i]

     item = QTableWidgetItem(str(self.num))
     self.tableWidget.setItem(self.num, 0, item)
     item = QTableWidgetItem(name)
     self.tableWidget.setItem(self.num, 1, item)
     item = QTableWidgetItem(idx)
     self.tableWidget.setItem(self.num, 2, item)

     if self.num >= self.tableWidget.rowCount() - 1:
         row_num = self.tableWidget.rowCount()
         self.tableWidget.setRowCount(row_num + 1)  # 添加一行
 if self.last_num > self.num:
     for i in range(self.last_num - self.num):  # 要删除的行数
         self.tableWidget.removeRow(self.num + 1)
 self.last_num = self.num

3.选择图片文件

这里一行代码解决,如下:

 filename, _ = QtWidgets.QFileDialog.getOpenFileName(None, "选择文件", os.getcwd(),
                                                            "All Files(*.jpg;*.png;*.jpeg;);;Text Files (*.txt)")

4.警告框

当我么需要给出警告,比如用户操作有误时,执行以下代码即可:

def send_warn(self, label):
    msg_box = QMessageBox(QMessageBox.Warning, 'Warning', label)
    msg_box.exec_()

label即为我们要弹出的警告框的内容。


四、源码获取

以上展示了本系统的主要处理代码,有能力的大佬可以结合自己想法实现自己的人脸识别系统。所有文章涉及到的代码均是自己手敲,编码不易,如果要完整代码的私聊我小偿获取或点击这里获取。


总结

以上就是本篇的全部内容,根据自己的想法,结合opencv+pyqt5实现了人脸识别系统,如有需求或想法(包括本项目或其他类似项目),欢迎私我。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/976110.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DeepSeek 提示词:高效的提示词设计

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…

2024-2025 学年广东省职业院校技能大赛 “信息安全管理与评估”赛项 技能测试试卷(一)

2024-2025 学年广东省职业院校技能大赛 “信息安全管理与评估”赛项 技能测试试卷(一) 第一部分:网络平台搭建与设备安全防护任务书DCRS:DCFW:DCWS:WAF: 第二部分:网络安全事件响应、数字取证调查、应用程序安全任务书任务 1&…

【Java】—— 二叉树

一、树型结构 树形结构是一种重要的数据结构,它类似于现实生活中的树的结构,由结点和边构成。树形结构具有以下特点: 树形结构是一种层次化的结构,由根结点、内部结点和叶子结点组成。根结点是树的顶部结点,没有父结点…

AWS - Redshift - 外部表读取 Parquet 文件中 timestamp 类型的数据

问题: 通过 Redshift Spectrum 功能可以读取 S3 中的文件,当读取 Parquet 文件时,如果列格式设置为 timestamp, 通过 psql 客户端读取会出现以下错误: testdb# select * from myspectrum_schema_0219.test_ns; ERROR…

即插即用Transformer、扩散模型、机器人规划、长文本检索增强生成 | Big Model Weekly 第57期...

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 01 ProTransformer: Robustify Transformers via Plug-and-Play Paradigm 近年来,基于Transformer的架构在机器学习的各个领域占据了主导地位。本文介绍了一种新颖的鲁棒性注意力机制,旨…

[ComfyUI] 【AI】如何获得一张人物图片的优质描述

在使用ComfyUI时,获取一张人物图片的优质英文描述非常重要,尤其是在涉及图像生成、自动化标签和多模态AI任务时。以下是一个简单的流程,可以帮助你快速从一张人物图片中提取出精确且高质量的英文描述。 1. 打开 Hugging Face 网站 首先,您需要访问 Hugging Face 提供的 J…

DeepSeek-R1:通过强化学习激励大语言模型的推理能力

摘要 本文介绍了我们的第一代推理模型,DeepSeek-R1-Zero 和 DeepSeek-R1。DeepSeek-R1-Zero 是通过大规 模强化学习(RL)训练的模型,在没有使用监督微调(SFT)这个前置步骤的情况下,展示了卓越的推…

springboot004网页时装购物系统(源码+数据库+文档)

源码地址:网页时装购物系统 文章目录 1.项目简介2.部分数据库结构与测试用例3.系统功能结构4.包含的文件列表(含论文)前台运行截图后台运行截图 1.项目简介 ​ 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的…

C++ Primer 容器适配器

欢迎阅读我的 【CPrimer】专栏 专栏简介:本专栏主要面向C初学者,解释C的一些基本概念和基础语言特性,涉及C标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级…

git上传gitee仓库---简单方便

安装完git以后 在资源管理器中右键: 选择Open Git Bash here 接着gitclone,从gitee上面复制链接: https://gitee.com/hekai666/python-deeplearning.git 粘贴过来: 回车: 然后在本地就会多出来一个文件: 打开文件夹以…

C语言(13)------------>do-while循环

1.do-while循环的语法 我们知道C语言有三大结构,顺序、选择、循环。我们可以使用while循环、for循环、do-while循环实现循环结构。之前的博客中提及到了前两者的技术实现。可以参考: C语言(11)------------->while循…

浏览器JS打不上断点,一点就跳到其他文件里。浏览器控制台 js打断点,指定的位置打不上断点,一打就跳到其他地方了。

关闭JavaScript 源代码映射,F12开发者模式 设置->偏好设置->源代码/来源->JavaScript 源代码映射。 肯定不是这个原因导致的,但这个办法可以暂时解决问题,点完这个东西就隐藏了webpack,有懂的来讲讲。 又浪费一个小时…

C++ 编程语言简介

C 是一种通用编程语言,它是作为 C 语言的增强而开发的,以包含面向对象的范例。它是一种命令式和编译语言。 C 是一种高级的通用编程语言,专为系统和应用程序编程而设计。它由贝尔实验室的 Bjarne Stroustrup 于 1983 年开发,作为…

山东大学软件学院nosql实验三

实验题目: 用Java做简单查询(2学时) 实验内容 用API方式,做简单查询。 实验要求 在以下要求中选择至少2个,使用Java语言实现数据查询,最终把数据输出到前端界面。 (1)找出年龄小于20岁的所有学生 &…

【NLP 38、激活函数 ④ GELU激活函数】

别盲目,别着急,慢慢走,没事的 —— 25.2.24 一、定义与数学表达式 GELU(Gaussian Error Linear Unit,高斯误差线性单元)是一种结合概率分布的非线性激活函数,其核心思想是通过输入值服从标准正…

突破性能极限:DeepSeek开源FlashMLA解码内核技术解析

引言:大模型时代的推理加速革命 在生成式AI大行其道的今天,如何提升大语言模型的推理效率已成为行业焦点。DeepSeek团队最新开源的FlashMLA项目凭借其惊人的性能表现引发关注——在H800 GPU上实现580 TFLOPS计算性能,这正是大模型推理优化的…

touchgfx的工作机制

touchgfx的工作机制 一.MVP软件架构 MVP的全称为Model-View-Presenter Model: 就是数据部分,在整个touchgfx应用中,只有一个Model类实例对象,它为所有的Screen屏幕界面服务,可以理解成是一个全局变量区,同时它还负责和后端系统通信 View: 就是UI界面部分,对应于View类,在整…

网站搭建wp

前置准备工作 需要下载Git,note.js,在官网上可以搜索并安装 搭建过程 这里借助hexo工具 1. 本地博客搭建 首先创建本地文件夹,并在该文件夹里面创建一个叫做hexo的文件夹在该文件夹中选择Git Bash 进入hexo官网将五条指令用bash运行运行…

现场可以通过手机或者pad实时拍照上传到大屏幕的照片墙现场大屏电子照片墙功能

现场可以通过手机或者pad实时拍照上传到大屏幕的照片墙现场大屏电子照片墙功能,每个人都可以通过手机实时拍照上传到大屏幕上,同时还可以发布留言内容,屏幕上会同步滚动播放展示所有人的照片和留言。相比校传统的照片直播功能更加灵活方便,而…

MySQL 主从复制原理及其工作过程

一、MySQL主从复制原理 MySQL 主从复制是一种将数据从一个 MySQL 数据库服务器(主服务器,Master)复制到一个或多个 MySQL 数据库服务器(从服务器,Slave)的技术。以下简述其原理,主要包含三个核…