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

Android 1:N 和 M:N 人脸搜索 SDK 接入步骤说明

  •  
  •   snowflake007 · 227 天前 · 744 次点击
    这是一个创建于 227 天前的主题,其中的信息可能已经有所发展或是发生改变。

    FaceSearchSDK_Android

    应用户要求,人脸识别 1:N ,M:N 检索独立成库,以便减少体积和快速接入 SDK, 这是独立版本的人脸识别搜索, 离线版 Android 1:N,M:N 人脸识别检索,速度快精度高,不用联网就能工作,离线授权激活后不限使用时长和设备量。 On_device Offline Android Face 1:N ,M:N Search (含有 1:1 人脸识别活体检测完整版本的工程地址:https://github.com/AnyLifeZLB/FaceVerificationSDK)

    建议第一次接入的用户先下载 DemoAPK 安装了解本 SDK 的基本功能,服务与政策,下载本 Demo 跑一跑流程熟悉基础接入.

    image

    简要介绍

    简单使用场景

    • [ 1:N ] 小区门禁,智能门锁,考勤机,智慧校园、工地、社区、酒店等
    • [ M:N ] 公安布控,特定群体追踪等

    目前人脸检索速度约 50MS(三星 N9700 千张人脸验证),人脸检索的速度和硬件配置,人脸质量和识别 threshold (阈值)设置有关 运行本 Demo 体验的时候点击导航页[增删改人脸] 后进入编辑页面,点击右上角[拍照]启动系统相机自拍一张.也可以点击[App 内置 200 张 Ai 人脸头像] 模拟 N 较大的情况,理论上 N 支持万张以上,需要验证更多人脸素材场景可以自行将人脸导入项目 Assert 目录验证大容量场景

    特殊 DIY Android 系统 或 特殊定制硬件(基于 RK3X88 平台等),外接 USB 摄像头等有问题请先提 Issues 附带 Android 版本、硬件配置、错误 log 等信息; 或发反馈邮件到[email protected](建议先熟悉人脸识别相关基础)

    SDK 接入简要流程

    1.首先 Gradle 中引入依赖

    implementation 'io.github.anylifezlb:FaceSearchSDK:1.8.8.5' //请依赖最新稳定版本

    2.检查依赖冲突等

    SDK 开发的 compileSdk=33 ,需要 Kotlin 环境支持,如果遇到依赖冲突或者 SDK 集成编译问题请参考升级或解决冲突

    //若第三方依赖有冲突,或者因为 compileSdk 过低需要降级依赖版本可以参考修改
    configurations.all {
        resolutionStrategy {
            force 'org.android.google:9.9.9' //合适不冲突版本
        }
    }
    
    

    3.确定是否自行管理相机还是默认使用 SDK 相机管理摄像头

    推荐快速接入 SDK 相机管理的初始化

    第一个参数 0/1 指定前后摄像头; 第二个参数 linearZoom [0.1f,1.0f] 指定焦距,默认 0.1 cameraXFragment = CameraXFragment.newInstance(cameraLensFacing,0.12f);

    然后在相机分析回调中调用 FaceSearchEngine 搜索引擎进行工作

    cameraX.setOnAnalyzerListener(imageProxy -> {
          FaceSearchEngine.Companion.getInstance().runSearch(imageProxy, 0);
    });
    

    自定义管理相机

    如果你的项目需要高定制化相机管理或者自定义硬件相机数据格式,方向不兼容需要自行管理可以不使用 SDK 中的 CameraXFragment 管理相机,我们有个小 Demo 演示双目摄像头自行管理相机你仅仅需要在子线程中持续输入图像帧 Bitmap. SDK 在后续流程中会检测人脸,搜索人脸并进行状态和结果回调。

        //1.在摄像头回调预览中循环调用 runSearch()方法
        //自行保证 Bitmap 的方向角度正确无旋转,清晰度。runSearch 必须在子线程运行
        FaceSearchEngine.Companion.getInstance().runSearch(realTimeFaceBmp);
    

    更多的请参考 https://github.com/AnyLifeZLB/BinocularCameraFaceSearch

    4.人脸搜索过程中各种参数的初始化

    ```  
        FaceProcessBuilder faceProcessBuilder = new FaceProcessBuilder.Builder(this)
                .setNeedMultiValidate(false)      //是否需要筛选结果防止误识别,需要硬件 CPU 配置高,Android 8+
                .setThreshold(0.85f)              //阈值设置,范围限 [0.8 , 0.95] 识别可信度,也是识别灵敏度
                .setNeedNirLiveness(false)        //是否需要红外活体能力,只有 1:N VIP 有
                .setNeedRGBLiveness(false)        //是否需要普通 RGB 活体检测能力,只有 1:N VIP 有
                .setLicenceKey("yourLicense")     //合作的 VIP 定制客户群体需要
                .create();
    
        faceDetectorUtils.setDetectorParams(faceProcessBuilder);
    
    ```
    

    //初始化引擎,开始人脸检索 FaceSearchEngine.Companion.getInstance().initSearchParams(faceProcessBuilder);

    //搜索的各种状态和结果回调,更多参考 Demo

     .setProcessCallBack(new SearchProcessCallBack() {
         @Override
         public void onMostSimilar(String similar, Bitmap bitmap) {
             binding.resultId.setText(similar);
             Glide.with(requireContext())
                  .load(CACHE_SEARCH_FACE_DIR + File.separatorChar + similar)
                  .diskCacheStrategy(DiskCacheStrategy.NONE)
                  .transform(new RoundedCorners(12)) // 数字根据自己需求来改
                  .into(binding.resultImg);
         }
    
         @Override
         public void onProcessTips(int i) {
              showPrecessTips(i);
         }
     }
    
    

    注意事项

    1. 所有的人脸都必须通过 SDK 的 API 插入到人脸管理目录,而不是 File 文件放入到目录就行,SDK API 还会提取人脸特征操作
    2. 录入的人脸底片请使用正脸无遮挡的清晰照片,平时戴眼睛的依然使用戴眼镜的人脸照片
    3. setNeedMultiValidate 和 setThreshold 根据你项目需要精确度和反应速度合理设置参数
    4. Demo 中有 Assert 有 250 张测试人脸;你可以在人脸管理页面中右上角通过自拍添加一张个人清晰人脸照进行测试验证

    Demo 下载体验

    最新版体验下载地址: https://www.pgyer.com/FaceSearchSDK 或者直接扫码安装

    更多使用说明下载参考本 Repo 和下载 Demo 代码体验,里面有比较详尽的使用方法,其中

    演示视频快速预览

    https://github.com/AnyLifeZLB/FaceSearchSDK_Android/assets/15169396/46cca423-1cc9-4861-bec9-7457f68ad986

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2602 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 04:30 · PVG 12:30 · LAX 20:30 · JFK 23:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.