完善个人信息

完善您的账号信息,便于为您提供更精准的服务

跳过
开发者类型:
企业名称:
联系人姓名:
真实姓名:
行业:
地区:

基于外接AI镜头模组 老旧安卓设备如何低成本升级人脸识别

2021-07-23

      随着人脸识别的日益普及,它的应用场景越来越广。近几年面市的门禁机、考勤机、校园班牌等终端,纷纷集成了人脸识别功能。但与此相对,相应场景下“服役”多年的老旧设备,由于早期产品设计往往没有摄像头,并且老旧设备算力也不足以支撑人脸识别算法的运行。但如果将这些老旧设备全盘替换,不仅成本昂贵还需要解决系统迭代兼容性问题。

      那么如何低成本让老旧设备焕发新生机?近期,笔者从市场上了解到,虹软视觉开放平台联合多家产业链合作伙伴,推出了一款可外接的AI摄像头模组,内置芯片和高精度算力,能够在原设备基础上轻松升级实现人脸识别。

图1.png

一、什么是AI摄像头模组?

      首先要介绍一下虹软视觉开放平台,它是业内知名的免费视觉AI算法提供方,开放了人脸识别、活体检测、人脸属性分析、人证核验等一系列算法SDK。支持免费商用,而且能够离线运行,在一些对信息安全要求高,或者不具备联网条件的封闭场景下,都非常适用。

      该AI摄像头模组概况来说,是一款能够急速上手的软硬一体化小型开发机,可以让AI算法落地更标准化,更小巧化。

      软件上,模组集成了虹软视觉开放平台ArcFace人脸识别算法及相应配套应用软件服务。算法能力上除了人脸比对、识别、属性检测、人证核验等多种基础功能外,还支持大面积遮挡下的人脸识别,抵御攻击方面具备RGB/IR活体检测双重保障,支持离线激活使用,同时自带图像质量检测功能,自动过滤画面模糊或小角度的人脸图像,提升识别准确率和识别速度。

      硬件上,模组集成了UVC摄像头和RV1109芯片,通过USB接口对外输出视频流数据,只需要将模组插入相应设备,即可工作。其中,自带RV1109芯片平台提供算力这点非常重要,不仅解决了老设备算力不足的问题,而且RV1109芯片性价比非常高,很适合门禁、闸机的改造。

      同时,该AI摄像头模组除了支持跨Android、 Windows、Linux等多系统运行,算法计算结果以JSON标准化输出,标准化接口可供平台移植、拓展业务。

      此外,这款AI摄像头模组可通过硬件适配参数调节,适配不同分辨率的设备,适用场景也非常丰富,像人员注册、人脸识别开门、考勤打卡、门禁权限管理、识别记录查询等功能,老设备都可以通过外接AI摄像头模组来实现。

二、项目开发详细介绍

      从虹软商务获取了其产业链伙伴的AI镜头模组,虹软已经把模组的服务软件部署进去了,同时也提供了Windows及Android的客户端Demo,如果没有特殊需求,安装客户端之后基本能做到即插即用。在我个人的开发过程中,因为项目本身有定制化需求,所以没有用虹软开放平台官方提供的客户端APK,而是自己做了Android的上位机开发。简单来说,项目首先需要获取UVC视频流,将视频图像显示在Android上位机上;其次利用RNDIS将模组和Android上位机建立通信;最后通过Arc服务获取到算法处理结果,并将结果显示到Android上位机,以下是我的开发过程。

2.1 USB摄像头SDK封装

      获取USB摄像头视频流需要借助第三方框架,我在Github上找到了一个开源的框架:https://github.com/saki4510t/UVCCamera,把项目代码clone到本地,使用AndroidStudio打开项目代码;修改“Application.mk文件,运行“ndkBuild”;编译成功后,得到“arm64-v8a”和“armeabi-v7a”两个架构的so包,并编译出jar包;或者执行assembleRelease任务,编译出libuvccamera-release.aar包,供后续项目使用,如下图所示:

图2.png

2.2 集成USB摄像头SDK

      新建Android项目,将“libuvccamera-release.aar”开发包添加到项目libs文件夹中,修改build.gradle文件,编译项目,这样开发包就集成好了,如下图所示:

图3.png

