首页 > 其他 > 详细

开源推荐 | 可实现门禁、AI测温敏捷开发的人脸识别应用套件

时间:2020-07-07 17:49:03      阅读:113      评论:0      收藏:0      [点我收藏+]

随着人脸识别技术的不断发展,尤其是在部分算法平台对外开放算法之后,人脸识别的应用门槛得到了极大降低。但是从算法到一款真正可落地的人脸识别产品,在完整的应用开发中,不仅需要考虑底层算法的运行逻辑,也需要上层业务逻辑完整自洽。而这个从0到1的过程,往往会让大部分中下企业及开发者,在项目商用化落地过程中无从下手。

因此,在这里推荐一款开源的人脸识别应用套件ArcFaceGo。基于该套件,可以快速甚至零代码搭建人脸识别闸机通行、刷脸考勤以及近来大火的人脸识别测温等应用。同时,利用它的开源属性,也完全能够在此基础上开发成一款符合自身业务需求的产品,并投入商用。

技术分享图片

【简单易用 ArcFaceGo****应用套件构成】

在应用套件中,已经内置了虹软视觉开放平台的离线人脸识别SDK。涵盖人脸检测、人脸比对、活体检测、人脸属性分析等一系列核心算法,即使无网络状态下也可以运行。在虹软视觉开放平台完成下载后,可以看到该应用套件由人脸识别软件APK、中心管理端两部分构成。

技术分享图片

中心管理端:拥有人员注册、考勤统计、出入查询等功能,也可以云端进一步对接已有的业务平台。

人脸识别设备端应用APK****:负责采集人脸信息、进行身份比对,并向中心管理端报备识别结果以及通知相关联通控制器。在该部分其代码中,已经针对人脸检测、人脸比对、活体检测等算法,模块化的集成了相应算法运转逻辑。开发者无需考虑各算法之间复杂运转流程,只需传入camera数据流,便可以回调识别结果。

同时,针对人脸图像传输、处理中需要用到的多媒体图像技术,在代码中也同样模块化的封装好了NV21、RGBA、BGR等不同颜色格式自动转化及图像的四字节对齐等功能。

在运行性能方面,该开源应用套件在底层算法逻辑中维护“人脸底库”,可以充分提升人脸识别速度,以RK3288 -10000人为例,相比在上层逻辑中进行人脸比对需要100ms?,而目前仅需10ms。

【适配灵活 可应用于各类实际场景****】

基于开源代码,开发者可以自行定义交互界面及交互逻辑,并开发应用于各类场景的人脸识别应用。比如智慧办公的人脸识别考勤机、智慧社区的人脸识别出入闸机、智慧商业的VIP迎宾系统、智慧医院的人脸识别挂号机、智慧酒店的人脸识别入住等等产品。

技术分享图片

1.针对具体场景,可视化适配硬件

不同场景的不同应用,也意味着需要适配不同的分辨率设备,适配单摄、双摄、宽动态等各类摄像头。ArcFaceGo****人脸识别应用套件提供了可视化的硬件适配页面,方便预览显示及识别设置。

用户也能自行改写该部分代码,譬如不希望用户自行调节相关参数,以至于影响识别效果,甚至可以将该部分功能进行封装,以免用户误触。

2.可供对接硬件的多种广播形式。

Action 描述
com.arcsoft.arcfacesingle.ACTION_IDENTIFY_SUCCESSFUL 人员识别成功
com.arcsoft.arcfacesingle.ACTION_IDENTIFY_SUCCESS_PERSON_SERIAL 人员识别成功后,会向外发送“personSerial”唯一标识号”
com.arcsoft.arcfacesingle.ACTION_OPEN_DOOR 开门(在人员识别成功后会发送该广播)
com.arcsoft.arcfacesingle.ACTION_CLOSE_DOOR 关门(发送开门广播后,延迟一段时间会发送该广播)
com.arcsoft.arcfacesingle.ACTION_FACE_DETECT_HAS_FACE 检测到人脸框
com.arcsoft.arcfacesingle.ACTION_FACE_DETECT_NO_FACE 人脸框丢失

场景1

在室内走廊或楼梯过道等光线不佳的地方,可以对接ACTION_FACE_DETECT_HAS_FACE和ACTION_FACE_DETECT_NO_FACE广播,在检测到人脸时打开补光灯,这样可以提高识别率。

场景2

在一些单次授权通过的场景比如取药房,可对接ACTION_IDENTIFY_SUCCESS_PERSON_SERIAL广播,在授权并且识别通过之后可以删除该人授权以达到目的。

【人脸识别测温机开发实例】

疫情期间,很多智慧门禁设备都会增加测温模组,在通过人脸识别实现身份权限管理的同时,一并测量体温。

目前这类产品的市场反响非常火热,无论是要实现抗疫常态化的国内,还是感染人数持续暴增的国外,都对该产品有迫切需求。

这款应用套件可以与测温模块快速集成,以实现测温结果与识别身份绑定的效果。具体如何实现,以下是代码示例。

以下是具体实现的代码示例,以主流的HTPA32x32d为例。

