更新README

This commit is contained in:
guanyuankai 2025-10-31 14:09:36 +08:00
parent 9b0106b52b
commit 290360c4f0
2 changed files with 54 additions and 64 deletions

View File

@ -1,7 +1,9 @@
人脸识别 Android SDK 集成指南 (V1.0)
# 人脸识别 Android SDK 集成指南 (V1.0)
本文档为人脸识别 C++ 核心库 (libface_sdk_jni.so) 提供了详尽的 Android 集成步骤和 API 使用说明。
1. 概述
## 1. 概述
本 SDK 提供了在 Android 设备上本地运行的高性能人脸识别功能。SDK 核心基于 C++ 实现1:1 转译自 Python 端的 7 模型推理管线,确保了特征向量的完全兼容。
SDK 提供的主要 Java API 接口包括:
@ -19,7 +21,7 @@ C++ 核心: 所有计算均在 C++ 层完成,性能高,内存可控。
手动捆绑: SDK 手动捆绑了所有必要的依赖库 (ONNX Runtime, OpenCV, C++ STL),确保了在不同设备上的一致性,避免了因 Gradle 依赖版本不匹配导致的崩溃。
2. SDK 包内容
## 2. SDK 包内容
分发的 SDK 包含三个部分:
1. Java 接口
@ -46,7 +48,8 @@ SDK_Models/
├── fsanet-conv.onnx
├── fsanet-var.onnx
└── model_gray_mobilenetv2_rotcls.onnx
3. 集成指南
## 3. 集成指南
请按照以下步骤将 SDK 集成到您的 Android Studio 项目中。
步骤 1: 复制 Java 接口
@ -90,12 +93,18 @@ SDK_Models/
如果是 build.gradle.kts (Kotlin 脚本):
Kotlin
```
android {
```android {
// ... (namespace, compileSdk, 等)
defaultConfig {
// ... (applicationId, minSdk, targetSdk, 等)
// 强制 Gradle 只打包和使用 arm64-v8a 架构的库
// 这可以防止在 x86 模拟器上发生库不匹配的崩溃
ndk {
abiFilters.add("arm64-v8a")
}
}
// (保持这个 sourceSets 块不变,即使它看起来是空的)
@ -106,20 +115,14 @@ android {
}
}
// 强制 Gradle 只打包和使用 arm64-v8a 架构的库
// 这可以防止在 x86 模拟器上发生库不匹配的崩溃
ndk {
abiFilters.add("arm64-v8a")
}
// ... (buildTypes, compileOptions, 等)
}
```
}```
如果是 build.gradle (Groovy 脚本):
Groovy
```
android {
```android {
// ... (namespace, compileSdk, 等)
defaultConfig {
@ -140,8 +143,7 @@ android {
// ... (buildTypes, compileOptions, 等)
}
```
点击 "Sync Now" 同步您的项目。
```点击 "Sync Now" 同步您的项目。
至此,集成已全部完成!
@ -152,8 +154,7 @@ FaceSDKWrapper.java 会自动处理模型复制和 C++ 库加载。
您必须在后台线程中初始化 SDK因为它包含耗时的模型复制操作仅限首次启动
Java
```
import com.facesdk.wrapper.FaceSDKWrapper; // 确保导入您修改了包名的类
```import com.facesdk.wrapper.FaceSDKWrapper; // 确保导入您修改了包名的类
public class MyApplication extends Application {
@ -181,16 +182,14 @@ public class MyApplication extends Application {
public FaceSDKWrapper getSdkWrapper() {
return (isSdkInitialized) ? sdkWrapper : null;
}
}
```
}```
(您也可以不在 Application 中初始化,而是在 Activity 中,如我们的测试项目所示)
2. 提取特征 (必须在后台线程)
特征提取是一个CPU 密集型操作(运行 7 个模型)。严禁在 UI 主线程上调用它,否则会导致 App 冻结。
Java
```
// (在您的 Activity 或 ViewModel 中)
```// (在您的 Activity 或 ViewModel 中)
// 假设您已从 Application 中获取了 sdkWrapper 实例
public void runExtraction(Bitmap faceBitmap) {
@ -215,31 +214,27 @@ public void runExtraction(Bitmap faceBitmap) {
}
});
}).start();
}
```
}```
3. 比较特征
这是一个非常快速的操作,可以在任何线程上调用。
Java
```
float[] featureA = ... // (来自 extractFeature)
```float[] featureA = ... // (来自 extractFeature)
float[] featureB = ... // (来自数据库)
float similarity = sdkWrapper.compare(featureA, featureB);
// 相似度是一个 -1.0 到 1.0 之间的浮点数 (余弦相似度)
Log.i("MyActivity", "人脸相似度: " + similarity);
```
Log.i("MyActivity", "人脸相似度: " + similarity);```
4. 释放 SDK
在您的主 Activity (或 Application) 退出时,调用 release() 来释放 C++ 占用的内存。
Java
```
// (在您的 MainActivity 中)
```// (在您的 MainActivity 中)
@Override
protected void onDestroy() {
super.onDestroy();
if (sdkWrapper != null) {
sdkWrapper.release();
}
}```
}```

