Skip to content

Commit

Permalink
自定义双目摄像头搜索支持 && 解决错误识别问题和其他BUG
Browse files Browse the repository at this point in the history
  • Loading branch information
anylife2.0 committed Mar 26, 2024
1 parent 4b02a21 commit 7eb8b7e
Show file tree
Hide file tree
Showing 7 changed files with 25 additions and 15 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ On_device Offline Android Face Detection 、Recognition 、Liveness Detection An

![设备端离线机器学习优点](img.png)

## 当前版本说明 V1.8.0
## 当前版本说明 V1.8.2
- 支持自定义双目摄像头搜索
- 解决错误识别问题和其他BUG

Expand Down
9 changes: 4 additions & 5 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ android {
minSdk 21
targetSdk 33
versionCode 18
versionName "1.5.0"
versionName "1.8.2"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

Expand Down Expand Up @@ -54,7 +54,7 @@ android {
}



//根据Compile SDK 不同,各自项目依赖体系不一样
//主工程和SDK 中的依赖有冲突需要统一依赖,可以参考下面方式处理
def camera_version = "1.2.3"
configurations.configureEach {
Expand All @@ -73,10 +73,9 @@ dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])

// 人脸识别 活体检测 以及人脸检索 SDK 依赖
implementation 'io.github.anylifezlb:FaceRecognition:1.8.0' //请依赖1.6 以上版本,老版本不维护

//1:N (M:N)人脸识别依赖独立版本的就可以了,体积小 https://github.com/AnyLifeZLB/FaceSearchSDK_Android
//implementation 'io.github.anylifezlb:FaceSearchSDK:2.x.xxxxxxxxxx'
implementation 'io.github.anylifezlb:FaceRecognition:1.8.2' //请依赖1.6 以上版本,老版本不维护




Expand Down
3 changes: 3 additions & 0 deletions app/src/main/java/com/ai/face/NaviActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@ import java.io.File
*
* 一个在线人脸图片对比工具 https://facecomparison.toolpie.com/
*
* 定期清理 Demo 在Bugly 的Bug: https://bugly.qq.com/v2/crash-reporting/crashes/36fade54d8?pid=1
*
*
* 2022.07.29
*/
class NaviActivity : AppCompatActivity(), PermissionCallbacks {
Expand Down
10 changes: 5 additions & 5 deletions app/src/main/java/com/ai/face/search/FaceImageEditActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ class FaceImageEditActivity : AppCompatActivity() {
.setTitle("确定要删除" + File(faceImageList[i]).name)
.setMessage("删除后对应的人将无法被程序识别")
.setPositiveButton("确定") { _: DialogInterface?, _: Int ->
FaceSearchImagesManger.ILil.getInstance(application)
FaceSearchImagesManger.IL1Iii.getInstance(application)
?.deleteFaceImage(faceImageList[i])
loadImageList()
faceImageListAdapter.notifyDataSetChanged()
Expand Down Expand Up @@ -196,7 +196,7 @@ class FaceImageEditActivity : AppCompatActivity() {
Toast.makeText(baseContext, "处理中...", Toast.LENGTH_LONG).show()
//Kotlin 混淆操作后协程操作失效了,因为是异步操作只能等一下
CoroutineScope(Dispatchers.IO).launch {
FaceSearchImagesManger.ILil.getInstance(application)
FaceSearchImagesManger.IL1Iii.getInstance(application)
?.insertOrUpdateFaceImage(
bitmap,
CACHE_SEARCH_FACE_DIR + File.separatorChar + name
Expand Down Expand Up @@ -226,12 +226,12 @@ class FaceImageEditActivity : AppCompatActivity() {
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == REQUEST_TAKE_PHOTO && resultCode == RESULT_OK) {
var bitmap = BitmapUtils.Object.getFixedBitmap(currentPhotoPath!!, contentResolver)
var bitmap = BitmapUtils.Companion().getFixedBitmap(currentPhotoPath!!, contentResolver)

//裁剪人脸,并压缩大小, 防止人脸录入 OOM 闪退1:N 搜索成功暂停0.5秒
//裁剪人脸,并压缩大小,防止人脸录入 OOM 闪退1:N 搜索成功暂停0.5秒
bitmap = BaseImageDispose(baseContext).cropFaceBitmap(bitmap)

//加一个确定ID的操作
//加一个确定ID的操作,ID不要再确认了
showConfirmDialog(bitmap)
}
}
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/java/com/ai/face/search/SearchNaviActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ class SearchNaviActivity : AppCompatActivity(), PermissionCallbacks {
val subFaceFiles = context.assets.list("")
if (subFaceFiles != null) {
for (index in subFaceFiles.indices) {
FaceSearchImagesManger.ILil.getInstance(context)?.insertOrUpdateFaceImage(
FaceSearchImagesManger.IL1Iii.getInstance(context)?.insertOrUpdateFaceImage(
getBitmapFromAsset(
assetManager,
subFaceFiles[index]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ private void showConfirmDialog(Bitmap bitmap) {
EditText editText = dialogView.findViewById(R.id.edit_text);

editText.requestFocus();
editText.setVisibility(View.GONE); //face id, 1:1 写死,实际业务自行修改
editText.setVisibility(View.GONE); //face id, 1:1 写死,实际业务自行修改

btnOK.setOnClickListener(v -> {
String yourUniQueFaceId = "18707611416"; //face id, 1:1 写死,实际业务自行修改
Expand Down
12 changes: 10 additions & 2 deletions questions.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
### 8.是否免费?
1:1 人脸识别含有活体检测功能费用 5K,不限终端个数种类,永久有效。
1:N /M:N人脸搜索识别功能都需要申请license授权,根据终端个数和种类费用8K,永久有效。
所有授权都是绑定App包名和签名进行,价格差异在于是否要定制特性开发
所有授权都是绑定App包名和签名进行,新的功能和定制特性开发根据评估情况协定。

### 9.摄像头方向调整相关
目前SDK 的摄像头预览,分析画面都是在内部处理,画面方向和手机,Pad 的姿态(传感器反向)决定,画面能随横竖屏自动切换
Expand All @@ -60,13 +60,21 @@ anylife.zlb@gmail.com
}
`

### 11.开发环境和Gradle 插件版本是怎样的?
### 11.集成SDK开发环境和Gradle 插件版本是怎样的?
开发环境 Android Studio Iguana | 2023.2.1
gradle插件版本 7.4.2 gradle 版本 7.5

### 12.是否可以使用在金融,军事领域
SDK没有达到100% 的准确度,不建议使用在金融军事领域,建议的场景如下:

【1:1】 移动考勤真人校验,App免密登录,酒店入驻、刷脸支付、刷脸解锁、真人校验
【1:N】 智能门锁,考勤机,通缉人员行踪搜索,智慧校园、景区、工地、社区、酒店等
【M:N】 公安布控,人群追踪 监控等等**

### 13.能通过File 操作直接把人脸照片放到制定目录就开始人脸搜索吗?

不行,必须要通过SDK 的API进行,因为要提取人脸特征值和建立搜索库索引才能快速搜索
如FaceSearchImagesManger.IL1Iii.getInstance().insertOrUpdateFaceImage()



Expand Down

0 comments on commit 7eb8b7e

Please sign in to comment.