Files
arc/.planning/codebase/INTEGRATIONS.md
2026-03-30 15:21:07 +08:00

158 lines
5.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# External Integrations
**Analysis Date:** 2026-03-30
## APIs & External Services
**人脸识别 SDK:**
- 虹软 (ArcSoft) 人脸识别 SDK - 离线人脸检测、特征提取、活体检测
- SDK 库: `arcsoft_face.jar`, `libarcsoft_face.so`
- 版本: 基于 2024年1月版本
- Auth: 需要 AppId、SdkKey、ActiveKey从虹软开放平台获取
- 激活方式: 在线激活(`FaceEngine.activeOnline()`
- 官方文档: https://ai.arcsoft.com.cn
**图像处理工具:**
- 虹软图像处理工具库 - 图像格式转换和处理
- SDK 库: `arcsoft_image_util.jar`, `libarcsoft_image_util.so`
## Data Storage
**Databases:**
- 无数据库集成 - 人脸特征数据存储在内存中(人脸库)
**Face Feature Database (In-Memory):**
- 人脸库存储: 通过 `FaceEngine.registerFaceFeature()` 注册到 SDK 内部内存
- 数据结构: `FaceFeatureInfo(searchId, featureData, faceTag)`
- 搜索能力: 1:N 人脸搜索SDK 内置)
- 注意: 人脸库数据在引擎释放后丢失,不持久化
**File Storage:**
- 虹软 SDK 激活文件存储于设备本地SDK 自动管理)
- 位置: Android 设备内部存储SDK 控制)
**Caching:**
- None - 无缓存层
## Authentication & Identity
**Auth Provider:**
- 虹软 SDK 激活机制 - 设备绑定激活
- Implementation: 在线激活验证 AppId + SdkKey + ActiveKey
- 激活文件: 设备指纹绑定,单设备单激活
- 错误处理: `FaceErrorCode` 枚举定义完整错误码映射
**激活状态检查:**
```dart
// 激活成功条件: errorCode == 0 或 errorCode == 90114 (已激活)
result['success'] = errorCode == 0 || errorCode == 90114;
```
**激活流程:**
1. 调用 `Arc.activeOnline(appId, sdkKey, activeKey)`
2. Flutter MethodChannel 传递参数到 Android
3. Android 调用 `FaceEngine.activeOnline(context, activeKey, appId, sdkKey)`
4. SDK 与虹软服务器验证并生成激活文件
5. 返回激活结果 Map
## Monitoring & Observability
**Error Tracking:**
- 错误码枚举系统 - `FaceErrorCode.java`(完整错误码映射)
- 分类: 通用错误、SDK基础错误、人脸识别错误、激活错误、网络错误、离线授权错误
**Logs:**
- Android Logcat 输出(`FaceEngineManager.java` 使用 `android.util.Log`
- Flutter debugPrint 输出(示例应用)
- 日志级别: Info, Error
**关键日志点:**
- SDK 初始化结果: `FaceEngineManager.init()`
- 人脸检测结果: `FaceEngineManager.detectFaces()`
- RGB 活体检测结果: `FaceEngineManager.getLiveness()`
- 特征提取结果: `FaceEngineManager.extractFaceFeature()`
- 人脸比对结果: `FaceEngineManager.compareFaceFeature()`
## CI/CD & Deployment
**Hosting:**
- 本地 Flutter 插件包 - 不发布到 pub.dev私有包
- `publish_to: 'none'`(示例应用)
**CI Pipeline:**
- None - 无 CI 配置文件
**Build Commands:**
```bash
flutter pub get # 获取依赖
flutter test # 运行 Flutter 单元测试
flutter build apk # 构建 Android APK
cd android && ./gradlew test # 运行 Android 单元测试
```
## Environment Configuration
**Required env vars (SDK 激活):**
- AppId: 虹软开放平台申请的应用 ID
- SdkKey: 虹软开放平台申请的 SDK 密钥
- ActiveKey: 激活密钥(可选,部分场景需要)
**示例应用配置(硬编码):**
```dart
// example/lib/main.dart
final String _appId = '4nPFuS2TYAQh9werHL2qbKjtTH9nnoixk7G6yqSUyjVH';
final String _sdkKey = 'aWMTT3coxNQFETg9f3BGHCiBznAApXmcHFF3J5yQbsZ';
final String _activeKey = 'NEAT7AU4KLCEK682';
```
**Secrets location:**
- 当前: 硬编码在示例应用(不推荐生产使用)
- 建议: 通过环境变量或安全存储传递
## Webhooks & Callbacks
**Incoming:**
- None - 无外部 webhook
**Outgoing:**
- None - 无外部 API 调用SDK 激活除外)
## Flutter-Native Communication
**Method Channel:**
- Channel 名称: `'arc'`
- 定义文件: `lib/arc_method_channel.dart`
- 实现: `MethodChannelArc`
**支持的方法:**
| 方法名 | 功能 | 参数 |
|--------|------|------|
| `getPlatformVersion` | 获取平台版本 | 无 |
| `activeOnline` | SDK 在线激活 | appId, sdkKey, activeKey |
| `init` | 初始化人脸引擎 | detectMode, orient, maxFaceNum, combinedMask |
| `detectFaces` | 人脸检测+RGB活体 | data, width, height, format |
| `extractFaceFeature` | 特征提取 | data, width, height, rect, faceId, extractType, mask |
| `compareFaceFeature` | 特征比对 | featureData1, featureData2, compareModel |
| `registerFaceFeature` | 单张人脸注册 | searchId, featureData, faceTag |
| `registerFaceFeatureBatch` | 批量人脸注册 | faceList |
**数据格式:**
- 图像数据: NV21 格式(`Uint8List`
- 特征数据: SDK 定义长度(`Uint8List`
- 返回值: `Map<String, dynamic>` 格式统一
## Image Format Requirements
**NV21 格式约束:**
- 图像宽度必须是 4 的倍数
- 图像高度必须是 2 的倍数NV21 格式)
- 格式码: 2050 (`FaceEngine.CP_PAF_NV21`)
**Camera Integration (Example):**
- 使用 `camera` 插件获取摄像头图像流
- `ImageFormatGroup.nv21` 设置图像格式
- `CameraPreviewScreen` 处理实时图像流检测
---
*Integration audit: 2026-03-30*