基于开源模型的实时人脸识别系统(九):软件说明

news2024/10/6 14:28:00

续 人脸识别_CodingInCV的博客-CSDN博客

文章目录

  • 前言
  • 简介
  • 模型选择的要求
  • 总体流程图
  • 人脸检测
  • 人脸跟踪
  • 人脸质量
  • 人脸关键点
  • 人脸识别
  • 代码结构
  • 人脸识别的逻辑
  • 高阶设置

前言

前面的文章我们介绍了整个系统里的关键步骤,基于这些步骤我们就可以搭建出属于自己的人脸识别系统了。下面从软件的角度讲解实现的功能。
源码:https://mbd.pub/o/bread/ZJyTmZty

简介

本软件是基于开源的模型实现的一套动态人脸识别系统,该人脸系统会对人脸进行跟踪,并选择最优帧进行人脸识别,并统计人员出现的次数。人脸检测使用yolov8face, 跟踪使用sort, 数据存储使用sqlite, 人脸识别使用resnet50,人脸比对采用faiss. GUI使用Pyside6. 软件不仅可以识别出在库人员的出现次数,还在非在库人员第一次出现时,自动加入底库,从而实现对非在库人员的出现次数进行统计。
软件可以在CPU上实现实时,GPU上表现更流畅。
特点

  • 完全基于开源模型
  • 支持输入视频文件、USB摄像头、rtsp视频流
  • 注册信息和识别记录存储在sqlite,重启后不消失
  • 除了识别人员,还会累计其出现次数
  • 对于非注册人员,也会累计其出现次数
  • CPU可实时

模型选择的要求

为了实现CPU的实时,模型选择优先考虑模型的复杂度。

总体流程图

a29819dc23edd024bea2a2dd5d27692e_MD5

人脸检测

人脸检测即是从图像中定位出人脸的位置,本软件采用yolov8face算法,可参见:derronqi/yolov8-face: yolov8 face detection with landmark (github.com)

人脸跟踪

人脸跟踪是为检测出的人脸框分配ID,从而实现对同一个人的持续监控, 采用速度较快的SORT跟踪算法:abewley/sort: Simple, online, and realtime tracking of multiple objects in a video sequence. (github.com)

人脸质量

动态人脸容易出现大角度、人脸模糊等质量差的脸,而且每一帧都去做识别也很浪费计算资源,所有本软件引入了人脸质量的计算,主要包括人脸的角度、光照、模糊、大小。具体来源于论文:
ietresearch.onlinelibrary.wiley.com/doi/full/10.1049/ipr2.12008

人脸关键点

人脸关键点是人脸识别前的步骤,主要用于将人脸对齐。aliprf/KD-Loss: Facial Landmark Detection Using Knowledge Distillation-Based Neural Networks (github.com)

人脸识别

采用insightface/model_zoo at master · deepinsight/insightface (github.com)

代码结构

face_recognition_modules
—base_model 模型推理基类
— configs 全局配置
— database sqlite数据库相关炒作
— face_alignment 人脸关键点
— face_detection 人脸检测
—face_quality 人脸质量
— face_search 基于faiss的人脸搜索
— face_recognition 人脸识别,包括识别模型和识别服务
—tracker 人脸跟踪
—common 一些通用结构体和功能函数
models 模型目录
test_images 测试视频和图片
ui 窗口界面
face_detect_task 算法运行的线程
gui.py 程序入口

人脸识别的逻辑

  • 人脸最优帧
    每个跟踪对象,最多存储5张质量最好的帧,当触发识别时(达到设定帧数),送入识别队列,最优帧数清空,可以再次接收5张最好的帧。
  • 多次识别
    提取出人脸特征后,若比对分数超过阈值,则该跟踪对象识别成功,她的其他最优帧将不再进行识别;若识别未成功,则在该人员消失前,会继续进行识别,直到消失时,上报未识别成功。
  • 陌生人入库
    对于未识别成功的人员,将其最后一张抓拍照加入陌生人库
  • 识别次数统计
    人员首先与注册人员库进行比对,若失败,则与陌生人库比对。将比对的人员id到识别记录库中搜索,对出现次数+1

高阶设置

可以修改configs/global_config.py中的参数,设置识别阈值、最长识别时间、质量阈值、识别记录抠图的比例等

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

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

相关文章

Java 并发编程面试题——Lock 与 AbstractQueuedSynchronizer (AQS)

目录 1.Lock1.1.Lock 是什么?1.2.Lock 接口提供了哪些 synchronized 关键字不具备的主要特性?1.3.✨Lock 与 synchronized 有什么区别?1.4.Lock 接口中有哪些方法?1.5.哪些类实现了 Lock 接口? 2.AbstractQueuedSynchr…

使用YOLOv5-C3模块识别图像天气 - P8

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制🚀 文章来源:K同学的学习圈子 目录 环境步骤环境设置引用包全局设备对象 数据准备数据集信息收集图像预处理读取数据…

【Vue】模块基本语法

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟在这里,我要推荐给大家我的专栏《Vue快速入门》。&#x1f…

什么是WhatsApp群发,WhatsApp协议,WhatsApp云控

那么WhatsApp群控云控可以做什么呢? 1、获客 自动化引流,强大的可控性,产品快速拓客 2、导流 一键式傻瓜化自动加好友,群发,朋友圈营销 3、群控 一键式拉群好友,建群,进群 …

精通git,没用过git cherry-pick?

前言 git cherry-pick是git中比较有用的命令,cherry是樱桃,cherry-pick就是挑樱桃,从一堆樱桃中挑选自己喜欢的樱桃,在git中就是多次commit中挑选一个或者几个commit出来,也可以理解为把特定的commit复制到一个新分支…

大模型应用发展的方向|代理 Agent 的兴起及其未来(上)

“ 介绍了人工智能代理的历史渊源与演进,接着探讨了大型语言模型(LLMs)的发展,以及它们在知识获取、指令理解、泛化、规划和推理等方面所展现出的强大潜力。在此基础上,提出了一个以大型语言模型为核心的智能代理概念框…

[论文笔记]P-tuning v2

引言 今天带来第五篇大模型微调论文笔记P-tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Across Scales and Tasks。 作者首先指出了prompt tuning的一些不足,比如在中等规模的模型上NLU任务表现不好,还不能处理困难的序列标记任务,缺乏统一应用的能力。 然…

【学习草稿】背包问题

一、01背包问题 图解详细解析 (转载) https://blog.csdn.net/qq_37767455/article/details/99086678 :Vi表示第 i 个物品的价值,Wi表示第 i 个物品的体积,定义V(i,j):当前背包容量 j,前 i 个物…

Vue中的自定义指令详解

文章目录 自定义指令自定义指令-指令的值(给自定义指令传参数) 自定义指令 自定义指令:自己定义的指令,可以封装一些dom 操作,扩展额外功能(自动聚焦,自动加载,懒加载等复杂的指令封…

2006-2022年上市公司彭博ESG数据

2006-2022年彭博ESG数据 1、时间:2006-2022年 2、指标: Stkcd、Year、BloombergS、BloombergESG、BloombergE、BloombergG 3、指标解释: 彭博企业社会责任披露指数(Bloomberg ESG Disclo-sure Scores),包括ESG综合得分以及环境、社…

Mac使用CMakeList编译ImGUi项目

文章目录 创建项目1.下载ImGui2.下载GLAD3.下载GLFW4.编译项目5.运行截图 创建项目 我这里创建一个demo,opengl这个是可以跨平台的,所以在mac上使用ImGui的opengl3示例 1.下载ImGui 我使用的是docking版本的,这个版本支持停靠功能&#xff…

Python学习 day01(注意事项)

注释 变量 数据类型的转换 运算符 / 的结果为浮点数。若// 的两边有一个为浮点数,则结果为浮点数,否则为整数。 字符串

JavaScript - canvas - 将图片保存到本地

效果 示例 项目结构&#xff1a; 源码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title>将图片保存到本地</title></head><body><canvas id"canvas"></canvas><b…

第一百五十一回 自定义组件综合实例:游戏摇杆二

文章目录 内容回顾实现方法位置细节示例代码我们在上一章回中介绍了如何实现 游戏摇杆相关的内容,本章回中将继续介绍这方面的知识.闲话休提,让我们一起Talk Flutter吧。 内容回顾 我们在上一章回中介绍了游戏摇杆的概念以及实现方法,并且通过示例代码演示了实现游戏摇杆的…

《计算机视觉中的多视图几何》笔记(9)

现在进入本书的part 2了&#xff0c;标题是Two-View Geometry。第9-14章都隶属于part 2&#xff0c;这一部分涵盖了两个透视图的几何形状知识&#xff0c;这些视图可以像在立体设备中同时获取&#xff0c;或者例如通过相对于场景移动的相机顺序获取。这两种情况在几何上是等价的…

Java基于SpringBoot的校园博客系统

第一章&#xff1a;简介 本系统主要根据博主的需求做出分析&#xff0c;让博主更好的在线查看校园博客系统信息等&#xff0c;管理员后台管理系统数据等功能。从这个系统的操作来说&#xff0c;能够有效的进行信息的添加、修改、查询、删除一些校园博客系统信息&#xff0c;在…

【深度学习实验】前馈神经网络(七):批量加载数据(直接加载数据→定义类封装数据)

目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 0. 导入必要的工具包 1. 直接加载鸢尾花数据集 a. 加载数据集 b. 数据归一化 c. 洗牌操作 d. 打印数据 2. 定义类封装数据 a. __init__(构造函数&#xff1a;用于初始化数据集对象) b.…

基础课-排列组合

1.排列 2.组合 定义 从n个不同元素中&#xff0c;任意取出m(m<n)元素并为一组&#xff0c;叫做从n个不同元素中取出m个元素的一个组合 注意:1.不同元素 2.只取不排 3.相同组合:元素相同 3.把位置当成特殊元素 这个元素不一定入选的时候&#xff0c;把位置当特殊元素 4.插空…

【AI视野·今日Sound 声学论文速览 第九期】Thu, 21 Sep 2023

AI视野今日CS.Sound 声学论文速览 Thu, 21 Sep 2023 Totally 1 papers &#x1f449;上期速览✈更多精彩请移步主页 Interesting: &#x1f4da;Auto-ACD,大规模文本-音频数据集自动生成方法。 基于现有的大模型和api构建了一套大规模高质量的音频文本数据收集方法&#xff0c…

HTTP参数类型中的Query和Body参数

在接口中常见到query参数和body参数&#xff0c;那么它对应的传参方式是&#xff1f; ★ query查询参数 ---> params ---> route.params.参数 ★ body请求体参数 ---> data ---> route.query.参数 总结&#xff1a; GET请求只能传Query参数&#xff0c; POST请…