疫情肆虐,有效隔离是尽快战胜病毒的有效手段,多个地方政府都提出了严格的居民出行管理条例,例如杭州市余杭区2月3日发布了实行“十项从严”管控措施:
这给社区管理带来新的挑战,传统门卫盯人存在以下几个问题:
进出人员情况全凭人工记录,出现错漏,不能及时对频繁外出居民有效劝阻。
缺乏全局角度对居民隔离整体情况的掌控和度量,例如有哪些人频繁出入,出入总人数。
为了解决居民出入管理的上述几个问题,阿里云智能数据库向量检索团队免费提供一套高度兼容戴口罩场景下的人脸识别模型,并基于AnalyticDB的向量检索能力, 搭建了一套小区人员管理的解决方案, 这个方案将开源给社区。
通过该方案可以有效的提升当下疫情中的小区出入管理效率.同时我们免费提供AnalyticDB给用户用于与当前肺炎疫情相关的出入管理应用。下面首先介绍我们的方案,然后会对其中的人脸识别和AnalyticDB向量检索关键技术做详细介绍,方便开发者能够做二次开发,最后我们会附上开源地址。2.1小区人员管理解决方案功能
1)自动登记入册小区人口, 基本信息和人脸特征,界面如下:2)通过摄像头自动做人脸识别,返回来访者家庭的所有出入记录。方便社区管理者进行高效的出入管理,在当前疫情环境下, 人们普遍佩戴口罩, 去掉口罩会增加肺炎感染的风险, 所以本方案提供一套支持戴口罩情况下人脸识别的算法, 演示效果如下:3)可以通过人脸照片和结构化信息的任意组合来检索住户的来访记录,并提供统计分析能力,为小区管理者提供全局度量数据。2.2 应用架构总体设计
出入管理系统的总体架构如下图所示,前端界面通过HTML和javascript实现, 功能包含支持戴口罩场景下的人脸门禁, 通过人脸识别查询来访者的全部家庭成员2日内的出入记录, 人员登记, 后台通过人脸和结构化信息自由组合搜索来访记录等功能.。人脸识别模块将包含人脸的视频转换成人脸特征向量, 人脸识别模块主要使用了Seetafce引擎的人脸检测和人脸追踪模块和AnalyticDB团队自研的人脸识别, 眼部识别和口罩检测模型.AnalyticDB负责整个应用中的全部的结构化数据和人脸识别模块产生的人脸特征向量的存储和查询。3.1 针对疫情的人脸识别算法
算法流程如下图所示, 在人员登记过程中我们分别通过人脸识别模型和眼部识别模型提取登记人的面部整体特征和眼部特征, 并将提取的特征向量写入AnalyticDB。在查询过程中, 我们首先会通过口罩检测模型来检测来访人是否有佩戴口罩, 如果没有佩戴口罩, 我们会使用整体面部的特征在AnalyticDB中检索相似的特征, 如果有特征与来访者面部特征相似度满足阈值, 则返回对应的结果。如果来访者有佩戴口罩, 那么鼻子、嘴巴等特征会缺失, 使用整体面部特征提取模型无法准确的检索到正确的记录。这时我们会使用眼部识别模型提取来访者眼部, 额头等不会被口罩遮挡的部位的特征, 然后再AnalyticDB中检索之前保存的眼部特征。系统中使用的人脸识别模型, 眼部识别模型和口罩检测模型将全部开源给社区。经过测试口罩检测模型的准确率>99.5%. 人脸识别模型和眼部识别模型在学术界常用的数据集上的准确率如下表所示。
可以看到仅仅使用眼部特征, AnalyticDB的模型在LFW数据集上仍然有99+%以上的识别准确率.。
3.2 AnalyticDB向量版特性介绍
分析型数据库(AnalyticDB)是阿里云上的一种高并发低延时的PB级实时数据仓库,可以毫秒级针对万亿级数据进行即时的多维分析透视和业务探索。AnalyticDB for MySQL 全面兼容MySQL协议以及SQL:2003 语法标准, AnalyticDB forPostgreSQL 支持标准 SQL:2003,高度兼容 Oracle 语法生态. 目前两款产品都包含向量检索功能, 可以支持人脸, 人体, 车辆等的相似查询和推荐系统。目前AnalyticDB在真实应用场景中可以支持10亿级别的向量数据的查询, 100毫秒级别的响应时间. AnalyticDB已经在多个城市的安防项目中大规模部署。在一般的包含向量检索的的应用系统中, 通常开发者会使用向量检索引擎(例如Faiss)来存储向量数据, 然后使用关系型数据库存储结构化数据. 在查询时也需要交替查询两个系统, 这种方案会有额外的开发工作并且性能也不是最优。AnalyticDB支持结构化数据和非结构化数据(向量)的检索,仅仅使用SQL接口就可以快速的搭建起以图搜图或者图片+结构化数据混合检索等功能. AnalyticDB的优化器在混合检索场景中会根据数据的分布和查询的条件选择最优的执行计划,在保证召回的同时,得到最优的性能。在我们的出入管理系统中, 我们通过AnalyticDB实现了同时使用照片, 性别, 年龄, 起始时间, 终止时间来查询出入记录的功能。这样的以图搜图+结构化搜索功能, 可以通过一条SQL实现:select name, # 姓名
gender, # 性别
age, # 年龄
time, # 出入时间
l2_distance(feature, array[-0.017,-0.032,...]::real[]) as distance # 向量距离
from demo.person a, demo.face_feature b, demo.access_record c
where a.pid = c.pid
and a.pid = b.pid
and name = '张三' # 姓名条件
and gender = '男' and age = 30 # 性别条件
and time >= '2020-02-07' # 起始时间条件
and time <= '2020-02-09' # 结束时间条件
order by distance; # 用向量相似度排序
其中表demo.person存储了每个人的基本信息,demo.face_feature存储了人脸特征向量, demo.access_record存储了所有的来访记录. pid是每个人的独有ID。结构化信息+非结构化信息(图片)混合检索在实际应用中被广泛使用的. 例如在人脸门禁系统被部署在多个小区时, 我们使用一张表存储了所有小区的人脸特征, 在人脸检索时我们只需要检索当前小区的人脸特征. 在这种情况下, 使用AnalyticDB我们只需要在SQL中增加where 小区名 ='xxx' 就可以轻易实现。复制下方链接至浏览器打开或者识别下方二维码,即可查看项目开源详情:
https://github.com/aliyun/alibabacloud-AnalyticDB-python-demo-face-recognition
Java实战200例题
学习一门编程语言的同时,也要做一些练习以便逐步熟悉。为了让大家更好的可以把掌握,我们整理了200道Java的实战例题,附有源码解析过程,便于大家理解应用。点击文末“阅读原文”或识别下方二维码,立即练习。