View File

@ -1,7 +1,9 @@
人脸识别 Android SDK 集成指南 (V1.0)
# 人脸识别 Android SDK 集成指南 (V1.0)
本文档为人脸识别 C++ 核心库 (libface_sdk_jni.so) 提供了详尽的 Android 集成步骤和 API 使用说明。
1. 概述
## 1. 概述
本 SDK 提供了在 Android 设备上本地运行的高性能人脸识别功能。SDK 核心基于 C++ 实现1:1 转译自 Python 端的 7 模型推理管线,确保了特征向量的完全兼容。
SDK 提供的主要 Java API 接口包括:
@ -19,7 +21,7 @@ C++ 核心: 所有计算均在 C++ 层完成,性能高,内存可控。
手动捆绑: SDK 手动捆绑了所有必要的依赖库 (ONNX Runtime, OpenCV, C++ STL),确保了在不同设备上的一致性,避免了因 Gradle 依赖版本不匹配导致的崩溃。
2. SDK 包内容
## 2. SDK 包内容
分发的 SDK 包含三个部分:
1. Java 接口
@ -46,7 +48,8 @@ SDK_Models/
├── fsanet-conv.onnx
├── fsanet-var.onnx
└── model_gray_mobilenetv2_rotcls.onnx
3. 集成指南
## 3. 集成指南
请按照以下步骤将 SDK 集成到您的 Android Studio 项目中。
步骤 1: 复制 Java 接口
@ -90,12 +93,18 @@ SDK_Models/
如果是 build.gradle.kts (Kotlin 脚本):
Kotlin
```
android {
```android {
// ... (namespace, compileSdk, 等)
defaultConfig {
// ... (applicationId, minSdk, targetSdk, 等)
// 强制 Gradle 只打包和使用 arm64-v8a 架构的库
// 这可以防止在 x86 模拟器上发生库不匹配的崩溃
ndk {
abiFilters.add("arm64-v8a")
}
}
// (保持这个 sourceSets 块不变,即使它看起来是空的)
@ -106,20 +115,14 @@ android {
}
}
// 强制 Gradle 只打包和使用 arm64-v8a 架构的库
// 这可以防止在 x86 模拟器上发生库不匹配的崩溃
ndk {
abiFilters.add("arm64-v8a")
}
// ... (buildTypes, compileOptions, 等)
}
```
}```
如果是 build.gradle (Groovy 脚本):
Groovy
```
android {
```android {
// ... (namespace, compileSdk, 等)
defaultConfig {
@ -140,8 +143,7 @@ android {
// ... (buildTypes, compileOptions, 等)
}
```
点击 "Sync Now" 同步您的项目。
```点击 "Sync Now" 同步您的项目。
至此,集成已全部完成!
@ -152,8 +154,7 @@ FaceSDKWrapper.java 会自动处理模型复制和 C++ 库加载。
您必须在后台线程中初始化 SDK因为它包含耗时的模型复制操作仅限首次启动
Java
```
import com.facesdk.wrapper.FaceSDKWrapper; // 确保导入您修改了包名的类
```import com.facesdk.wrapper.FaceSDKWrapper; // 确保导入您修改了包名的类
public class MyApplication extends Application {
@ -181,16 +182,14 @@ public class MyApplication extends Application {
public FaceSDKWrapper getSdkWrapper() {
return (isSdkInitialized) ? sdkWrapper : null;
}
}
```
}```
(您也可以不在 Application 中初始化,而是在 Activity 中,如我们的测试项目所示)
2. 提取特征 (必须在后台线程)
特征提取是一个CPU 密集型操作(运行 7 个模型)。严禁在 UI 主线程上调用它,否则会导致 App 冻结。
Java
```
// (在您的 Activity 或 ViewModel 中)
```// (在您的 Activity 或 ViewModel 中)
// 假设您已从 Application 中获取了 sdkWrapper 实例
public void runExtraction(Bitmap faceBitmap) {
@ -215,31 +214,27 @@ public void runExtraction(Bitmap faceBitmap) {
}
});
}).start();
}
```
}```
3. 比较特征
这是一个非常快速的操作,可以在任何线程上调用。
Java
```
float[] featureA = ... // (来自 extractFeature)
```float[] featureA = ... // (来自 extractFeature)
float[] featureB = ... // (来自数据库)
float similarity = sdkWrapper.compare(featureA, featureB);
// 相似度是一个 -1.0 到 1.0 之间的浮点数 (余弦相似度)
Log.i("MyActivity", "人脸相似度: " + similarity);
```
Log.i("MyActivity", "人脸相似度: " + similarity);```
4. 释放 SDK
在您的主 Activity (或 Application) 退出时,调用 release() 来释放 C++ 占用的内存。
Java
```
// (在您的 MainActivity 中)
```// (在您的 MainActivity 中)
@Override
protected void onDestroy() {
super.onDestroy();
if (sdkWrapper != null) {
sdkWrapper.release();
}
}```
}```