private ConcurrentMap<Integer, Float> temperatureMap = new ConcurrentHashMap<>();
?
private byte[] rawData = new byte[2048];
private ReadThread.ReadListener readListener = (data, size) -> {synchronized (temperatureLocker) {
? ? ? ?System.arraycopy(data, 1, rawData, 0, 2048);
? }
};
?
public void start() {
? ?ReadThread readThread = new ReadThread();
readThread.setListener(readListener);
readThread.start();
?
FaceEngine faceEngine = new FaceEngine();
Config config = new Config();
? ?faceEngine.setRecognizeCallback(this);
faceEngine.init(this, config);
}
? ?
@Override
public void onRecognizeComplete(RecognitionResult recognitionResult) {
? ?FaceInfo faceInfo = recognitionResult.faceInfo; ? ? ? ?
? ?if (recognitionResult.result == ErrorInfo.MOK) {
? ? ? ?if(temperatureMap.get(faceInfo.faceId)<=37.3) {
? ? ? ? ? ?//温度低于预警值并且识别成功,进行后续操作
? ? ? }
? } ?
}
?
@Override
public void onCameraPreview(byte[] bytes, ICamera iCamera) {
FaceInfo faceInfo = new FaceInfo();
faceEngine.faceRecognize(rgbData, irData, width, height, true, faceInfo);
?
if (faceInfo.faceId != -1 && temperatureMap.get(faceInfo.faceId) != null) {
? ? ? ?//把额头区域映射至32x32温度矩阵中,取出对应的温度
? ? ? ?float temperature = getTemperature(faceInfo.forehead, rawData);
? ? ? ?temperatureMap.put(faceInfo.faceId, temperature);
}
}

public class ReadThread extends Thread {private static final String HEIMANN_PATH = "/dev/ttyS2";
? ?private static final int BAUDRATE = 115200;
private static final byte[] command = {(byte) 0XEE, (byte) 0xE1, (byte) 0x01, (byte) 0x55, (byte) 0xFF, (byte) 0xFC, (byte) 0xFD, (byte) 0xFF}; ? ?
? ?private FileOutputStream outputStream;
? ?private FileInputStream inputStream;
? ?private Object locker = new Object();
? ?
? ?public ReadThread() {
? ? ? ?try {mSerialPort = SerialPort
? ? ? ? ? ? ? ? ? .newBuilder(HEIMANN_PATH, BAUDRATE)
? ? ? ? ? ? ? ? ? .parity(0)
? ? ? ? ? ? ? ? ? .dataBits(8)
? ? ? ? ? ? ? ? ? .stopBits(1)
? ? ? ? ? ? ? ? ? .build();
? ? ? ? ? ?mInputStream = (FileInputStream) mSerialPort.getInputStream();
? ? ? ? ? ?mOutputStream = (FileOutputStream) mSerialPort.getOutputStream();
? ? ? } catch (IOException e) {
? ? ? ? ? ?e.printStackTrace();
? ? ? }
? }
? ?
? ?public void sendCommand(byte[] data) {
? ? ? ?if (mOutputStream != null) {
? ? ? ? ? ?try {synchronized (locker) {
? ? ? ? ? ? ? ? ? ?mOutputStream.write(data);
? ? ? ? ? ? ? ? ? ?offset = 0;
? ? ? ? ? ? ? }
? ? ? ? ? } catch (IOException e) {
? ? ? ? ? ? ? ?e.printStackTrace();
? ? ? ? ? }
? ? ? }
? }
? ?
? ?@Override
? ?public void run() {
? ? ? ?super.run();
? ? ? ?while (!isInterrupted()) {
? ? ? ? ? ?int size;
? ? ? ? ? ?try {synchronized (locker) {
? ? ? ? ? ? ? ? ? ?if (mInputStream == null) {
? ? ? ? ? ? ? ? ? ? ? ?return;
? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ?size = mInputStream.available();
? ? ? ? ? ? ? ? ? ?if (size > 0) {
? ? ? ? ? ? ? ? ? ? ? ?mInputStream.read(rawData, offset, size);
? ? ? ? ? ? ? ? ? ? ? ?offset += size;
? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? }
?
? ? ? ? ? ? ? ?if (offset == rawData.length) {
? ? ? ? ? ? ? ? ? ?if (getListener() != null) {
? ? ? ? ? ? ? ? ? ? ? ?getListener().onDataReceived(rawData, offset);
? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ?offset = 0;
? ? ? ? ? ? ? }
? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ?if (offset == 0) {
? ? ? ? ? ? ? ? ? ?SystemClock.sleep(50);
? ? ? ? ? ? ? ? ? ?sendCommand(command);
? ? ? ? ? ? ? }
? ? ? ? ? } catch (IOException e) {
? ? ? ? ? ? ? ?e.printStackTrace();
? ? ? ? ? }
? ? ? }
? }
}

对该产品感兴趣的话可以到虹软视觉开放平台进一步了解哦~

开源推荐 | 可实现门禁、AI测温敏捷开发的人脸识别应用套件

原文:https://www.cnblogs.com/ccLqqy/p/13261549.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!