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

3次阅读

共计 1093 个字符,预计需要花费 3 分钟才能阅读完成。

最近有合作公司的项目需要服务端人脸识别的开发,于是就用了公司的人脸识别 SDK 开发,由于之前对服务端开发介绍的资料比较少,正好这次又做了这个项目,花了几天的开发,这里就简单分享一下个人的见解。
影响性能的几个关键点
1、人脸检测
人脸检测接口就是可以把一张图片的人脸照片图,经过 FaceEngine 的处理,检测出人人脸框信息。检测模式有两种,image 模式和 video 模式,image 模式对于人脸检测准确率比较高,但性能没有 video 模式高。video 模式适用于在视频流模式下,在视频流模式有更快的处理性能和更好的人脸框稳定性。Video 模式下,处理一帧图片在 10 毫秒内,所以在 30 帧的视频中,可以轻松的对每帧进行人脸检测。

2、特征提取
特征提取是在检测出人脸框的基础上,寻找出该人脸最具特别性的描述,该描述可被传输和保存,在 ArcFace2.0 中,一个特征占用 1032 字节,特征提取要花 100-150 毫秒,所以每帧都做特征提取是不可行的,但借助 TrackID,可以做到一张人脸只要提取一次人脸特征。
3、人脸比对
人脸比对即特征比对,对两张人脸照片图分别提取特征,然后进行比较,获取相似度。该比对的时间是微妙级的,但在实际的应用过程中,往往是几千个特征甚至几万个特征进行比对,所以处理时间要成倍的增加。假设处理一个特征需要 3 微妙,那么在 5 万的特征库中进行比较,时间就是 3 *50000=150 毫秒
如何应对实时性高的场景
无感是永远的痛人脸识别经常用在一些实时性比较高的场合,比如门禁这类系统,客户往往要求我们要“无感”通过。这些实时性高的系统,通常利用网络传输视频流,服务器来处理再反馈结果,如果没有在网络,内存,CPU 上做足够的优化,往往带来的就是延迟高,响应慢。光看上面文字,大家可能没什么印象。咱们还是来一张图,一起来直观的感受一下耗时分析咱们来算算,假设 100 个设备,每秒钟 30 帧的照片,每帧 100K,那么每秒钟有多少流量?每分钟有多少?每天呢?按照标准的算法,每个设备每秒钟流量:1*30 帧 *100KB=3MB 换算到分的话 3MB*60 秒 =16MB/ 分 1 天的话 16MB*60 分钟 *24 小时 =23040MB/ 天 100 个设备的话 23040MB*100=2T/ 天,也就是每天有 T 级别流量哇,这么一算,一般的服务器和网络怎么受得了老规矩,咱们看图来分析下现状如上图,照片实时上传到服务器,服务器人脸检测和特征提取,服务器特征比对,排序,结果输出。全部交给服务器处理,服务器压力太了,让客户端分担点吧。
优化后 … 把人脸检测和特征提取全放客户端,客户端每次上传人脸特征,服务端做特征比对、排序,结果输出。

正文完
 0