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

33 天前
 snowflake007

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 跑一跑流程熟悉基础接入.

简要介绍

简单使用场景

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

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

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

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

468 次点击
所在节点    机器学习
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1033550

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX