商务服务
Springboot基于Milvus向量搜索引擎的大规模人脸搜索服务+源代码+文档说明
2024-11-12 01:22
### SpringBoot 基于向量搜索引擎及虹软人脸识别SDK的大规模人脸搜索

Springboot基于Milvus向量搜索引擎的大规模人脸搜索服务+源代码+文档说明

[TOC] #### 在线环境demo >为了方便大家测试效果,开放了一个在线环境供大家测试并降低了识别门槛和难度,使得照片也可以通过筛选,大家使用前无比观看视频,按照视频方式操作。由于服务器昂贵,资源有限,生产环境的配置为2C 8G,所以服务比较慢用户体验一般,若想测试性能,请在本地部署 视频地址:https://www.bilibili.com/video/BV1YY4y147jz/ 在线环境(演示):http://120.48.10.164:9528/ admin 123456 联系我:ycdtbs@163.com Github: https://github.com/ycdtbs/massive_faceSearch/tree/main ##### 在线环境说明 在线环境会收集大家数据,请勿上传敏感照片,项目测试数据集均来源于网络公开照片,利用Python脚本爬取,脚本存放于目录中 **在线环境仅用于演示 请勿上传自己数据** **在线环境仅用于演示 请勿上传自己数据** **在线环境仅用于演示 请勿上传自己数据** **在线环境仅用于演示 请勿上传自己数据** #### #### 前言 ​ 大四毕业时做毕业设计,用到了百度云人脸识别的API,当时制作了一个demo发到Bilibli上,之后不少同学来问我,于是制作了一个利用虹软SDK的人脸识别的包含人脸库管理的一套服务,一年半来有不少朋友前来咨询人脸识别相关的问题,由于博主本人工作业务不涉及这部分,所以一直无心研究。最近北京疫情在家有了一些时间,利用了几天时间完善了基于虹软的代码。 ​ 首先说明一下上个版本的缺陷是什么,首先之前的人脸数据缓存在了Redis当中,当我们解析出特征值时,将数据缓存到redis中,进行逐个必对和判断,**优化的方式也只是单纯的利用多线程和虹软的人基本特征(性别、年龄)**等进行分库,几百个人脸时还好,在上千个人脸时就会出现非常明显的延迟,用户体验效率非常低,因此基于上个版本只满足部分同学的毕业设计、小组作业的场景。偶然在工作中了解到了向量搜索引擎,于是考虑是否可以结合虹软的人脸识别SDK提取特征向量,然后进行分析处理。由于这个demo主要是搭建一个大规模人脸搜索和识别服务的demo,因此没有工程化,系统设计的也比较冗余,没有详细的功能设计,基本是博主想到什么做什么。最后跪求一个 **STAR** 重要的事情说三遍 **STAR STAR STAR** #### 系统架构 ![](https://chengpicture.oss-cn-beijing.aliyuncs.com/%E6%9E%B6%E6%9E%84%E5%9B%BE.png) #### 功能设计 ​ 系统功能模块较为简单,主要功能就是**新增人脸**和**人脸搜索**两个功能,其中新增人脸使用页面上传和压缩包批量上传两个方式,压缩包上传时文件名称为用户名,下面主要说明人脸搜索的功能流程 ##### Milvues ​ 在介绍前需要说明一下Mulvus ​ Milvus 向量数据库能够帮助用户轻松应对海量非结构化数据(图片 / 视频 / 语音 / 文本)检索。单节点 Milvus 可以在秒内完成十亿级的向量搜索 ​ 因此虹软的SDK只能提取向量及对比的功能,在大规模人脸识别中,需要搜索引擎对于人脸数据进行初步筛选到一个较小的范围后在利用虹软的SDK进行测试,值得一提的是,博主多次测试后Milvues返回的匹配率足以满足人脸匹配的要求,Milvus的安装部署和使用文档参考 https://milvus.io/cn/docs/v2.0.x ​ **特别说明的是**虹软提取的数组是一个经过归一后的1032长度的byte数组,我们需要对数组进行转换,去除前8位的版本号,并将1024长度的byte转为256长度的float向量,这部分可以利用Arrays提供的方法进行转换,代码中也有相应的工具类 ##### 人脸上传(单张) ![](https://chengpicture.oss-cn-beijing.aliyuncs.com/%E6%9C%AA%E5%91%BD%E5%90%8D%E6%96%87%E4%BB%B6.png) ##### 人脸上传(批量) ​ 批量上传采用本地打包压缩上传到服务器,后台进程进行解压,放到队列中处理,处理结果存储在ES数据库中,实时结果及处理进度通过Websocket发送至前台 ​ ![](https://chengpicture.oss-cn-beijing.aliyuncs.com/%E6%9C%AA%E5%91%BD%E5%90%8D%E6%96%87%E4%BB%B6%20%281%29.png) ##### 人脸搜索 ![](https://chengpicture.oss-cn-beijing.aliyuncs.com/%E6%9C%AA%E5%91%BD%E5%90%8D%E6%96%87%E4%BB%B6%20%282%29.png) #### 技术架构 ##### 前端框架 ​ 前端使用了Vue admin temlate 及 Element UI ##### 后端框架 ​ 后端框架主要是SpringBoot ##### 数据库 - mysql:存储用户信息,所有的数据以Mysql数据为准 - Elasticsearch:由于批量上传操作是异步的,用ES来收集日志并分析热点数据、成功数据、失败数据(当前版本未实现) - InfluxDB:用于涉及到数据源较多,事务处理过于麻烦,架构设计中以Mysql中的数据为准,以Mysql数据进行数据同步 - 阿里云OSS:负责存储裁切后的人脸照片,负责前台展示及缓存失效时重新加载 - Milvues:**项目的核心数据库向量搜索引擎** ##### 中间件 - ActiveMq:由于大规模人脸搜索服务需要大量的照片,一个个手动上传不现实,因此开发了批量上传的功能,需要ActiveMq进行异步上传 ##### 前后端交互 - restful:前后端交互主要使用restful接口 - websocket:负责将后端处理照片的过程及照片实时显示在前端 #### 安装部署 ##### 前端 - .env.development 文件配置后端交互地址,**只需要修改所有的IP+端口** 其他路径不要改变 ```properties # just a flag ENV = 'development' # base api VUE_APP_base_API = 'http://127.0.0.1:8080/' #VUE_APP_base_API = 'http://120.48.10.164:8080/' # uploadFile VUE_APP_base_API_UPFILE = 'http://127.0.0.1:8080/file/getImageUrl' VUE_APP_base_API_UPFILE_LIST = 'http://127.0.0.1:8080/file/getListImageUrl' VUE_APP_base_API_WEBSOCKET = 'ws://127.0.0.1:8080/api/pushMessage/' VUE_APP_base_API_UPFILE = 'http://120.48.10.164:8080/file/getImageUrl' #VUE_APP_base_API_UPFILE_LIST = 'http://120.48.10.164:8080/file/getListImageUrl' #VUE_APP_base_API_WEBSOCKET = 'ws://120.48.10.164:8080/api/pushMessage/' ``` VUE_APP_base_API:后端服务接口 VUE_APP_base_API_UPFILE:单个文件上传地址 VUE_APP_base_API_UPFILE_LIST:文件列表上传地址 VUE_APP_base_API_WEBSOCKET:Websocket地址 - 运行 ```shell npm install npm run dev 服务端口:ip:9528 ``` ##### 后端配置 - application.yml 主要是服务地址 - 修改Redis配置 - 修改Mysql配置 - 修改ActiveMq配置 - 修改Milvues配置 - 修改阿里云对象存储地址 - uploadFile配置本地缓存路径,主要是压缩包上传时需要用到 - FaceEngineConfig 类 - 配置虹软SDK的APID、SK,引擎地址 ##### 服务 - mysql - redis - activeMq - Elasticsearch(此版本不用安装) - InfluxDB(此版本不用安装) - Milvus ##### 数据库 - 执行face.sql ##### 人脸数据 - 利用python脚本自行爬取 #### 核心方法 ##### FaceEngineConfig 类 > 类的主要功能是配置faceEngine的认证配置信息 ```java public class FaceEngineConfig { public static final String APPID = ""; public static final String SDKKEY = ""; //public static final String SDKKEY = "";//linux public static final String LIB = "D:\face_web\ArcSoft_ArcFace_Java_Windows_x64_V3.0\libs\WIN64"; //public static final String LIB = ""; // linux } ``` ##### FaceEnginePoolFactory 引擎对象工厂类 > 引擎对象工厂类,负责维护一个对象池 ```java @Log4j2 @Component public class FaceEnginePoolFactory extends basePooledObjectFactory<FaceEngine> { /**
    以上就是本篇文章【Springboot基于Milvus向量搜索引擎的大规模人脸搜索服务+源代码+文档说明】的全部内容了,欢迎阅览 ! 文章地址:http://keair.bhha.com.cn/news/665.html 
     文章      相关文章      动态      同类文章      热门文章      栏目首页      网站地图      返回首页 康宝晨移动站 http://keair.bhha.com.cn/mobile/ , 查看更多   
最新文章
四秒推荐CF手游AA12圣诞怎么样 CF手游圣诞武器介绍坠舷
由于天气转暖,户外活动增加,过敏由于天气转暖,户外活动增加,过敏体质者要注意防止花粉过敏症及预防过敏性鼻炎、过敏性哮喘、
“莓”好“钱”景 采摘正当时
仙城镇在实施“百千万工程”过程中,围绕努力争创休闲农业和乡村旅游示范镇的目标,引进观光农业等新业态新产业,推进联农带农。
全球股市,巨震!
​​美国关税政策冲击波影响持续扩大,全球金融市场巨震,迎来“黑色星期一”。 A股收评:沪指失守3100点 4月7日,A股三大指数
平安返程 安全到家——清明假期返程提示
清明节假期返程高峰即将来临,道路交通压力增大。为确保大家安全、顺利返程,保定公安交警温馨提示:01.提前规划 错峰返程出行前
奶奶手机被路人“顺走” 两岁萌娃迈小短腿急追(图)手机截屏怎么弄「奶奶手机被路人“顺走” 两岁萌娃迈小短腿急追(图)」
  大家好,我是今天的主角小萌娃,我是个男娃儿,今年才两岁,和家里人暂住在杭州石桥。平时大家都很喜欢和我玩,还爱给我拍照
