pyqt的人脸识别 基于face_recognition库

news2024/11/27 22:27:09

参考文献:

1、python face_recognition实现人脸识别系统_python facerecognition检测人脸-CSDN博客

2、cv2.VideoCapture()_cv2.videocapture(0)-CSDN博客

1、camera.py文件代码如下;目录如下

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QVBoxLayout
from PyQt5.QtGui import QPixmap, QImage
from PyQt5.QtCore import QTimer
import cv2
import face_recognition
import os

class VideoPlayer(QWidget):
    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):
        self.setWindowTitle("Video Player")
        self.setGeometry(100, 100, 800, 600)

        # 创建显示视频的标签
        self.label = QLabel(self)
        self.label.resize(640, 480)
        self.label.move(80, 40)

        # 创建按钮
        self.button = QPushButton('Play/Stop', self)
        self.button.move(350, 550)
        self.button.clicked.connect(self.toggle_video)

        # 加载已知人脸数据
        self.known_faces = {}
        for person_name in os.listdir("known_faces"):
            person_dir = os.path.join("known_faces", person_name)
            if os.path.isdir(person_dir):
                person_faces = []
                for filename in os.listdir(person_dir):
                    image_path = os.path.join(person_dir, filename)
                    image = face_recognition.load_image_file(image_path)
                    encoding = face_recognition.face_encodings(image)[0]
                    person_faces.append(encoding)
                self.known_faces[person_name] = person_faces

        # 初始化摄像头
        self.video_capture = cv2.VideoCapture(0)

        # 设置定时器,每隔33毫秒刷新一次
        self.timer = QTimer(self)
        self.timer.timeout.connect(self.next_frame)
        self.timer.start(33)

    def next_frame(self):
        # 读取视频流
        ret, frame = self.video_capture.read()

        # 转换为RGB格式
        rgb_frame = frame[:, :, ::-1]

        # 检测人脸
        face_locations = face_recognition.face_locations(rgb_frame)
        face_encodings = face_recognition.face_encodings(rgb_frame, face_locations)

        # 对比已知人脸
        for face_encoding in face_encodings:
            found = False
            for person_name, known_face_encodings in self.known_faces.items():
                matches = face_recognition.compare_faces(known_face_encodings, face_encoding, tolerance=0.4)
                if True in matches:
                    cv2.putText(frame, f" {person_name}!", (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
                    found = True
                    break
            if found:
                break

        # 将视频帧显示在标签中
        height, width, channel = frame.shape
        bytesPerLine = 3 * width
        qImg = QImage(frame.data, width, height, bytesPerLine, QImage.Format_RGB888)
        pixmap = QPixmap.fromImage(qImg)
        self.label.setPixmap(pixmap)

    def toggle_video(self):
        if self.timer.isActive():
            self.timer.stop()
        else:
            self.timer.start(33)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    player = VideoPlayer()
    player.show()
    sys.exit(app.exec_())

2、运行效果图

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JVM主要知识点详解

目录 1. 性能监控和调优 1.1 调优相关参数 1.2 内存泄漏排查 1.3 cpu飙⾼ 2. 内存与垃圾回收 2.1JVM的组成(面试题) 2.2 Java虚拟机栈的组成 2.3 本地方法栈 2.4 堆 2.5 方法区(抽象概念) 2.5.1 方法区和永久代以及元空…

listpack

目录 为什么有listpack? listpack结构 listpack的节点entry 长度length encoding编码方式 listpack的API 1.创建listpack 2.遍历操作 正向遍历 反向遍历 3.查找元素 4.插入/替换/删除元素 总结 为什么有listpack? ziplist是存储在连续内存空间,节省…

两部电话机怎样能实现对讲?直接连接能互相通话吗?门卫门房传达室岗亭电话怎么搞?

目录 两部电话机能直接连接吗?用三通头分出来一条电话线两部电话机用一根电话线直接连接能互相通话吗? 什么电话机可以直接连接两部IP电话机(网络电话机)可以直接连接两部普通电话机之间通过一个电话交换机也可以连接跨区域的两部…

代码随想录算法训练营第四十一天|343.整数拆分、96.不同的二叉搜索树

代码随想录算法训练营第四十一天|343.整数拆分、96.不同的二叉搜索树 343.整数拆分 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k > 2 ),并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 示例 1: 输入: n…

模仿银行系统的极简Java三层结构应用——存钱功能的实现

一,前提: 我们上次做了一个简易的银行系统,初步认识了java结构,目前该系统可以输入要用的数据并且输出。 二,目标: 我们这次的目标是实现一个简易的存钱功能,并输出存钱后的余额,…

【JavaSE】搞定String类

前言 本篇会细致讲解String类的常见用法,让小伙伴们搞定String类~ 欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 目录 前言 常用的三种字符串构造 字符串长度length 字符串比较 比较 比较字符串的内容equals…

赢战2024!炼石天津落地暨开年冲锋启动会圆满成功

天津,因河而生,凭海而兴,京杭大运河穿城而过,黄崖关长城迤逦壮观。2024年3月8日,“炼石天津落地暨开年冲锋启动会”在天津圆满成功举行,天津天开发展集团有限公司、中国电信股份有限公司天津分公司、中国联…

LeetCode 94 二叉树的中序遍历

题目描述 二叉树的中序遍历 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 示例 1: 输入:root [1,null,2,3] 输出:[1,3,2]示例 2: 输入:root [] 输出:[]示例 3: 输入…

微信小程序-长按显示,点击空白区域关闭

<view bind:tap"closeLongAction"><view bind:longpress"openAction></view><view wx:if"{{longActionIsShow}}"> 长按显示的区域 </view> </view>openAction(e) {console.log(322,e);this.setData({longActionI…

Python疑难杂症(17)---介绍Python的pandas模块特点、安装以及series的创建和元素值的获取等。对于一维数据和使用有了初步的概念

1、定义 什么是Pandas&#xff1a;Pandas是Python中用于数据分析和挖掘的基础模块&#xff0c;它提供了丰富的功能和方法&#xff0c;使用 Pandas 包可以完成数据读入、数据清洗、数据准备、图表呈现等内容&#xff0c;使普通的非数据专业人员也能够处理和分析大型数据集&…

多传感器时间序列信号的无监督深度异常检测

论文地址&#xff1a;https://ieeexplore.ieee.org/abstract/document/9507359 论文源码&#xff1a;未开源 期刊&#xff1a;IEEE Transactions on Knowledge and Data Engineering 如今&#xff0c;多传感器技术被应用于许多领域&#xff0c;如医疗保健(HC)、人体活动识别(…

二.吊打面试官系列-数据库优化-Explain索引分析

1.如何定位慢SQL 我们知道数据库瓶颈80%都在查询上&#xff0c;数据库优化有一个比较重要的环节就是定位系统中的慢SQL&#xff0c;那么我们如何快速定位到哪些查询语句比较耗时呢&#xff1f;Mysql有自己的慢SQL定位功能 MySQL的慢查询日志&#xff0c;用来记录在MySQL中响应…

Postman 环境变量配置初始调用登录脚本赋值Token

效果 新建环境 切换 Environments 标签下 点击上面加号增加环境变量 使用环境变量 使用{{变量名}}引用变量使用 Pre-request Script 全局 一般授权接口都需要再调用接口前&#xff0c;进行登录授权&#xff0c;这里使用了全局的请求前脚本调用。 脚本示例 // 基础地址 var…

【火猫TV】NBA:赛季数据王总结,国王双雄爆冷入选

NBA常规赛已经全部结束,各项数据王诞生,我们发现不少新人球星开始挑大梁,他们用出色的发挥证明了自己的实力。下面,为大家简单盘点下各项数据的最佳球员! 得分王:东契奇(场均33.9分) 本赛季独行侠低开高走,东契奇保持了出色发挥,他场均贡献33.9分,比第二的字母哥场均多出3.5分…

CAN网络管理(网络节点)

什么是CAN的网络节点 网络节点是指连接到CAN总线上的设备或模块,每个网络节点都具有唯一的标识符,称为节点ID,用于在CAN总线上进行通信和识别。 如何判断CAN的网络节点是多少 可以根据DBC来定义查看, 以ADCU为例,域控作为主节点,一般外部的像雷达,camera的数据都是向…

Tomcat下载配置地址

IntelliJ IDEA是一个强大的集成开发环境&#xff0c;能够大大简化Java应用程序的开发和部署过程。而Tomcat作为一个流行的Java Web服务器&#xff0c;其与IntelliJ IDEA的整合能够提供便捷的开发环境&#xff0c;让开发人员更专注于代码的创作与优化。 在配置IntelliJ IDEA以使…

鸿蒙应用开发之滑动选择组件

前面学习了下拉选择菜单组件,现在来学习滑动选择组件,它是提供快速调节设置值,如音量调节、亮度调节等应用场景。也就是说,这个组件可以通过滑动条来设置对应的数值,而不需要用户手动输入数字。 比如像下面的界面: 可以用手滑动上面的滑块,就可以调节对应的数字。这个组…

OpenHarmony轻量系统开发【7】驱动之I2C显示OLED屏幕

7.1实验效果 Hispark WiFi开发套件又提供一个oled屏幕&#xff0c;但是鸿蒙源码中没有这个屏幕的驱动&#xff0c;我们需要自己去移植。 以下是移植效果&#xff1a; 接口&#xff1a;I2C 使用引脚&#xff1a;HI_IO_NAME_GPIO_13 、 HI_IO_NAME_GPIO_14 7.2代码 这里我直…

Webrtc 信令服务器实现

webrtc建联流程图 由上图可知&#xff0c;所谓的信令服务器其实就是将peer的offer/candidate/answer传给对端而已。这样的话实现方式就有很多种了&#xff0c;目前普遍的方式HTTP/HTTPS&#xff0c;WS/WSS。像webrtc-demo-peerconnection就是实现HTTP这种方式。本文使用WS&…

微信小程序订阅消息授权弹窗问题整理

文档 小程序订阅消息&#xff08;用户通过弹窗订阅&#xff09;开发指南 | 微信开放文档 1.报错10004 errCode: 10004errMsg: "requestSubscribeMessage:fail Invalid template id" 真机调试也不行 wx.requestSubscribeMessage({tmplIds: result,// 用户同意与否…