应用户要求,人脸识别 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 跑一跑流程熟悉基础接入.
简单使用场景
目前人脸检索速度约 50MS(三星 N9700 千张人脸验证),人脸检索的速度和硬件配置,人脸质量和识别 threshold (阈值)设置有关 运行本 Demo 体验的时候点击导航页[增删改人脸] 后进入编辑页面,点击右上角[拍照]启动系统相机自拍一张.也可以点击[App 内置 200 张 Ai 人脸头像] 模拟 N 较大的情况,理论上 N 支持万张以上,需要验证更多人脸素材场景可以自行将人脸导入项目 Assert 目录验证大容量场景
特殊 DIY Android 系统 或 特殊定制硬件(基于 RK3X88 平台等),外接 USB 摄像头等有问题请先提 Issues 附带 Android 版本、硬件配置、错误 log 等信息; 或发反馈邮件到anylife.zlb@gmail.com(建议先熟悉人脸识别相关基础)
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);
}
}
最新版体验下载地址: https://www.pgyer.com/FaceSearchSDK 或者直接扫码安装
更多使用说明下载参考本 Repo 和下载 Demo 代码体验,里面有比较详尽的使用方法,其中
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.