基于近红外与可见光双目摄像头的活体人脸检测原理

人脸活体检测(Face Anti-Spoofing)是人脸识别系统中的重要一环,它负责验证捕捉到的人脸是否为真实活体,以抵御各种伪造攻击,如彩色纸张打印的人脸图、电子设备屏幕中的人脸数字图像及面具等。这些攻击手段若得逞,将对金融安全、门禁管理等造成严重威胁。

基于近红外与可见光双目摄像头的活体人脸检测利用红外摄像头下视频和大部分纸张不能呈现图像的特性,有效的防止了视频中伪造人脸的攻击;同时利用近红外摄像头和可见光摄像头下真实人脸与照片人脸纹理差异和颜色差异,可以有效地区分人脸是来自真实人脸还是照片中的伪造人脸。

Android实现双目红外活体检测

首先建议使用上图1 的USB 双目摄像头,能支持双头Type-C 接口UVC协议的,现在的手机平板大部分都是TypeC 接口了,千万别整公头USB口,需要特定的开发板才能开发调试。

然后 打通UVC协议摄像头预览,能正常预览才能取数据进行AI分析人脸识别等,目前Android 平台的UVC协议摄像头库最有名的就是日本大神的 saki4510t/UVCCamera,但是很久不维护了,文章最后的源码会集成到Demo 中

最后 就可以拿双目摄像头中的RGB和IR 图像进行活体检测人脸识别了。

    /**
* 初始化IR 摄像头
*
*/
private void initIRCamara() {
irCameraManager.initCameraHelper();
irCameraManager.setOpeningMultiCamera(true);
irCameraManager.setCameraView(binding.irCameraTextureView,true);
irCameraManager.selectUsbCamera(UsbCameraEnum.IR); irCameraManager.setOnDeviceStatuesCallBack(new UsbCameraManager.OnDeviceStatuesCallBack() {
@Override
public void onAttach(UsbDevice device) {
} @Override
public void onDeviceOpen(UsbDevice device, boolean isFirstOpen) { }
}); irCameraManager.setPreviewHeight(PREVIEW_HEIGHT);
irCameraManager.setFrameCallback(frame -> {
Size currentPreviewSize = irCameraManager.getCurrentPreviewSize();
int width = PREVIEW_WIDTH;
int height = PREVIEW_HEIGHT;
if (currentPreviewSize != null) {
width = currentPreviewSize.width;
height = currentPreviewSize.height;
}
Bitmap bitmap = DataConvertUtils.NV21Data2Bitmap(frame, width, height, 0, 0, false);
if (bitmap != null) {
faceVerifySetBitmap(bitmap, FaceVerifyUtils.BitmapType.IR);
}
}, UVCCamera.PIXEL_FORMAT_NV21);
}

初始化RGB和IR 数据后把数据转为Bitmap 后送入引擎开始人脸识别,双目活体检测了

faceVerifyUtils.goVerifyWithIR(irBitmap, rgbBitmap);

注意事项

  1. 目前的USB双目摄像头的带宽普遍不足,但好在人脸识别,双目活体检测不需要太高分辨率,1280*720 足够了
  2. 需要宽动态抗逆光摄像头,调试的时候经常经常用手触摸镜头需要保持镜头整洁
  3. 确保两个摄像头都正常稳定同步的输出了影像画面

演示接入代码Demo 和体验App 下载

上述的UVC 协议摄像头管理已经放在工程目了libs 下面了打包成了AAR 文件,整个项目代码GitHub 搜索AnyLifeZLB/FaceVerificationSDK

或者点击: https://github.com/AnyLifeZLB/FaceVerificationSDK

手上有双目摄像头的连接设备可以立马体验效果

