Skip to content

About

Android face recognition using InsightFaceSDK, 完全离线,本地运行,实时人脸检测、特征提取与比对,适用于生物识别、身份认证等场景。

Resources

Stars

33 stars

Watchers

0 watching

Forks

Repository files navigation

基于开源软件 inspireface 的人脸识别demo

本项目【完全离线】不需要联网激活什么的

参考

本项目是基于开源项目 https://github.com/HyperInspire/inspireface-android-sdk 适配的UI界面

本项目是基于开源项目 https://github.com/HyperInspire/InspireFace

SDK 版本

inspireface 模块当前内置 InspireFace Android SDK 1.2.4.post1(native 1.2.4,C API Level 2), 取自上游 tag v1.2.4.post1:

项目 说明
ABI arm64-v8a、armeabi-v7a、x86_64(x86_64 用于模拟器调试,上游自 1.2.4 起提供)
minSdk 24(1.2.4 起 native 库最低要求,app 与 inspireface 模块已同步)
模型 内置 Pikachu(t4.0,17MB)与 Megatron(t4.0,61MB),与上游 SDK 仓库资源一致;默认使用 Megatron,可在 App 的「设置」中切换
头文件/清单 inspireface/sdk/1.2.4/(C 头文件、API manifest、SHA256SUMS)

升级要点:新版本在 native 失败时可能返回 null(ExecuteFaceTrack / ExtractFaceFeature / FeatureHubFaceSearch),无匹配时 FeatureHubFaceSearch 返回 id = -1、searchConfidence = -1, 业务代码已按此补齐空判断。

更新说明(1.1.13 → 1.2.4.post1)

  1. 替换 inspireface/libs/<abi>/libInspireFace.so,新增 x86_64
  2. 同步 inspireface/src/main/java 全部 Java 源码(新增 JNI 全量接口、FaceCapture、快照等)
  3. 同步模型资源 Pikachu(t4.0)、Megatron(t4.0)与 version.txt,更新 consumer-rules.pro(JNI 类保留规则)
  4. inspireface 与 app 的 minSdk 由 22 提升到 24,abiFilters 增加 x86_64

项目目的

为了研究人脸识别app,以及为了体验做出demo的成就感。
之前版本没有UI太痛苦了

改进地方

  1. 响应式 Material 3 UI:手机竖屏与横屏开发板自适应(主界面 2/3 列卡片、摄像头页底部/侧边控制面板),支持深色模式
  2. 内置 Pikachu 与 Megatron 两套模型,默认 Megatron,可在设置界面切换,切换后自动重建 Session 并使用该模型资源推荐的识别阈值
  3. 添加通过相册录入人脸,也可以批量读取文件夹内人脸
  4. 选择照片人脸识别
  5. 通过摄像头录入人脸信息
  6. 通过摄像头实时识别人脸,并且在界面上框选人脸和显示名称
  7. 自建本地数据存放人脸id对应名称
  8. 可以查用户列表和删除用户特征值
  9. 采用kotlin语言开发

注意:Pikachu 与 Megatron 使用不同的特征提取网络,已录入的人脸特征不能跨模型识别;切换模型后如需识别旧用户,请切回原模型或重新录入。

页面预览

以下为早期版本界面截图,最新版本为 Material 3 响应式界面,可直接安装体验。

预览 预览
预览 预览

大家可以自己下载玩一玩,在release里面有apk文件。 觉得不错给我个star吧

实际项目中把用户名换成用户id就是

哦,还有一个重要的事情,我之前在退出摄像头页面的时候释放代码就崩溃了,研究了半天

InspireFace.ReleaseSession(session)
InspireFace.FeatureHubDataDisable()
InspireFace.GlobalTerminate()

因为我在ondestroy()里面调用了以上代码,把InspireFace释放了,但是最后一帧的bitmap还没处理完毕,一旦调用InspireFace里面的其他方法就会崩溃,大家谨记谨记,一定得处理完毕后才能释放资源。

或者在处理的逻辑加上互斥锁 InspireFaceConfig.mutex ,要求关闭时得处理完当前帧

imageAnalysis.setAnalyzer(executor) { imageProxy ->
    InspireFaceConfig.mutex {   //互斥锁,防止这帧没处理完 InspireFace.ReleaseSession(session) 导致崩溃
        val bitmap = imageToBitmap(imageProxy)
        bitmap?.let { processBitmap(it) }
    }
}

对了,给我个star吧

About

Android face recognition using InsightFaceSDK, 完全离线,本地运行,实时人脸检测、特征提取与比对,适用于生物识别、身份认证等场景。

Resources

Stars

33 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages