当前位置: 首页 > news >正文

【项目设计】Facial-Hunter

目录

一、项目介绍

二、开发环境以及技术

三、项目架构设计

3.1 项目总体架构

3.2 客户端架构

3.3 主服务端架构

3.4 处理服务端架构

3.5 数据库设计

四、FaceNet

五、代码实现


一、项目介绍

该项目是基于深度学习与负载均衡的人脸识别系统

该项目主要由三个部分组成:

  • 客户端:客户端进行人脸检测和图片预处理等功能
  • 主服务端:主服务端负责数据库操作以及负载均衡分发
  • 处理服务端:处理服务端通过模型推理进行人脸识别

二、开发环境以及技术

客户端(C++)

开发环境:Windows11、Qt Creator 

所用技术:Qt、OpenCV C++

主服务端(C++)

开发环境:腾讯云轻量应用服务器(CentOS7.6)、VSCode

所用技术:MySQL C Connector、iniparser、nlohmann/json、cpp-httplib、boost

处理服务端(C++)

开发环境:腾讯云轻量应用服务器(CentOS7.6)、VSCode

所用技术:iniparser、nlohmann/json、cpp-httplib、ONNX Runtime、OpenCV C++

模型(Python)

开发环境:Windows11、Anaconda3

所用技术如下:

三、项目架构设计

3.1 项目总体架构

各个机器上的客户端的图片请求都发送到主服务端中;主服务端读取数据库后形成新的请求,负载均衡的发送到各个人脸识别服务端中;人脸识别服务端将两张图片信息进行人脸比对(人脸识别)后将结果返回给主服务端;主服务端将多个结果整合后返回给客户端,由客户端进行显示

3.2 客户端架构

客户端主要用于向用户展示人脸检测、人脸识别的结果。定时器每隔20ms触发一次,通过摄像头获取一帧图像;再对该图片进行人脸检测并将检测出的人脸框出(标识);将处理后图像显示出来,可以实时看到人脸检测的处理结果;将框出的人脸截取出来,进行预处理后发送给主服务端;主服务端返回结果后,客户端显示人脸识别处理的结果3s(由定时器实现时间控制);只有显示人脸识别处理结果这一步骤结束后,才会重新触发向发送主服务器这一步骤

本文中选择Haar级联检测器用作人脸检测,其速度快、资源消耗低

3.3 主服务端架构

主服务端由MVC结构修改而来,但裁剪了视图层模块,添加了负载均衡模块。当请求发送到服务器上的主服务端时,将图片信息交付至控制器;控制器向模型层请求数据,模型层向MySQL数据库进行请求;当控制器拿到图片数据后,加上请求中的图片信息,共两张图片数据。形成新的请求,通过负载均衡模块,发送给当前负载最小的人脸识别处理服务端

数据库中同一人存在多张人脸图片信息,当第一张图片命中后会继续与其他图片进行对比,达到一定阈值才判断为同一人,此操作在系统层面提高判断准确率,若使用场景中请求较为频繁,可以仅判断一次

负载均衡模块采用最小连接数调度。在这种方法中,负载均衡器会周期性地(轮询)选择当前连接数最少的服务器处理新请求。确保每个服务器的负载相对均衡,因为连接数少的服务器更有可能能够及时响应新的请求,从而有效地利用整体系统资源

进行网络发送时,采用异步任务进行发送。可以提高程序响应性和并发能力,提高系统资源利用率。相对于thread多线程编程而言,简化多线程编程,简化并发代码的编写和维护

3.4 处理服务端架构

在人脸识别服务端架构中,采用ONNX Runtime进行模型的部署推理。当请求发送到人脸识别服务端时,调用由ONNX Runtime部署加载完成的人脸识别模型Facenet进行处理,处理完成后返回给主服务端

3.5 数据库设计

数据库中定义了两张表,分别为PersonnelSummary和FacialInformation,分别存储了所有的人员基础信息和人脸信息

字段名数据类型宽度是否主键描述
IDVarchar30ID编号
nameVarchar20姓名

目前在PersonnelSummary表中仅有name这一基础信息,是因为本系统设计识别成功后仅展示ID和name信息。若需展示更多新信息可后续自行添加

字段名数据类型宽度是否主键描述
IDVarchar30ID编号
faceDateMediumtext16MB人脸数据

四、FaceNet

主干特征提取网络

本项目中,FaceNet提供了两种主干特征提取网络的实现,分别是:Inception-ResNetV1和MobilenetV1

Loss

总体Loss由Triplet Loss和Cross-Entropy Loss组成,Triplet Loss用于进行不同人的人脸特征向量欧几里得距离的扩张,同一个人的不同状态的人脸特征向量欧几里得距离的缩小。Cross-Entropy Loss(交叉熵损失函数)用于人脸分类,具体作用是辅助Triplet Loss收敛。交叉熵损失在模型训练过程中表现出较好的稳定性和收敛性,特别是在优化过程中,其能够有效地指导模型在训练中逐步改进预测概率

数据集

本文中将CASIA-WebFace数据集划分为训练集、验证集,训练集用于训练模型的参数,验证集用于调整模型的超参数和监控模型的训练过程。本文中按照99:1的比例划分训练集与验证集,测试集则单独使用LFW数据集

resize

模型要求输入图像的大小固定为特定的尺寸。若原始图像的大小与模型期望的输入大小不匹配,则需将图像调整到合适的尺寸

同时,在训练过程中,为了保持输入数据的一致性,通常需要将所有图像调整为相同的尺寸。这样可以确保每张图像都有相同的特征表示,并且模型能够从中学习到一致的模式。本文中通过添加灰条进行不失真的resize

模型验证率与准确率

五、代码实现

GG-Bruse/Facial-Hunter: Facial Hunter (github.com)icon-default.png?t=O83Ahttps://github.com/GG-Bruse/Facial-Hunter

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 杂牌鼠标侧键设置
  • Prompt提示词技巧
  • virtualbox中的网络模式,网络设置,固定IP
  • 技术型企业运营术语
  • 【最佳实践】优雅地处理 Java 中的空指针
  • 【java系】记录一次ClassLoader.getResourceAsStream获取不到文件流
  • Linux上使用touch修改文件时间属性的限制
  • Unity同时启动多个Editor
  • 项目管理必备3大工具,助你的项目管理技能飞跃提升。
  • Git提交有乱码
  • ChatGPT 为何将前端框架从 Next.js 更换为 Remix以及框架的选择
  • WIFI | 硬件 基于MT7988D平台VC5772实现BE7200路由设计方案
  • 计算机组成原理(笔记3)
  • FEAD:fNIRS-EEG情感数据库(视频刺激)
  • CS61C 2020计算机组成原理Lecture03
  • __proto__ 和 prototype的关系
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • chrome扩展demo1-小时钟
  • Debian下无root权限使用Python访问Oracle
  • export和import的用法总结
  • FineReport中如何实现自动滚屏效果
  • github从入门到放弃(1)
  • Javascript设计模式学习之Observer(观察者)模式
  • Mithril.js 入门介绍
  • rc-form之最单纯情况
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • Spring核心 Bean的高级装配
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • windows下mongoDB的环境配置
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 从0实现一个tiny react(三)生命周期
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 基于遗传算法的优化问题求解
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 使用common-codec进行md5加密
  • 使用parted解决大于2T的磁盘分区
  • 手写双向链表LinkedList的几个常用功能
  •  一套莫尔斯电报听写、翻译系统
  • AI算硅基生命吗,为什么?
  • HanLP分词命名实体提取详解
  • Mac 上flink的安装与启动
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • #android不同版本废弃api,新api。
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • (07)Hive——窗口函数详解
  • (多级缓存)缓存同步
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (十六)串口UART
  • (一)插入排序
  • **CI中自动类加载的用法总结
  • .describe() python_Python-Win32com-Excel
  • .Family_物联网