2.3 AI摄像头模组获取

      虹软AI摄像头模组类似于一个软、硬件结合的小型开发机。软件上,模组集成了人脸识别算法及应用软件,通过RNDIS(RNDIS是指Remote NDIS,基于USB实现RNDIS实际上就是TCP/IP over USB,就是在USB设备上跑TCP/IP,让USB设备看上去像一块网卡)服务和Android上位机通信;硬件上,模组集成了UVC摄像头,通过USB接口对外输出视频流数据,只需要将模组插入Android上位机,即可工作。

2.4 实现UvcCameraHelper获取UVC视频流

2.4.1 获取到UsbDevice

      我自己实现了一个UvcCameraHelper类,用来管理USB摄像头的生命周期。不同于集成好的Android设备摄像头,AI摄像头模组作为一个外接设备,需要使用“USBMonitor.java”类遍历获取,attach到对应的USB设备后,请求USB权限,如果权限通过,会有一个onConnect回调,表示USB设备已连接,可以进行下一步操作了,具体如下图所示:

图4.png

图5.png

图6.png

      如上图,onConnect方法回调成功以后,就可以对UsbDevice进行下一步操作了。

2.4.2 开启USB摄像头

      拿到UsbDevice后,借助UVCCamera类,就可以开启USB摄像头了,调用UVCCamera.open()和UVCCamera.startPreview()方法后,摄像头开启成功,使用TextureView作为显示视频图像数据,就可以在Android上位机实时显示摄像头图像数据了,具体实现如下图所示:

图7.png

2.5 接入AI摄像头模组

2.5.1 实现网络通信

      AI摄像头模组里面集成了Arc服务,用于检测、识别人脸,并将人脸结果对外输出。将 AI模组插入Android上位机USB接口上,Arc服务就会自启动了。

      通过RNDIS,我在Android端实现了一套Http和WebSocket通信服务,用来和AI模组进行数据传输。如下图所示,使用Retrofit作为网络通信框架:

图8.png

      如下图所示,创建API服务,和AI模组进行网络数据交互:

图9.png

      如下图所示,创建WebSoket服务,用于接收AI模组人脸识别数据:

图10.png

      通过以上步骤,就完成了AI摄像头模组和Android上位机网络通信功能。

2.5.2 网络数据交互

      Arc服务包含设备激活、人员注册、设置参数等API。

      如下图所示,调用激活接口,激活AI模组,才能够进行后续操作:

图11.png

      如下图所示,调用注册人员接口,将人脸库注册到AI模组中,用于后续人脸识别:

图12.png

      AI摄像头模组集成了人脸识别算法及算法核心业务,将模组摄像头对准人脸,开始识别人脸,并最终将人脸识别结果输出。如下图所示,我实现了一个WebSocket服务,用于接收人脸识别结果数据:

图13.png

2.5.3 数据显示

      拿到人脸识别结果数据,包括人脸框,人脸ID,人脸图片等。如下图人脸识别结果数据结构:

图14.png

      通过自定义View,使用Paint和Canvas类,绘制人脸框Rect数据;根据type类型判断识别结果,包括识别成功、识别失败等,并将人员信息显示在UI上。

      到这里,AI模组和Android上位机就接入好了。

三、注意事项

      由于虹软SDK只包含arm64-v8a和armeabi-v7a的so包,在编译USB摄像头SDK的时候,只能编译对应架构的so包;
      需要选择对应的USB设备ID,才能正常开启USB摄像头,注意不要选错;
      AI模组连接过程中可能会断开,需要做一些重连操作。

热门资讯

06.25
2021

虹软开放平台“AI创造营”西安站落幕,深度赋能开发者、助力AI普惠化

作为长期致力于视觉AI技术普惠化应用的虹软视觉开放平台,除提供免费、离线的人脸识别等算法外,也致力于打造系统化的开发者培训体系,为全行业输送高质量人才,打造促使产业变革的智能基座。

06.08
2021

虹软开放平台ArcFace4.1升级发布:人脸比对性能大幅提升,支持远距离活体检测

此次最新升级的ArcFace4.1算法大幅提升了人脸比对性能,多人脸检测流畅度显著提升,同时可支持远距离、小人脸活体检测,RGB/IR活体检测速度也进一步得到提升。

06.03
2021

支持零代码、打破开发壁垒,RV1109人脸识别应用套件正式开源

近日虹软视觉开放平台正式重磅开源了支持“零代码开发”的RV1109人脸识别应用套件源码,帮助企业快速、个性化的搭建符合自身业务需求的产品,并投入商用。

Title
引 导
客 服
行业交流