虹软人脸识别SDK - Java服务端的那些事

最近有合做公司的项目须要服务端人脸识别的开发,因而就用了公司的人脸识别SDK开发,因为以前对服务端开发介绍的资料比较少,正好此次又作了这个项目,花了几天的开发,这里就简单分享一下我的的看法。算法

影响性能的几个关键点

一、人脸检测

人脸检测接口就是能够把一张图片的人脸照片图, 通过FaceEngine的处理,检测出人人脸框信息。检测模式有两种,image模式和video模式,image模式对于人脸检测准确率比较高,但性能没有video模式高。video模式适用于在视频流模式下,在视频流模式有更快的处理性能和更好的人脸框稳定性。Video模式下,处理一帧图片在10毫秒内,因此在30帧的视频中,能够轻松的对每帧进行人脸检测。服务器

二、特征提取

特征提取是在检测出人脸框的基础上,寻找出该人脸最具特别性的描述,该描述可被传输和保存,在ArcFace2.0中,一个特征占用1032字节,特征提取要花100-150毫秒,因此每帧都作特征提取是不可行的,但借助TrackID,能够作到一张人脸只要提取一次人脸特征。
网络

三、人脸比对

人脸比对即特征比对,对两张人脸照片图分别提取特征,而后进行比较,获取类似度。该比对的时间是微妙级的,但在实际的应用过程当中,每每是几千个特征甚至几万个特征进行比对,因此处理时间要成倍的增长。假设处理一个特征须要3微妙,那么在5万的特征库中进行比较,时间就是3*50000=150毫秒
ide

如何应对实时性高的场景

无感是永远的痛
人脸识别常常用在一些实时性比较高的场合,好比门禁这类系统,客户每每要求咱们要“无感”经过。这些实时性高的系统,一般利用网络传输视频流,服务器来处理再反馈结果,若是没有在网络,内存,CPU上作足够的优化,每每带来的就是延迟高,响应慢。
光看上面文字,你们可能没什么印象。我们仍是来一张图,一块儿来直观的感觉一下耗时分析

我们来算算,假设100个设备,每秒钟30帧的照片,每帧100K,那么每秒钟有多少流量?每分钟有多少?天天呢?
按照标准的算法,每一个设备每秒钟流量:1*30帧*100KB=3MB
换算到分的话3MB*60秒=16MB/分
1天的话16MB*60分钟*24小时=23040MB/天
100个设备的话23040MB*100=2T/天,也就是天天有T级别流量
哇,这么一算,通常的服务器和网络怎么受得了
老规矩,我们看图来分析下现状

如上图,照片实时上传到服务器,服务器人脸检测和特征提取,服务器特征比对,排序,结果输出。
所有交给服务器处理,服务器压力太了,让客户端分担点吧 。性能

优化后...


把人脸检测和特征提取全放客户端,客户端每次上传人脸特征,服务端作特征比对、排序,结果输出。优化

相关文章
相关标签/搜索