开箱即用的人脸识别算法大盘点

2020年09月01日 12:01    发布者:云台
人工智能领域最近几年的发展可以说是如火如荼,这里面既有创业者的磨刀霍霍,也有资本的一路执着狂跟,还有学生和程序员群体的热情追随。回顾人工智能领域从2012年的星星之火,到15年左右的疯狂态势,再到18年理性的声音初现。有人开始对人工智能抱有怀疑的态度,认为这一波AI并没有想象中那么强。但是,不可否认,人工智能真的在一些领域中得到了很好的落地,其中最典型的就是人脸识别的相关应用。现在我们乘车可以无票自动人证核验通行;通过人脸验证身份在线办各种证件手续,也不再需要跑到各个局去现场办理;还有很方便的手机人脸解锁等等。可以说,人脸识别还是一个真正实用的技术。人脸识别的流程介绍对于一个落地可用的人脸识别系统,一般要包含以下几个步骤:1) 人脸检测——将人脸从图像中检测出来;2) 人脸关键点检测——从检测到的人脸中检测关键点(landmark);3) 人脸对齐——根据人脸关键点,将人脸"扭正";4) 人脸特征提取——把"扭正"的人脸送进特征提取网络,产生特征向量(例如128维、512维的特征向量);5) 人脸比对——将人脸特征和底库里面存储的人的特征向量进行比较。
从上面的流程可以看到,一个真正work的人脸识别系统,是包含多个流程的。在多数场合,中间还需要加一个"活体检测"的步骤,也就是判断人脸是真的人脸,还是别人拿照片或者视频录像假冒的;如果你是从视频中检测人脸,还需要加一个"人脸质量分"判断,也就是判断一个视频序列中哪个人脸质量最好,然后将最好的这个人脸送入到人脸识别系统。有哪些可用的人脸识别算法在上面一节,我们简要介绍了如何做一个人脸识别系统。可以说,要做好这个系统还是需要很大工作量的。从算法层面,要解决特征提取模型、活体检测、人脸图像质量检测三块硬骨头。此外,还需要考虑如何优化低功耗、高性能等工程化问题。还好,现在有一些AI科技公司开放了成熟的人脸识别算法,可以让程序员很快可以完成部署。那么当前有哪些可用的免费人脸识别算法,目前市面上主流的开箱即用的人脸识别算法又有哪些呢?下边,小算农为大家整理一下。按照调用方式来看,主要分为两种:云服务API和离线SDK。云服务API云服务API本质上是"在线请求,返回结果",从功能上来说它是一个接口。多数人脸识别厂商将算法布置在云端,将API接口向有需求的公司开放。终端设备与云端连接后,人脸识别过程都在云端进行,消耗云端算力,本地端只需要上传照片,接收结果。云服务人脸识别API的优势主要有:轻量级,集成方便,基本上任何语言都可以通过Http调用云服务API;多为APP或一些网页在使用。当然,凡事都有两面性,云服务API也有不少劣势:无法离线运行,需要网络流量成本,在一些特定场景下无法使用(无网络、无法访问公网的企业机构);云端API厂商只能在较少调用量下(基本是产品测试阶段),提供免费使用。一旦规模化商用,尤其是App端等场景下大规模调用收费高昂;受网络影响大,受网络稳定性影响较大,存在一定延迟,这样即使算法、算力再给力,也无法弥补网络的延迟。在人脸识别API云服务里,国内的BAT应该是最大的玩家,如果你打开阿里云、百度云、腾讯云,会发现他们提供了齐全的人脸识别相关的服务,另外,国内的"CV四小龙"、图普等众多公司也提供云端人脸识别API。大致价格如下表所示:表 1 人脸比对API价格表
可以看到如果单纯使用人脸比对,且调用量比较小的话,采用云服务API的价格还是可以接受的。但是,需要注意的是,表中仅是人脸比对的API价格,上文也提到了,一个完整的人脸识别系统至少还要包括人脸检测+人脸活体检测+人脸识别+人脸检索这四个过程,需要分别购买四个模块的API,加起来价格并不便宜。离线人脸识别SDK离线人脸识别SDK则是另外一种选择,SDK也就是软件开发工具包,算法厂商将人脸识别功能封装成SDK,分发给其他公司使用。接收方下载安装后使用,算法在本地端运行。相比云服务API,离线SDK主要有以下优点:本地运行,可离线使用,不受网络环境影响,响应速度快;人脸数据储存在本地,无需与服务端进行数据交互,安全性高;部分公司提供了免费的SDK(例如知名的虹软视觉开放平台提供的免费人脸识别SDK,全平台覆盖,文档齐全)国内提供人脸识别SDK的知名公司及其价格:表 2 部分主流厂商人脸识别SDK价格
笔者经过统计,发现提供离线人脸SDK的公司相比提供云服务API的公司要少很多。另外,商业公司的离线人脸识别SDK一般价格比较贵。不过,虹软视觉开放平台却有提供免费、离线的人脸识别SDK。它不仅支持商用、拥有多个平台版本,而且还提供了非常齐全的文档。知道虹软的人脸识别SDK是因为笔者在知乎搜索,有没有离线版的人脸识别的sdk可以使用的?看到大家在回答中都重点推荐了科创板上市企业虹软科技。于是笔者也去官网试了一下,发现该公司的确提供了四大平台的SDK,而且,最关键的是,它是完全免费的!
使用后发现,虹软提供了人脸识别、认证核验、活体检测三大主流应用的免费算法。
另外,对于不同平台的人脸识别SDK,虹软都提供了Demo代码。例如,下面是人脸识别SDK的安卓Demo(所有代码都在下载的安卓SDK里面,打开Android Studio加载项目即可编译安装)。其中人脸识别Demo的主页如图所示,因为是Demo所以相对简单。
下边是人脸属性识别的效果页面,从图片可以看出,算法检测出了人脸、估计出了年龄、性别、人脸三个角度,是否是活体以及特征提取和相似度的计算。
另外,笔者也尝试了Ubuntu版本的人脸识别以及Windows版本的人证合一的SDK,发现调用起来都非常的方便,官方写的Demo代码也非常的简洁易懂。总结经过小算农的总结,从性价比来看,离线SDK使用本地算力可以做到完全免费商用。而云服务API是基于云端算力,很难真正免费开放,尤其是用户规模基本都在几十万甚至上百万、上千万的APP产品应用中,云端调用的收费还是比较高昂的。从应用场景来看,云端API受到网络条件制约。对于追求低时延,稳定高效、用户体验的闸机门禁、刷脸考勤、人脸测温通行等产品应用中,也更推荐离线SDK。因此综合来看,虹软视觉开放平台的免费离线人脸SDK,是一个比较不错的选择。顺便提一个细节,笔者自己在尝试用虹软SDK搭建一个应用时,遇到了关于"活体检测和人脸特征值提取多线程调用"的小疑问。于是,通过工单系统提交了技术支持需求,不到1天时间就得到了相关技术人员的1对1辅导,毕竟是科创板上市企业。