diff --git a/README.md b/README.md
index 48f81d0..4762aef 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,5 @@
-
+
## 已经解决试用版集成闪退问题!!
@@ -12,6 +12,7 @@ On_device Offline Android Face Detection 、Recognition 、Liveness Detection An
![设备端离线机器学习优点](images/whyOfflineSDK.png)
## 当前版本说明 V1.8.60 (建议升级到最新版本)
+- 解决动作活体重构后出现不能识别通过问题
- 解决试用版本SDK集成闪退问题 !!!
- 加快1:N 人脸搜索速度,性能优化
- 重新封装完善动作活体 静默活体,简化调用
@@ -19,13 +20,16 @@ On_device Offline Android Face Detection 、Recognition 、Liveness Detection An
建议[Fork] + [Star] 以便获取最新更新 # [FaceVerificationSDK](https://github.com/AnyLifeZLB/FaceVerificationSDK)
- SDK 接入演示代码目前仅托管在GitHub,国内镜像不是最新的,请移步到GitHub 更新最新的演示代码
+ **SDK 接入代码仓库,及时更新使用最新版** https://github.com/AnyLifeZLB/FaceVerificationSDK
+ 国内代码托管地址(不方便翻墙请邮件联系获取最新代码) https://gitee.com/onDeviceAI/FaceVerificationSDK
+
+
## 简要说明
SDK包含动作活体、静默活体检测,[1:1人脸识别以及1:N , M:N人脸识别检索](https://github.com/AnyLifeZLB/FaceVerificationSDK/blob/main/Introduce_11_1N_MN.md),**所有功能都在设备终端离线执行,SDK本身不用联网,不保存不上传任何人脸信息敏感资料更具隐私安全**
-其中活体检测支持张嘴、微笑、眨眼、摇头、点头 随机两种组合验证(摇头点头也可拆分为左右上下4个动作),低端机离线验证速度正常。
+其中活体检测支持张嘴、微笑、眨眼、摇头、点头 随机两种组合验证(支持去除特定的动作),低端机离线验证速度正常。
SDK支持Android 5+,建议设备配置 CPU为八核64位2.4GHz以上 摄像头RGB 宽动态镜头分辨率720p以上,帧率大于30并且无拖影。
@@ -36,11 +40,11 @@ SDK支持Android 5+,建议设备配置 CPU为八核64位2.4GHz以上 摄像
## [使用场景和区别](https://github.com/AnyLifeZLB/FaceVerificationSDK/blob/main/Face_1:1_1:N_M:N.md)
- 【1:1】 移动考勤真人校验,App免密登录,酒店入驻、刷脸支付、刷脸解锁、真人校验
+ 【1:1】 移动考勤真人校验、App免密登录、刷脸支付、刷脸解锁、真人校验
- 【1:N】 小区门禁,公司门禁,智能门锁,智慧校园、景区、工地、社区、酒店等
+ 【1:N】 小区门禁、公司门禁、智能门锁、智慧校园、景区、工地、社区、酒店等
- 【M:N】 公安布控,人群追踪 监控等等 (人脸搜索 Demo 测试可使用图片 face_search_test.jpg)
+ 【M:N】 公安布控,人群追踪 监控等等 (测试效果可使用 MN_face_search_test.jpg 模拟)
## 接入使用
@@ -58,14 +62,11 @@ SDK支持Android 5+,建议设备配置 CPU为八核64位2.4GHz以上 摄像
更多使用说明下载参考本Repo和下载Demo体验,里面有比较详尽的使用方法, 熟悉后大概2小时可集成完毕
其中
-
- * NaviActivity Demo 演示导航页面
+ * appMain 主工程,faceAILib 是人脸识别相关源码
+ * /FaceAI/NaviActivity Demo 演示导航页面
* /verify/目录 1:1 人脸检测识别,活体检测页面
* /search/目录 1:N 和 M:N 人脸识别搜索页面,人脸库管理
-
- 1:1人脸识别不含活体检测不需要license授权,活体检测和人脸搜索的使用需要你发送邮件到anylife.zlb@gmail.com 确认授权
- 内容包括App名称、包名(applicationId)、签名证书SHA1和简要描述和要申请 1:1 / 1:N / M:N 哪种类型、5项内容。
-
+ * /addFaceImage 识别和搜索共用的添加人脸照片
## Demo 下载体验
@@ -81,19 +82,19 @@ SDK支持Android 5+,建议设备配置 CPU为八核64位2.4GHz以上 摄像
如果 SDK 不能匹配你的应用场景需要特殊定制化,请发邮件到anylife.zlb@gmail.com
也可以加微信 HaoNan19990322 (请标注为 人脸识别 ,否则会自动忽略添加,谢谢)
- 欢迎关注Fork+Star获取最新动态 Github: https://github.com/AnyLifeZLB/FaceVerificationSDK
+ 欢迎关注Fork+Star获取最新动态,提出使用建议等 https://github.com/AnyLifeZLB/FaceVerificationSDK
## 提升接入效率,提高SDK识别准确率
### 提升接入效率
- - 1.去蒲公英下载APK Demo 体验SDK 的基本功能,看看是否满足业务需求;人脸搜索可以一键倒入200+张人脸图再录入你自己的
- - 2.更新GitHub 最新的代码,花1天左右时间熟悉SDK API 和对应的注释备注,断点调试一下基本功能;熟悉后再接入到主工程
- - 3.欲速则不达,一定要先跑成功SDK 接入Demo。熟悉后再接入到主工程验证匹配业务功能。有问题可以GitHub 提issues
+ 1.去蒲公英下载APK Demo 体验SDK 的基本功能,看看是否满足业务需求;人脸搜索可以一键导入200+张人脸图再录入你自己的
+ 2.更新GitHub 最新的代码,花1天左右时间熟悉SDK API 和对应的注释备注,断点调试一下基本功能;熟悉后再接入到主工程
+ 3.欲速则不达,一定要先跑成功SDK 接入Demo。熟悉后再接入到主工程验证匹配业务功能。有问题可以GitHub 提issues
### 提高SDK识别准确率
- - 1.试用建议的设备配置和摄像头
- - 2.录入高质量的人脸图,如(images/face_example.jpg)(证件照输入目前优化中)
- - 3.光线环境好,检测的人脸无遮挡,化浓妆或佩戴墨镜口罩
- - 4.人脸图大于 300*300(人脸部分区域大于200*200)五官清晰无遮挡
+ 1.试用建议的设备配置和摄像头
+ 2.录入高质量的人脸图,如(images/face_example.jpg)(证件照输入目前优化中)
+ 3.光线环境好,检测的人脸无遮挡,化浓妆或佩戴墨镜口罩
+ 4.人脸图大于 300*300(人脸部分区域大于200*200)五官清晰无遮挡
## 常见问题
常见问题请参考:https://github.com/AnyLifeZLB/FaceVerificationSDK/blob/main/questions.md
@@ -102,6 +103,6 @@ SDK支持Android 5+,建议设备配置 CPU为八核64位2.4GHz以上 摄像
## 快速接入
Demo 以main主工程 --> faceAiLib 的方式演示,熟悉本SDK 接入Demo 后可以先Copy faceAiLib到你主工程先跑起来
- 再根据业务情况修改完善。熟悉后大约2小时就能集成成功,可大大降低公司研发投入实现降本增效(笑)。
+ 再根据业务情况修改完善。熟悉后大约2小时就能集成成功,可大大降低公司研发投入实现降本增效。
diff --git a/appMain/build.gradle b/appMain/build.gradle
index 6210ae1..98bc7a3 100644
--- a/appMain/build.gradle
+++ b/appMain/build.gradle
@@ -7,18 +7,19 @@ android {
compileSdk 33
defaultConfig {
+ //应用包名
applicationId "com.ai.face.verifyPub"
minSdk 21
targetSdk 33
versionCode 20
- versionName "1.8.54"
+ versionName "1.8.60"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
- release {
+ debug {
minifyEnabled true
zipAlignEnabled true
shrinkResources true
diff --git a/appMain/src/main/java/com/example/mainapp/WelcomeActivity.java b/appMain/src/main/java/com/example/mainapp/WelcomeActivity.java
index 1747582..fc8e20e 100644
--- a/appMain/src/main/java/com/example/mainapp/WelcomeActivity.java
+++ b/appMain/src/main/java/com/example/mainapp/WelcomeActivity.java
@@ -31,7 +31,7 @@ protected void onCreate(Bundle savedInstanceState) {
LottieAnimationView startFaceAILib= findViewById(R.id.goFaceAILib);
startFaceAILib.setAnimation(R.raw.loading);
startFaceAILib.loop(false);
- startFaceAILib.setSpeed(3f);
+ startFaceAILib.setSpeed(4f);
startFaceAILib.playAnimation();
//主工程调用Face AI Lib 中人脸识别功能
diff --git a/Introduce_11_1N_MN.md b/doc/Introduce_11_1N_MN.md
similarity index 100%
rename from Introduce_11_1N_MN.md
rename to doc/Introduce_11_1N_MN.md
diff --git a/change_log.md b/doc/change_log.md
similarity index 89%
rename from change_log.md
rename to doc/change_log.md
index 2521690..69fdbf8 100644
--- a/change_log.md
+++ b/doc/change_log.md
@@ -1,10 +1,18 @@
+# V1.8.0
+- 内测中...
+
+- 解决动作活体重构后出现不能识别通过问题
+- 解决试用版本SDK集成闪退问题 !!!
+- 添加照片质量检测接口
+- 优化1:1 人脸识别体验问题
+
# V1.8.50
- 修复试用版本闪退问题
- 加快1:N 人脸搜索速度,性能优化
- 重新封装完善动作活体 静默活体,简化调用
- 修复大尺寸照片中人脸过小导致的人脸入库失败问题
-# V1.8.32
+# V1.8.40
- 大尺寸人脸照片输入裁剪
# V1.8.30
@@ -12,11 +20,8 @@
- 录入人脸简化,添加人脸角度校验
# V1.8.25
-- 修复老版本的随机闪退问题
-- 注册人脸的尺寸方式
+- 注册人脸的尺寸
- 封装Kotlin协程,Java 调用更方便
-
-# V1.8.20
- 人脸照片录入去除更多限制条件
# V1.8.19
diff --git a/privacy.md b/doc/privacy.md
similarity index 100%
rename from privacy.md
rename to doc/privacy.md
diff --git a/questions.md b/doc/questions.md
similarity index 96%
rename from questions.md
rename to doc/questions.md
index d77634c..7aaf55b 100644
--- a/questions.md
+++ b/doc/questions.md
@@ -34,12 +34,12 @@
正式包(debuggable=false)授权后,不限终端数量,不限制使用次数。
授权绑定App包名和签名SHA1进行,需要新的功能和新特性开发根据评估情况再协定。
-| SDK 功能模块 | 收费情况(双11巨惠) | 功能描述 |
+| SDK 功能模块 | 收费情况 | 功能描述 |
|:------------|:-----------:|:------------|
| 基础功能 | 完全免费 | 1.静态人脸图对比 2.图片中裁剪人脸 |
| 1:1 人脸识别 | 299 | 动态图像人脸识别,不包含活体检测VIP功能 |
-| 1:1人脸识别活体检测 | 4000 | 包含人脸识别 活体检测 人脸录入完整功能 |
-| 1:N&M:N人脸搜索 | 7000 | 从人脸库中搜索对应的人是谁是否在库中 |
+| 1:1人脸识别活体检测 | 5000 | 包含人脸识别 活体检测 人脸录入完整功能 |
+| 1:N&M:N人脸搜索 | 8000 | 从人脸库中搜索对应的人是谁是否在库中 |
| 定制开发 | 按需评估 | 如果试用当前的SDK不能满足业务需求定制安装工作量和难度评估 |
收费项目需要试用请添加微信或邮件申请,并告知App 名称,包名 ,签名SHA1和 简单使用场景介绍
diff --git a/faceAILib/build.gradle b/faceAILib/build.gradle
index f1d3633..6864b2f 100644
--- a/faceAILib/build.gradle
+++ b/faceAILib/build.gradle
@@ -69,14 +69,11 @@ configurations.configureEach {
// GitHub 无法访问,挂梯子也无效 ?参考 https://github.com/maxiaof/github-hosts
dependencies {
- implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
// 人脸识别 试用版本请升级到1.8.50 以上版本。https://github.com/AnyLifeZLB/FaceVerificationSDK
// JDK==11,更多查看主页Readme 或者发送邮件到anylife.zlb@gmail.com
- implementation 'io.github.anylifezlb:FaceRecognition:1.8.56'
-
-
+ implementation 'io.github.anylifezlb:FaceRecognition:1.8.60.alpha'
// 以下为业务需要其他依赖,不是SDK 运行的必须依赖
diff --git a/faceAILib/src/main/java/com/ai/face/AboutFaceAppActivity.kt b/faceAILib/src/main/java/com/ai/face/AboutFaceAppActivity.kt
index ba7ae54..89c1b90 100644
--- a/faceAILib/src/main/java/com/ai/face/AboutFaceAppActivity.kt
+++ b/faceAILib/src/main/java/com/ai/face/AboutFaceAppActivity.kt
@@ -11,7 +11,7 @@ import android.widget.Toast
import com.ai.face.databinding.ActivityAboutFaceAppBinding
/**
- *
+ * 关于我们
*
*/
class AboutFaceAppActivity : AppCompatActivity() {
diff --git a/faceAILib/src/main/java/com/ai/face/FaceAINaviActivity.kt b/faceAILib/src/main/java/com/ai/face/FaceAINaviActivity.kt
index 88a18b4..d6bd3a5 100644
--- a/faceAILib/src/main/java/com/ai/face/FaceAINaviActivity.kt
+++ b/faceAILib/src/main/java/com/ai/face/FaceAINaviActivity.kt
@@ -21,7 +21,6 @@ import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks
/**
* SDK 接入演示Demo,请先熟悉本Demo跑通住流程后再集成到你的主工程验证业务
*
- *
*/
class FaceAINaviActivity : AppCompatActivity(), PermissionCallbacks {
private lateinit var viewBinding: ActivityFaceAiNaviBinding
diff --git a/faceAILib/src/main/java/com/ai/face/addFaceImage/AddFaceImageActivity.java b/faceAILib/src/main/java/com/ai/face/addFaceImage/AddFaceImageActivity.java
index 2409c2c..b91c0f8 100644
--- a/faceAILib/src/main/java/com/ai/face/addFaceImage/AddFaceImageActivity.java
+++ b/faceAILib/src/main/java/com/ai/face/addFaceImage/AddFaceImageActivity.java
@@ -34,7 +34,8 @@
import java.io.ByteArrayOutputStream;
/**
- * 添加一张规范的人脸图并裁剪为SDK需要的正方形。
+ * 添加一张规范的人脸图并裁剪为SDK需要的正方形,1:1 和1:N 公共的添加人脸图
+ * 注意保存的方式有点差异
*
* 其他系统的录入的人脸请自行保证人脸规范,否则会导致识别错误
*
@@ -158,10 +159,12 @@ private void showConfirmDialog(Bitmap bitmap) {
btnOK.setOnClickListener(v -> {
if (!TextUtils.isEmpty(fileName)) {
+ //1:1 人脸识别保存人脸底图
baseImageDispose.saveBaseImage(bitmap, pathName, fileName, 400);
dialog.dismiss();
finish();
} else if (!TextUtils.isEmpty(editText.getText().toString())) {
+ //1:N ,M:N 人脸搜索保存人脸看
dialog.dismiss();
Intent intent = new Intent();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
diff --git a/faceAILib/src/main/java/com/ai/face/search/CopyFaceImageUtils.kt b/faceAILib/src/main/java/com/ai/face/search/CopyFaceImageUtils.kt
index 10a10c5..c78f157 100644
--- a/faceAILib/src/main/java/com/ai/face/search/CopyFaceImageUtils.kt
+++ b/faceAILib/src/main/java/com/ai/face/search/CopyFaceImageUtils.kt
@@ -83,39 +83,33 @@ class CopyFaceImageUtils {
/**
* 把工程目录Assert 下的图片插入到App 指定人脸搜索库
* 你也可以参考把服务器网络图片下载后插入到人脸搜索库
- *
*/
private suspend fun copyAssertTestFaceImages(context: Application) = withContext(Dispatchers.IO) {
- val assetManager = context.assets
- val subFaceFiles = context.assets.list("")
- if (subFaceFiles != null) {
- for (index in subFaceFiles.indices) {
+ val asset = context.assets
+ val faceFiles = context.assets.list("")
+ if (faceFiles != null) {
+ for (index in faceFiles.indices) {
//网络图下载后转为Bitmap 一样的处理方式
- val originBitmap=getBitmapFromAsset(
- assetManager,
- subFaceFiles[index]
- )
-
+ val originBitmap=getBitmapFromAsset(asset, faceFiles[index])
if(originBitmap!=null){
//本地库保存的路径
- val fileName=CACHE_SEARCH_FACE_DIR + subFaceFiles[index]
+ val fileName=CACHE_SEARCH_FACE_DIR + faceFiles[index]
//insertOrUpdateFaceImage 处理人脸图入库,里面会检测裁剪人脸,图像量化处理;
// 插入失败请看onFailed log
FaceSearchImagesManger.IL1Iii.getInstance(context).insertOrUpdateFaceImage(
originBitmap, fileName,object :FaceSearchImagesManger.Callback {
override fun onSuccess() {
- Log.d("Add Face","Add Face successful"+subFaceFiles[index]);
+ Log.d("Add Face","Add Face successful"+faceFiles[index]);
}
-
override fun onFailed(msg: String) {
- Log.e("Add Face","Add Face onFailed"+subFaceFiles[index]);
+ Log.e("Add Face","Add Face onFailed"+faceFiles[index]);
}
}
)
}else{
- Log.e("Add Face","获取Assert 目录文件图片失败 : "+subFaceFiles[index]);
+ Log.e("Add Face","获取Assert 目录文件图片失败 : "+faceFiles[index]);
}
}
diff --git a/faceAILib/src/main/java/com/ai/face/search/FaceSearch1NActivity.java b/faceAILib/src/main/java/com/ai/face/search/FaceSearch1NActivity.java
index 379ffba..a1c47a1 100644
--- a/faceAILib/src/main/java/com/ai/face/search/FaceSearch1NActivity.java
+++ b/faceAILib/src/main/java/com/ai/face/search/FaceSearch1NActivity.java
@@ -65,7 +65,7 @@ protected void onCreate(Bundle savedInstanceState) {
* 第二个参数linearZoom [0.001f,1.0f] 指定焦距,参考{@link CameraControl#setLinearZoom(float)}
* 焦距拉远一点,人才会靠近屏幕,才会减轻杂乱背景的影响。定制设备的摄像头自行调教此参数
*/
- CameraXFragment cameraXFragment = CameraXFragment.newInstance(cameraLens, 0.005f);
+ CameraXFragment cameraXFragment = CameraXFragment.newInstance(cameraLens, 0.001f);
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_camerax, cameraXFragment)
.commit();
diff --git a/faceAILib/src/main/java/com/ai/face/search/FaceSearchMNActivity.java b/faceAILib/src/main/java/com/ai/face/search/FaceSearchMNActivity.java
index a2785d7..66896cc 100644
--- a/faceAILib/src/main/java/com/ai/face/search/FaceSearchMNActivity.java
+++ b/faceAILib/src/main/java/com/ai/face/search/FaceSearchMNActivity.java
@@ -65,7 +65,7 @@ protected void onCreate(Bundle savedInstanceState) {
* 第二个参数linearZoom [0.001f,1.0f] 指定焦距,参考{@link CameraControl#setLinearZoom(float)}
* 焦距拉远一点,人才会靠近屏幕,才会减轻杂乱背景的影响。定制设备的摄像头自行调教此参数
*/
- CameraXFragment cameraXFragment = CameraXFragment.newInstance(cameraLens, 0.005f);
+ CameraXFragment cameraXFragment = CameraXFragment.newInstance(cameraLens, 0.001f);
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_camerax, cameraXFragment)
.commit();
diff --git a/faceAILib/src/main/java/com/ai/face/verify/FaceVerificationActivity.java b/faceAILib/src/main/java/com/ai/face/verify/FaceVerificationActivity.java
index b47e13b..f1e9752 100644
--- a/faceAILib/src/main/java/com/ai/face/verify/FaceVerificationActivity.java
+++ b/faceAILib/src/main/java/com/ai/face/verify/FaceVerificationActivity.java
@@ -58,7 +58,7 @@ public class FaceVerificationActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_face_verification);
+ setContentView(R.layout.activity_face_verification);//建议背景白色可以补充光照不足
setTitle("1:1 face verify");
scoreText = findViewById(R.id.silent_Score);
tipsTextView = findViewById(R.id.tips_view);
@@ -79,7 +79,7 @@ protected void onCreate(Bundle savedInstanceState) {
* 第二个参数linearZoom [0.001f,1.0f] 指定焦距,参考{@link CameraControl#setLinearZoom(float)}
* 焦距拉远一点,人才会靠近屏幕,才会减轻杂乱背景的影响。定制设备的摄像头自行调教此参数
*/
- cameraXFragment = CameraXFragment.newInstance(cameraLensFacing, 0.005f);
+ cameraXFragment = CameraXFragment.newInstance(cameraLensFacing, 0.001f);
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment_camerax, cameraXFragment).commit();
@@ -97,12 +97,13 @@ protected void onCreate(Bundle savedInstanceState) {
//人脸图的裁剪和保存最好提前完成,如果不是本SDK 录入的人脸可能人脸不标准
//这里可能从网络等地方获取,业务方自行决定,为了方便模拟我们放在Assert 目录
Bitmap remoteBitmap = VerifyUtils.getBitmapFromAssert(this, "yourFace.pngtest");
- if (remoteBitmap==null){
- Toast.makeText(getBaseContext(),R.string.add_a_face_image,Toast.LENGTH_LONG).show();
+ if (remoteBitmap == null) {
+ Toast.makeText(getBaseContext(), R.string.add_a_face_image, Toast.LENGTH_LONG).show();
tipsTextView.setText(R.string.add_a_face_image);
return;
}
//人脸照片可能不是规范的正方形,非人脸区域过大甚至无人脸 多个人脸等情况,需要SDK内部裁剪等处理
+ //(检测人脸照片质量使用 checkFaceQuality方法,处理类同checkFaceQuality)
AddFaceUtils.ILil.getInstance(getApplication())
.disposeBaseFaceImage(remoteBitmap, yourFacePath, new AddFaceUtils.Callback() {
//从图片中裁剪识别人脸成功
@@ -110,11 +111,12 @@ protected void onCreate(Bundle savedInstanceState) {
public void onSuccess(@NonNull Bitmap cropedBitmap) {
initFaceVerification(cropedBitmap);
}
+
//识别的错误信息
@Override
- public void onFailed(@NotNull String msg) {
+ public void onFailed(@NotNull String msg,int errorCode) {
Log.e("ttt", msg);
- Toast.makeText(getBaseContext(),msg,Toast.LENGTH_LONG).show();
+ Toast.makeText(getBaseContext(), msg, Toast.LENGTH_LONG).show();
}
});
}
@@ -130,18 +132,16 @@ public void onFailed(@NotNull String msg) {
* @param baseBitmap 1:1 人脸识别对比的底片,如果仅仅需要活体检测,可以把App logo Bitmap 当参数传入并忽略对比结果
*/
private void initFaceVerification(Bitmap baseBitmap) {
-
FaceProcessBuilder faceProcessBuilder = new FaceProcessBuilder.Builder(this)
- .setThreshold(0.88f) //阈值设置,范围限 [0.85,0.95] 识别可信度,也是识别灵敏度
+ .setThreshold(0.85f) //阈值设置,范围限 [0.8,0.95] 识别可信度,也是识别灵敏度
.setBaseBitmap(baseBitmap) //1:1 人脸识别对比的底片,仅仅需要SDK活体检测可以忽略比对结果
.setLivenessType(LivenessType.SILENT_MOTION) //活体检测可以有静默活体,动作活体或者组合也可以不需要活体NONE
.setLivenessDetectionMode(LivenessDetectionMode.FAST) //硬件配置低用FAST动作活体模式,否则用精确模式
.setSilentLivenessThreshold(silentLivenessPassScore) //静默活体阈值 [0.88,0.99]
.setMotionLivenessStepSize(2) //随机动作活体的步骤个数[1-2],SILENT_MOTION和MOTION 才有效
- .setVerifyTimeOut(16) //活体检测支持设置超时时间 [9,22] 秒
+ .setVerifyTimeOut(15) //活体检测支持设置超时时间 [9,22] 秒
.setGraphicOverlay(faceTipsOverlay) //正式环境请去除设置
.setProcessCallBack(new ProcessCallBack() {
-
/**
* 1:1 人脸识别 活体检测 对比结束
*
@@ -165,9 +165,9 @@ public void onProcessTips(int i) {
public void onTimeCountDown(float percent) {
faceCoverView.startCountDown(percent);
}
-
}).create();
+
faceVerifyUtils.setDetectorParams(faceProcessBuilder);
cameraXFragment.setOnAnalyzerListener(imageProxy -> {
@@ -227,6 +227,8 @@ private void showVerifyResult(boolean isVerifyMatched, float similarity, float s
*
* 添加声音提示和动画提示定制也在这里根据返回码进行定制
*/
+ int retryTime = 0;
+
private void showFaceVerifyTips(int actionCode) {
if (!isDestroyed() && !isFinishing()) {
runOnUiThread(() -> {
@@ -283,8 +285,14 @@ private void showFaceVerifyTips(int actionCode) {
.setMessage(R.string.motion_liveness_detection_time_out)
.setCancelable(false)
.setPositiveButton(R.string.retry, (dialogInterface, i) -> {
- //建议控制重试次数,一般2次没成功基本不用重试了,设备配置太低或环境因素
- faceVerifyUtils.retryVerify();
+ retryTime++;
+ //建议控制重试次数,一般2次没成功基本不用重试了,设备配置太低或环境因素
+ if (retryTime > 1) {
+ //记得按钮名字改一下
+ FaceVerificationActivity.this.finish();
+ } else {
+ faceVerifyUtils.retryVerify();
+ }
}
).show();
break;
diff --git a/face_search_test.jpg b/images/MN_face_search_test.jpg
similarity index 100%
rename from face_search_test.jpg
rename to images/MN_face_search_test.jpg
diff --git a/install_newest_mediapipe_on_macos.md b/install_newest_mediapipe_on_macos.md
deleted file mode 100644
index eceafdc..0000000
--- a/install_newest_mediapipe_on_macos.md
+++ /dev/null
@@ -1,66 +0,0 @@
-## Unable to install mediapipe-model-maker newest version on Macos ?
-
-yes ,when I first time try install mediapipe-model-maker,it can only install 0.1.0.2 ,
-but 0.2.1.3 is the newest at 2023,11,14; what the problem ? my macos version is 13.6.1
-
-So I Post a issues to google/mediaPipe https://github.com/google/mediapipe/issues/4945
-
-Maybe it is a Small probability event,I can not find method to resolve it
-
-
-## Logs
-
-OS Platform and Distribution
-macos Ventura 13.3.1 (a) (22E772610a
-
-Compiler version
-pip --version 23.3.1
-
-Programming Language and version
-python3 --version 3.9.0
-
-
-macos Ventura 13.3.1 (a) is not a Stable version? OK, update from 13.3.1 to 13.6.1
-
-sadly....
-
-python -m pip install mediapipe-model-maker==0.2.1.3
-Collecting mediapipe-model-maker==0.2.1.3
-Using cached mediapipe_model_maker-0.2.1.3-py3-none-any.whl.metadata (1.6 kB)
-Requirement already satisfied: absl-py in ./venv/lib/python3.9/site-packages (from mediapipe-model-maker==0.2.1.3) (1.4.0)
-INFO: pip is looking at multiple versions of mediapipe-model-maker to determine which version is compatible with other requirements. This could take a while.
-ERROR: Could not find a version that satisfies the requirement mediapipe>=0.10.0 (from mediapipe-model-maker) (from versions: 0.8.4.2, 0.8.5, 0.8.6.2, 0.8.7.1, 0.8.7.2, 0.8.7.3, 0.8.8.1, 0.8.9.1, 0.8.10, 0.8.10.1, 0.8.11, 0.9.0, 0.9.0.1, 0.9.1.0)
-ERROR: No matching distribution found for mediapipe>=0.10.0
-
-## step 1
-
- please run below python code
- ```
- import distutils
- print(distutils.util.get_platform())
- print(platform.mac_ver()[0])
- ```
- the result is :
- macosx-10.9-x86_64
- 10.16
- oh,my God ! why ??
-
-[run below commands on terminal and you will see the difference:](https://eclecticlight.co/2020/08/13/macos-version-numbering-isnt-so-simple/)
-
-SYSTEM_VERSION_COMPAT=1 cat /System/Library/CoreServices/SystemVersion.plist
-SYSTEM_VERSION_COMPAT=0 cat /System/Library/CoreServices/SystemVersion.plist
-
-
-## Step 2
-run below commands on terminal
-
-> export SYSTEM_VERSION_COMPAT=0
-
-You could also add this to your. bash_profile or other shell environment file if you have one, to do this automatically for you.
-
-OK , you can download newest version now
-
-pip3 install mediapipe-model-maker==newestVersion
-
-Goooooooooooood Luck!
-