V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
snowflake007
V2EX  ›  Android

基于近红外与可见光双目摄像头的人脸识别与活体检测,文末附 Demo

  •  
  •   snowflake007 · 4 天前 · 417 次点击

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

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

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

    Android 实现双目红外活体检测 首先建议使用上图 1 的 USB 双目摄像头,能支持双头 Type-C 接口 UVC 协议的,现在的手机平板大部分都是 TypeC 接口了,千万别整公头 USB 口,需要特定的开发板才能开发调试。 然后 打通 UVC 协议摄像头预览,能正常预览才能取数据进行 AI 分析人脸识别等,目前 Android 平台的 UVC 协议摄像头库最有名的就是日本大神的 saki4510t/UVCCamera ,但是很久不维护了,文章最后的源码会集成到 Demo 中 最后 就可以拿双目摄像头中的 RGB 和 IR 图像进行活体检测人脸识别了。 ini 代码解读复制代码 /** * 初始化 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 后送入引擎开始人脸识别,双目活体检测了 ini 代码解读复制代码 faceVerifyUtils.goVerifyWithIR(irBitmap, rgbBitmap);

    注意事项

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

    演示接入代码 Demo 和体验 App 下载 上述的 UVC 协议摄像头管理已经放在工程目了 libs 下面了打包成了 AAR 文件,整个项目代码 GitHub 搜索 AnyLifeZLB/FaceVerificationSDK 或者点击:github.com/AnyLifeZLB/… 手上有双目摄像头的连接设备可以立马体验效果

    Shatyuka
        1
    Shatyuka  
       4 天前
    这是从哪复制来的,格式乱七八糟,甚至链接都缩略了,广告机器人?
    “调试的时候经常经常用手触摸镜头需要保持镜头整洁”,怪。
    snowflake007
        2
    snowflake007  
    OP
       3 天前
    从我的博客复制过来的,准备把主题下沉 10 天。

    直接看 GitHub 主页 https://github.com/AnyLifeZLB/FaceVerificationSDK
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2979 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 08:41 · PVG 16:41 · LAX 01:41 · JFK 04:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.