Android 1:N 和 M:N 人脸搜索 SDK 接入步骤说明 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
snowflake007
V2EX    机器学习

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

  •  
  •   snowflake007 2024-04-18 11:21:32 +08:00 1143 次点击
    这是一个创建于 539 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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     Solana     853 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 21:57 PVG 05:57 LAX 14:57 JFK 17:57
    Do have faith in hat you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86