Android 实现人脸识别 活体检测以及人脸搜索

关于「 FaceAI SDK」

Umbrella FaceAI SDK is on_device Offline Android Face Detection 、Recognition 、Liveness Detection Anti Spoofing and 1:N/M:N Face Search SDK

保护伞FaceAI SDK是设备端可离线不联网Android 人脸识别、动作及近红外IR活体检测、人脸图质量检测以及人脸搜索(1:N和M:N)SDK,可快速集成实现人脸识别,人脸搜索功能

当前版本说明 V1.9.4 (建议升级到GitHub Demo版本)

  • 删除不需要权限,上架Google Play认证
  • 优化光线不佳活体检测和录入人脸活体校验
  • 优化SDK体验,支持自定义管理摄像头
  • 完善UVC协议USB红外双目摄像头人脸识别

建议[Fork] + [Star] 本项目Repo以便第一手获取更新:FaceVerificationSDK

人脸识别FaceAI SDK最新版源码唯一托管地址: https://github.com/AnyLifeZLB/FaceVerificationSDK
国内代码托管地址Gitee不是最新: https://gitee.com/onDeviceAI/FaceVerificationSDK (不方便FQ请联系获取最新代码)

简要说明

SDK包含动作活体、静默活体检测,1:1人脸识别以及1:N , M:N人脸识别检索所有功能都在设备终端离线执行,SDK本身不用联网,不保存不上传任何人脸信息敏感资料更具隐私安全

其中活体检测支持张嘴、微笑、眨眼、摇头、点头 随机两种组合验证(支持去除特定的动作),低端机离线验证速度正常,1.9.0已经支持UVC红外双目摄像头。

SDK支持Android(5,15],建议设备配置 CPU为八核64位2.4GHz以上 摄像头RGB 宽动态镜头分辨率720p以上,帧率大于30并且无拖影。

实验室测试效果能覆盖95%的高中低端手机平板,识别成功率>99%;特殊DIY系统/定制硬件,如USB摄像头,双目摄像头等 如有问题请先提Issues附带系统版本、设备型号、错误log等信息;

或发邮件到 FaceAISDK.Service@gmail.com ,VIP用户添加 微信:HaoNan19990322 或 WhatsApp: +8618707611416

SDK 工作原理简介

FaceAISDK 工作原理根据设置好的人脸识别阈值、识别种类的等参数,从系统相机、USB外接摄像头设备甚至RTSP视频流获取连续连续图像帧转为Bitmap后

送入SDK引擎,同时监听处理SDK返回的各种错误提示和结果。你可以自定义管理视频图像来源,SDK已经演示了系统相机CameraX,USB设备,RTSP流处理。

使用场景和区别

【1:1】 移动考勤签到、App免密登录、刷脸授权、刷脸解锁、巡更打卡真人校验

【1:N】 小区门禁、公司门禁、智能门锁、智慧校园、景区、工地、社区、酒店等

【M:N】 公安布控、人群追踪 监控等等 (测试效果可使用 MN_face_search_test.jpg 模拟)

  private void initFaceVerificationParam(Bitmap baseBitmap) {
        FaceProcessBuilder faceProcessBuilder = new FaceProcessBuilder.Builder(this)
                .setThreshold(0.85f)                    //阈值设置,范围限 [0.8,0.95] 识别可信度,也是识别灵敏度
                .setBaseBitmap(baseBitmap)              //1:1 人脸识别对比的底片,仅仅需要SDK活体检测可以忽略比对结果
                .setLivenessType(LivenessType.SILENT_MOTION)  //活体检测可以有静默活体,动作活体或者组合也可以不需要活体NONE
                .setLivenessDetectionMode(LivenessDetectionMode.FAST) //硬件配置低用FAST动作活体模式,否则用精确模式
                .setSilentLivenessThreshold(silentLivenessPassScore)  //静默活体阈值 [0.88,0.99]
                .setMotionLivenessStepSize(1)           //随机动作活体的步骤个数[1-2],SILENT_MOTION和MOTION 才有效
                .setExceptMotionLivelessType(ALIVE_DETECT_TYPE_ENUM.SMILE) //活体去除微笑,或设置其他某种
                .setVerifyTimeOut(16)                 //活体检测支持设置超时时间 [9,22] 秒
                .setProcessCallBack(new ProcessCallBack() {
                    /**
                     * 1:1 人脸识别 活体检测 对比结束
                     *
                     * @param isMatched   true匹配成功(大于setThreshold); false 与底片不是同一人
                     * @param similarity  与底片匹配的相似度值
                     * @param vipBitmap   识别完成的时候人脸实时图,仅授权用户会返回。可以拿这张图存档案和你的服务器再次严格匹配
                     */
                    @Override
                    public void onVerifyMatched(boolean isMatched, float similarity, float silentLivenessScore, Bitmap vipBitmap) {
                        showVerifyResult(isMatched, similarity, silentLivenessScore);
                    }

                    //人脸识别,活体检测过程中的各种提示
                    @Override
                    public void onProcessTips(int i) {
                        showFaceVerifyTips(i);
                    }

                    //动作活体检测时间限制倒计时百分比
                    @Override
                    public void onTimeCountDown(float percent) {
                        faceCoverView.startCountDown(percent);
                    }

                    /**
                     * 发送严重错误,会中断业务流程
                     *
                     */
                    @Override
                    public void onFailed(int code, String message) {
                        Toast.makeText(getBaseContext(), "onFailed错误:" + message, Toast.LENGTH_LONG).show();
                    }

                }).create();

        faceVerifyUtils.setDetectorParams(faceProcessBuilder);

        cameraXFragment.setOnAnalyzerListener(imageProxy -> {
            //防止在识别过程中关闭页面导致Crash
            if (!isDestroyed() && !isFinishing()) {
                //2.第二个参数是指圆形人脸框到屏幕边距,可加快裁剪图像和指定识别区域,设太大会裁剪掉人脸区域
                faceVerifyUtils.goVerifyWithImageProxy(imageProxy, faceCoverView.getMargin());
                //自定义管理相机可以使用 goVerifyWithBitmap
            }
        });

接入使用

  • 1.首先Gradle 中引入依赖

    implementation 'io.github.anylifezlb:FaceAISDK:1.9.?' //及时升级到github最新版

  • 2.更新本SDK 接入演示代码到最新版本,熟悉后Copy Demo代码到你的主工程

  • 3.解决项目工程中的第三方依赖库和主工程的冲突比如CameraX的版本等,Target SDK不同导致的冲突

  • 4.调整JDK版本到java 11 以上。Android Studio设置Preferences -> Build -> Gradle -> JDK的版本为 11+

  • 5.集成过程中的问题可以GitHub 提issues或者详细描述你遇到的问题发邮件到FaceAISDK.Service@gmail.com

    目前SDK默认使用java11. kotlin 1.7.20 打包,如果你的项目较老还在使用

    kapt, kotlin-android-extensions导致集成冲突,建议尽快升级项目或者VIP联系定制

    更多使用说明下载SDK源码工程代码到Android Studio 以及下载Demo APK到手机体验完整的流程和效果

    里面有详尽的注释说明和使用方法介绍,SDK源码熟悉完成后有一定Android基础大概3小时可集成到你的主工程

其中

模块 描述
appMain 主工程,faceAILib 是人脸识别相关源码
faceAILib 人脸识别Lib module模块
/verify/* 1:1 人脸检测识别,活体检测页面,静态人脸对比
/UVCCamera/* 双目近红外摄像头管理与IR活体检测等
/search/* 1:N 和 M:N 人脸识别搜索页面,人脸库管理
/addFaceImage 人脸识别和搜索共用的添加人脸照片录入模块

Demo 下载体验

扫码后选择在浏览器中打开点击下载安装,或直接输入地址 https://www.pgyer.com/faceVerify

服务定制

如果SDK不能匹配你的应用场景或需要特殊双目摄像头活体检测 定制化,请发邮件到FaceAISDK.Service@gmail.com

也可以加微信 HaoNan19990322 ,备注人脸识别

欢迎关注Fork+Star获取最新动态,提出使用建议等 https://github.com/AnyLifeZLB/FaceVerificationSDK

提升接入效率,提高SDK识别准确率

提升接入效率

  1. 去蒲公英下载APK Demo 体验SDK 的基本功能,看看是否满足业务需求;人脸搜索可以一键导入200+张人脸图再录入你自己的

  2. 更新GitHub 最新的代码,花1天左右时间熟悉SDK API 和对应的注释备注,断点调试一下基本功能;熟悉后再接入到主工程

  3. 欲速则不达,一定要先跑成功SDK接入指引Demo。熟悉后再接入到主工程验证匹配业务功能;有问题可以GitHub 提issues

提高SDK识别准确率

  1. 使用高配置硬件参数设备和摄像头抗干扰强;保持镜头整洁干净
  2. 录入高质量的人脸图,如(images/face_example.jpg)(证件照输入目前优化中)
  3. 光线环境好,检测的人脸无遮挡,没有化浓妆 或 粗框眼镜墨镜、口罩等大面积遮挡
  4. 人脸图大于 300300(人脸部分区域大于200200)五官清晰无遮挡,图片不能有多人脸
  5. 人脸搜索功能(1:N&M:N)人脸录入不戴粗框的深色眼镜,使用宽动态抗干扰成像清晰摄像头

常见问题

常见问题请参考:https://github.com/AnyLifeZLB/FaceVerificationSDK/blob/main/doc/questions.md

所有的开发测试都在手机和平板进行,特殊定制硬件如 RK3288 等适配需要兼容适配,SDK1.9.0以上版本已经支持UVC

协议的USB 双目摄像头IR近红外活体,买对应的USB接口的双目摄像头插入手机USB口就能体验效果(不确定品质联系我推荐)

快速接入

Demo 以main主工程 --> faceAiLib 的方式演示,熟悉本SDK 接入Demo 后可以先Copy faceAiLib到你主工程先跑起来

再根据业务情况修改完善。

熟悉后大约3小时就能集成成功,丰富产品功能同时可大大降低公司研发投入实现降本增效。

References

  1. 2024最详细的AI框架对比指南---PyTorch与TensorFlow到底选谁?
  2. PyTorch、TensorFlow和Keras,深度學習的全面比較與選擇指南
相关推荐
~啥也不会~12 天前
【附源码】基于opencv+pyqt5搭建的人脸识别系统
人工智能·opencv·计算机视觉·人脸识别·pyqt
钱彬 (Qian Bin)19 天前
基于Django+Bootstrap+深度学习 构建商业级人脸识别系统(代码开源)
python·深度学习·django·开源·bootstrap·人脸识别·教程
goomind24 天前
卷积神经网络实战人脸检测与识别
人工智能·深度学习·神经网络·cnn·人脸识别·人脸检测
我的青春不太冷1 个月前
【实战篇】Android安卓本地离线实现视频检测人脸
android·数码相机·ai·人脸识别·音视频·android人脸识别
点云SLAM1 个月前
CVPR 2024 人脸方向总汇(人脸识别、头像重建、人脸合成和3D头像等)
深度学习·计算机视觉·人脸识别·3d人脸·头像重建
程序媛徐师姐2 个月前
Python基于OpenCV和PyQt5的人脸识别上课签到系统【附源码】
python·opencv·人脸识别·pyqt5·人脸识别上课签到系统·上课签到·上课签到系统
chusheng18402 个月前
基于 Python 和 OpenCV 的人脸识别上课考勤管理系统
python·opencv·人脸识别·人脸识别考勤·人脸识别上课考勤·python 考勤管理
bohu832 个月前
ros2-4.2 用python实现人脸识别
人工智能·opencv·人脸识别·ros2·服务调用
Jeo_dmy2 个月前
(七)人工智能进阶之人脸识别:从刷脸支付到智能安防的奥秘,小白都可以入手的MTCNN+Arcface网络
人工智能·计算机视觉·人脸识别·猪脸识别