@faceaisdk/react-native-face-sdk 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +54 -200
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
# @faceaisdk/react-native-face-sdk
|
|
2
2
|
|
|
3
|
-
FaceAISDK 人脸识别、活体检测 React Native
|
|
3
|
+
FaceAISDK 人脸识别、活体检测 React Native 原生插件,支持 iOS 和 Android 双端;所有功能无需后台 API 服务即可离线运行。
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
- **根目录**:可发布插件 `@faceaisdk/react-native-face-sdk`
|
|
8
|
-
- **`example/`**:示例 App / 真机联调工程
|
|
9
|
-
|
|
10
|
-
> **说明**:人脸识别、活体检测等功能需要摄像头,必须使用真机,不能在模拟器中验证。
|
|
5
|
+
> ⚠️ **重要提示**:本 SDK 涉及底层硬件与原生算法,**必须使用真机测试**,模拟器无法运行。
|
|
11
6
|
|
|
12
7
|
## 安装
|
|
13
8
|
|
|
@@ -15,64 +10,29 @@ FaceAISDK 人脸识别、活体检测 React Native 原生插件仓库,支持 i
|
|
|
15
10
|
npm install @faceaisdk/react-native-face-sdk
|
|
16
11
|
```
|
|
17
12
|
|
|
18
|
-
### iOS
|
|
19
|
-
|
|
20
|
-
在您的 iOS 工程目录下运行:
|
|
13
|
+
### iOS 配置
|
|
21
14
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
pod install
|
|
25
|
-
```
|
|
15
|
+
1. 进入 iOS 目录并安装 Pod 依赖:
|
|
16
|
+
```sh
|
|
17
|
+
cd ios && pod install
|
|
18
|
+
```
|
|
19
|
+
2. 在 `Info.plist` 中添加相机权限描述:
|
|
20
|
+
```xml
|
|
21
|
+
<key>NSCameraUsageDescription</key>
|
|
22
|
+
<string>我们需要访问您的相机进行人脸识别与活体检测</string>
|
|
23
|
+
```
|
|
26
24
|
|
|
27
|
-
|
|
28
|
-
> ```xml
|
|
29
|
-
> <key>NSCameraUsageDescription</key>
|
|
30
|
-
> <string>我们需要访问您的相机进行人脸识别</string>
|
|
31
|
-
> ```
|
|
25
|
+
### Android 配置
|
|
32
26
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
> **注意**:由于使用了人脸识别 SDK,您需要在 `AndroidManifest.xml` 中确保有以下权限:
|
|
39
|
-
> ```xml
|
|
40
|
-
> <uses-permission android:name="android.permission.CAMERA" />
|
|
41
|
-
> ```
|
|
27
|
+
1. 确保项目的 `minSdkVersion` 至少为 **24**。
|
|
28
|
+
2. 在 `AndroidManifest.xml` 中声明相机权限:
|
|
29
|
+
```xml
|
|
30
|
+
<uses-permission android:name="android.permission.CAMERA" />
|
|
31
|
+
```
|
|
42
32
|
|
|
43
33
|
---
|
|
44
34
|
|
|
45
|
-
##
|
|
46
|
-
|
|
47
|
-
| 功能 | iOS | Android |
|
|
48
|
-
|------|-----|---------|
|
|
49
|
-
| SDK相机录入人脸信息 | ✅ | ✅ |
|
|
50
|
-
| 1:1人脸识别+活体检测 | ✅ | ✅ |
|
|
51
|
-
| 活体检测(动作/炫彩/静默) | ✅ | ✅ |
|
|
52
|
-
| 查询人脸特征信息 | ✅ | ✅ |
|
|
53
|
-
| 同步人脸特征信息 | ✅ | ✅ |
|
|
54
|
-
| 图片录入人脸信息 | ✅ | ✅ |
|
|
55
|
-
| 删除人脸特征信息 | ✅ | ✅ |
|
|
56
|
-
|
|
57
|
-
## 仓库结构
|
|
58
|
-
|
|
59
|
-
```text
|
|
60
|
-
FaceAISDK_RN/
|
|
61
|
-
├── src/ # 插件 TypeScript 对外 API
|
|
62
|
-
├── android/ # 插件 Android Library 工程
|
|
63
|
-
├── ios/ # 插件 iOS 原生源码与资源
|
|
64
|
-
├── @faceaisdk/react-native-face-sdk.podspec # iOS Podspec
|
|
65
|
-
├── example/ # 示例 App(真机调试、联调、回归)
|
|
66
|
-
│ ├── App.tsx
|
|
67
|
-
│ ├── android/
|
|
68
|
-
│ ├── ios/
|
|
69
|
-
│ └── auto_run.sh
|
|
70
|
-
├── __tests__/ # 插件单元测试
|
|
71
|
-
├── README.md
|
|
72
|
-
└── 插件封装与npm发布指南.md
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
## JS API
|
|
35
|
+
## 功能与 API 说明
|
|
76
36
|
|
|
77
37
|
根目录导出 Promise 风格接口:
|
|
78
38
|
|
|
@@ -88,165 +48,59 @@ import {
|
|
|
88
48
|
} from '@faceaisdk/react-native-face-sdk';
|
|
89
49
|
```
|
|
90
50
|
|
|
91
|
-
###
|
|
51
|
+
### 核心方法
|
|
92
52
|
|
|
93
53
|
#### 1. SDK 相机录入人脸
|
|
94
|
-
|
|
54
|
+
```ts
|
|
55
|
+
addFaceBySDKCamera(faceID: string, options?: { mode?: number; showConfirm?: boolean }) => Promise<FaceResult>
|
|
56
|
+
```
|
|
95
57
|
- `faceID`: 用户唯一标识
|
|
96
|
-
- `options`:
|
|
58
|
+
- `options`: 包含模式切换和是否展示确认弹窗。
|
|
97
59
|
|
|
98
60
|
#### 2. 人脸比对 + 活体检测
|
|
99
|
-
`faceVerify(faceID, options)`
|
|
100
|
-
- `faceID`: 待验证的用户标识
|
|
101
|
-
- `options`: 包含阈值、活体类型、动作序列、超时时间等配置
|
|
102
|
-
|
|
103
|
-
#### 3. 纯活体检测
|
|
104
|
-
`livenessVerify(options)`
|
|
105
|
-
- 仅检测镜头前是否为活人,不进行 1:1 比对
|
|
106
|
-
|
|
107
|
-
## 统一返回结构
|
|
108
|
-
|
|
109
61
|
```ts
|
|
110
|
-
|
|
111
|
-
code: number;
|
|
112
|
-
msg: string;
|
|
113
|
-
faceID: string;
|
|
114
|
-
similarity: number;
|
|
115
|
-
liveness: number;
|
|
116
|
-
faceFeature: string;
|
|
117
|
-
faceBase64: string;
|
|
118
|
-
}
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
## 状态码说明
|
|
122
|
-
|
|
123
|
-
| Code | 含义 |
|
|
124
|
-
|------|------|
|
|
125
|
-
| 0 | 初始化状态/用户取消 |
|
|
126
|
-
| 1 | 人脸识别对比成功(大于设置的 threshold) |
|
|
127
|
-
| 2 | 人脸识别对比失败(小于设置的 threshold) |
|
|
128
|
-
| 3 | 动作活体检测成功 |
|
|
129
|
-
| 4 | 动作活体超时 |
|
|
130
|
-
| 5 | 多次没有检测到人脸 |
|
|
131
|
-
| 6 | 没有对应的人脸特征值 |
|
|
132
|
-
| 7 | 炫彩活体成功 |
|
|
133
|
-
| 8 | 炫彩活体失败 |
|
|
134
|
-
| 9 | 炫彩活体失败(光线亮度过高) |
|
|
135
|
-
| 10 | 所有活体检测完成 |
|
|
136
|
-
| 11 | 静默活体检测失败 |
|
|
137
|
-
| 12 | 没有录入人脸信息 |
|
|
138
|
-
| 13 | 多人脸出现在镜头 |
|
|
139
|
-
|
|
140
|
-
## 根目录:作为库开发/发布
|
|
141
|
-
|
|
142
|
-
### 构建与测试
|
|
143
|
-
|
|
144
|
-
```sh
|
|
145
|
-
npm run typecheck
|
|
146
|
-
npm run build
|
|
147
|
-
npm test
|
|
148
|
-
npm run pack
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
### 发布前检查
|
|
152
|
-
|
|
153
|
-
```sh
|
|
154
|
-
npm pack .
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
生成产物中应至少包含:
|
|
158
|
-
|
|
159
|
-
- `src/` / `lib/`
|
|
160
|
-
- `android/`
|
|
161
|
-
- `ios/`
|
|
162
|
-
- `@faceaisdk/react-native-face-sdk.podspec`
|
|
163
|
-
|
|
164
|
-
## `example/`:作为示例 App 运行
|
|
165
|
-
|
|
166
|
-
> 请确保已完成 [React Native 环境配置](https://reactnative.dev/docs/set-up-your-environment)。
|
|
167
|
-
|
|
168
|
-
### 方式一:使用仓库根命令
|
|
169
|
-
|
|
170
|
-
```sh
|
|
171
|
-
npm run start
|
|
172
|
-
npm run android
|
|
173
|
-
npm run ios
|
|
62
|
+
faceVerify(faceID: string, options?: FaceVerifyOptions) => Promise<FaceResult>
|
|
174
63
|
```
|
|
64
|
+
- 包含相似度阈值、活体类型、动作序列、超时时间等配置。
|
|
175
65
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
```sh
|
|
181
|
-
cd example
|
|
182
|
-
node ../node_modules/react-native/cli.js start --config metro.config.js
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
#### Android
|
|
186
|
-
|
|
187
|
-
```sh
|
|
188
|
-
cd example
|
|
189
|
-
node ../node_modules/react-native/cli.js run-android --no-packager
|
|
190
|
-
```
|
|
191
|
-
|
|
192
|
-
#### iOS
|
|
193
|
-
|
|
194
|
-
```sh
|
|
195
|
-
cd example
|
|
196
|
-
./pod-install.sh
|
|
197
|
-
node ../node_modules/react-native/cli.js run-ios --device "您的手机名称"
|
|
198
|
-
```
|
|
199
|
-
|
|
200
|
-
如果您希望在仓库根目录执行,也可以直接运行:
|
|
201
|
-
|
|
202
|
-
```sh
|
|
203
|
-
npm run pods:install
|
|
204
|
-
```
|
|
205
|
-
|
|
206
|
-
`pod-install.sh` 会自动:
|
|
207
|
-
|
|
208
|
-
- 使用 `example/vendor/bundle` 安装 Ruby gems
|
|
209
|
-
- 注入 Ruby 4 所需的 `kconv` 兼容层
|
|
210
|
-
- 对 `RCTSwiftUI` / `TensorFlowLiteSwift` 注入 `-no-verify-emitted-module-interface` 兼容参数(用于 Xcode 15.x)
|
|
211
|
-
- 执行 `bundle exec pod install`
|
|
212
|
-
|
|
213
|
-
### 真机自动运行脚本
|
|
214
|
-
|
|
215
|
-
根目录保留了快捷入口,仍可直接执行:
|
|
216
|
-
|
|
217
|
-
```sh
|
|
218
|
-
./auto_run.sh
|
|
219
|
-
```
|
|
220
|
-
|
|
221
|
-
实际会转发到:
|
|
222
|
-
|
|
223
|
-
```sh
|
|
224
|
-
./example/auto_run.sh
|
|
66
|
+
#### 3. 纯活体检测
|
|
67
|
+
```ts
|
|
68
|
+
livenessVerify(options?: LivenessVerifyOptions) => Promise<FaceResult>
|
|
225
69
|
```
|
|
70
|
+
- 仅检测镜头前是否为活人,不进行 1:1 比对。
|
|
226
71
|
|
|
227
|
-
|
|
72
|
+
---
|
|
228
73
|
|
|
229
|
-
`
|
|
74
|
+
## 统一返回结构 (`FaceResult`)
|
|
230
75
|
|
|
231
76
|
```ts
|
|
232
|
-
|
|
77
|
+
export interface FaceResult {
|
|
78
|
+
code: number; // 状态码
|
|
79
|
+
msg: string; // 提示文本
|
|
80
|
+
faceID: string; // 用户标识
|
|
81
|
+
similarity: number; // 比对相似度
|
|
82
|
+
liveness: number; // 活体检测分值
|
|
83
|
+
faceFeature: string; // 人脸特征值 (1024位)
|
|
84
|
+
faceBase64: string; // 采集到的人脸图片 Base64 字符串
|
|
85
|
+
}
|
|
233
86
|
```
|
|
234
87
|
|
|
235
|
-
|
|
88
|
+
### 状态码 (`code`) 说明
|
|
236
89
|
|
|
237
|
-
|
|
90
|
+
| Code | 含义 | Code | 含义 |
|
|
91
|
+
|------|------|------|------|
|
|
92
|
+
| **0** | 用户取消/初始化状态 | **7** | 炫彩活体成功 |
|
|
93
|
+
| **1** | 人脸识别比对/录入成功 | **8** | 炫彩活体失败 |
|
|
94
|
+
| **2** | 比对失败 (低于阈值) | **9** | 炫彩失败 (环境光过强) |
|
|
95
|
+
| **3** | 动作活体检测成功 | **10** | 所有活体检测完成 |
|
|
96
|
+
| **4** | 动作活体超时 | **11** | 静默活体检测失败 |
|
|
97
|
+
| **5** | 多次未检测到人脸 | **12** | 对应人脸未录入 |
|
|
98
|
+
| **6** | 对应人脸特征值不存在 | **13** | 镜头内出现多人脸 |
|
|
238
99
|
|
|
239
|
-
|
|
240
|
-
本插件需要相机权限。
|
|
241
|
-
- **Android**: 插件会自动处理运行时权限请求,但您仍需确保 `AndroidManifest.xml` 中声明了权限。
|
|
242
|
-
- **iOS**: 请务必在 `Info.plist` 中配置 `NSCameraUsageDescription`,否则 App 会在调用相机时崩溃。
|
|
100
|
+
---
|
|
243
101
|
|
|
244
|
-
|
|
245
|
-
人脸识别和活体检测依赖底层硬件和原生 SDK,**模拟器无法运行**,请使用真机测试。
|
|
102
|
+
## 贡献与本地开发
|
|
246
103
|
|
|
247
|
-
|
|
248
|
-
如果遇到 Swift 相关的编译错误,请参考 `example/pod-install.sh` 中的处理方式,确保开启了 `-no-verify-emitted-module-interface`。
|
|
104
|
+
关于本地二次开发、本地示例工程运行、混合调试以及完整的 npm 发布流程,请参考开发说明文档:[插件封装与npm发布指南.md](./插件封装与npm发布指南.md)。
|
|
249
105
|
|
|
250
|
-
## 许可证 (License)
|
|
251
106
|
|
|
252
|
-
MIT
|
package/package.json
CHANGED