基于近红外与可见光双目摄像头的活体人脸检测,文末附Demo的更多相关文章

  1. [C#][Windows]]基于ArcFace2.0+红外双目摄像头的活体检测

    废话不多说 直接上图 这个是demo中用到的双目摄像头,一个是红外的,一个是正常的rgb摄像头两个usb接口,在电脑上呈现两路摄像头通道程序检测RGB输出图像,当检测到有人脸时,用RGB人脸的位置到红 ...

  2. [Windows][C#][.NET][WPF]基于ArcFace2.0+红外双目摄像头的活体检测

    废话不多说 直接上图这个是demo中用到的双目摄像头,一个是红外的,一个是正常的rgb摄像头两个usb接口,在电脑上呈现两路摄像头通道程序检测RGB输出图像,当检测到有人脸时,用RGB人脸的位置到红外 ...

  3. 基于AdaBoost算法——世纪晟结合Haar-like特征训练人脸检测识别

      AdaBoost 算法是一种快速人脸检测算法,它将根据弱学习的反馈,适应性地调整假设的错误率,使在效率不降低的情况下,检测正确率得到了很大的提高.   系统在技术上的三个贡献: 1.用简单的Haa ...

  4. 基于cyusb3014的usb3.0双目摄像头开发测试小结(使用mt9m001c12stm)

    测试图像 摄像头分辨率为1280*1024,双目分辨率为2560*1024 ps:时钟频率太高,时序约束还得进一步细化,图像偶尔会出现部分雪花,下一步完善

  5. 基于Socket通讯(C#)和WebSocket协议(net)编写的两种聊天功能(文末附源码下载地址)

    今天我们来盘一盘Socket通讯和WebSocket协议在即时通讯的小应用——聊天. 理论大家估计都知道得差不多了,小编也通过查阅各种资料对理论知识进行了充电,发现好多demo似懂非懂,拷贝回来又运行 ...

  6. 手把手教你基于SqlSugar4编写一个可视化代码生成器(生成实体,以SqlServer为例,文末附源码)

    在开发过程中免不了创建实体类,字段少的表可以手动编写,但是字段多还用手动创建的话不免有些浪费时间,假如一张表有100多个字段,手写有些不现实. 这时我们会借助一些工具,如:动软代码生成器.各种ORM框 ...

  7. 30分钟玩转Net MVC 基于WebUploader的大文件分片上传、断网续传、秒传(文末附带demo下载)

    现在的项目开发基本上都用到了上传文件功能,或图片,或文档,或视频.我们常用的常规上传已经能够满足当前要求了, 然而有时会出现如下问题: 文件过大(比如1G以上),超出服务端的请求大小限制: 请求时间过 ...

  8. 基于MTCNN多任务级联卷积神经网络进行的人脸识别 世纪晟人脸检测

    神经网络和深度学习目前为处理图像识别的许多问题提供了最佳解决方案,而基于MTCNN(多任务级联卷积神经网络)的人脸检测算法也解决了传统算法对环境要求高.人脸要求高.检测耗时高的弊端. 基于MTCNN多 ...

  9. 基于 HTML5 的 WebGL 自定义 3D 摄像头监控模型

    前言 随着视频监控联网系统的不断普及和发展, 网络摄像机更多的应用于监控系统中,尤其是高清时代的来临,更加快了网络摄像机的发展和应用. 在监控摄像机数量的不断庞大的同时,在监控系统中面临着严峻的现状问 ...

  10. 爬坑!OpenCV打开双目摄像头

    1.首先找到双目摄像头的VideoCapture的设备号,记住定义时要采用降序的方法定义:cv::VideoCapture Rcap(1); cv::VideoCapture Lcap(0); 2.分 ...

随机推荐

  1. IDEA和GIT关于文件中LF和CRLF问题

    问题描述:项目软件安装shell脚本上git仓库管理,但拉取后,上linux运行报错. 问题思考:根据描述信息可以查看到\r字样,初步判别为换行符导致 1.将脚本文件移动至notepad++中,通过视 ...

  2. 为什么 Llama 3.3 70B 比 GPT-4o 和 Claude 3.5 Sonnet 更优秀

    过去七天的 AI 新闻如狂风暴雨般涌来,AI 世界发生了许多重大变化.在这篇文章中,我们将深入探讨来自 Llama 3.3 70B.GPT-4o 和 Claude 3.5 Sonnet 等主要参与者的 ...

  3. Qt编写地图综合应用33-雨量分布

    一.前言 雨量分布图是在区域地图基础上,针对区域中的每个最小单位区域比如县城点位不同颜色显示,最开始做这个封装的时候,并没有提供单独设置每个点颜色的接口,后面经过几个客户的强烈建议,咬咬牙把每个点都可 ...

  4. 场景题:假设有40亿QQ号,但只有1G内存,如何实现去重?

    当数据量比较大时,使用常规的方式来判重就不行了.例如,使用 MySQL 数据库判重,或使用 List.contains() 或 Set.contains() 判重就不行了,因为数据量太大会导致内存放不 ...

  5. Mac 最大连接数和端口的相关参数

    1. 最大连接数限制 最大连接数限制就是系统所能打开的最大文件数(文件描述符)的限制,分全局和进程两种: 1.1. 全局 $ sysctl kern.maxfiles kern.maxfiles: 4 ...

  6. [Java] 计算Java对象大小

    序 在Java应用程序的性能优化场景中,时常需要考虑Java对象的大小,以便评估后,进一步提出优化方案: 占用内存的大小.(比如 本地内存) 对象数据在网络传输中占用的网络带宽 对象数据在存储时占用的 ...

  7. w3cschool-HBase官方文档-3MapReduce

    HBase和MapReduce 2018-03-30 13:59 更新 HBase和MapReduce Apache MapReduce 是一个用于分析大量数据的软件框架.它由 Apache Hado ...

  8. SQL只取日期的年月日部分

    方法一: select CONVERT(varchar, getdate(), 120 ) 2004-09-12 11:06:08 select replace(replace(replace(CON ...

  9. 面试题: == 和 equals() 区别【包装类重写了object类中的equals方法】

    /* * * 面试题: == 和 equals() 区别 * * 一.回顾 == 的使用: * == :运算符 * 1. 可以使用在基本数据类型变量和引用数据类型变量中 * 2. 如果比较的是基本数据 ...

  10. 萌新赛 sprintf漏洞

    首先是个.git源码源码泄露,用githack回复一下源码 源码 <?php $pass=sprintf("and pass='%s'",addslashes($_GET[' ...