oppo怎么看手机温度手机温度「oppo怎么看手机温度」
随着智能手机的普及,手机性能的提升,手机发热问题也逐渐成为用户关注的焦点。OPPO作为国内知名的手机品牌,其手机在性能和用户
360手机N4S跑分多少 360N4S安兔兔跑分成绩评测图解360手机多少钱「360手机N4S跑分多少 360N4S安兔兔跑分成绩评测图解」
今天下午,360手机在广州召开了畅快用两天为主题的新品发布会,正式发布了N系列第二款新品----360手机N4S,售价仅1199元起。该机
有哪些一个手机两人一块玩的游戏 2024好玩的双人同屏手游合集双人联机手机游戏「有哪些一个手机两人一块玩的游戏 2024好玩的双人同屏手游合集」
与目前市场上的双人手游相比,双人同屏手游无疑更具互动性和竞技乐趣。玩家和好友共用一部手机,进行指尖上的对决。今天小编特意
雷蛇鼠标怎么设置宏雷蛇手机「雷蛇鼠标怎么设置宏」
雷蛇鼠标宏可以帮助你自动化重复的操作,提高游戏和办公效率。以下是两种常见的设置方法:方法1:使用雷蛇Synapse软件设置宏大多
蓝牙耳机和智能手表怎么同步使用智能手表怎么连接手机「蓝牙耳机和智能手表怎么同步使用」
蓝牙耳机和智能手表怎么同步使用  导语:这个对很多用户来说还是有点陌生,智能手表毕竟是个新鲜事物,对市场而言,还需要市场
相关文章