si-m1-face-package/Documentation~/SDK_API_Reference.md

19 KiB
Raw Blame History

SI-M1 Face SDK 接口文档

本文列出 SDK 对业务层推荐使用的公开 API。命名空间统一为 Aisu.SIM1.Face.*。

1. 命名空间

命名空间 说明
Aisu.SIM1.Face.Core Manager、配置、回调适配、日志、主线程调度
Aisu.SIM1.Face.Commands 业务服务、命令服务、加密接口
Aisu.SIM1.Face.Protocol 协议枚举、封包、拆包、编码工具
Aisu.SIM1.Face.Transport 通信接口、串口、Mock
Aisu.SIM1.Face.Models Reply、Note、用户、验证、录入、图片、UVC 等模型

2. FaceModuleManager

FaceModuleManager 是 SDK 推荐的统一入口。

using Aisu.SIM1.Face.Core;

属性

属性 类型 说明
Basic FaceBasicService 基础命令服务
Verify FaceVerifyService 人脸验证服务
Enrollment FaceEnrollmentService 人脸录入服务
Users FaceUserService 用户管理服务
QrCode FaceQrCodeService 二维码服务
Images FaceImageService 图片抓拍与照片注册服务
Features FaceFeatureService 特征读写服务
Uvc FaceUvcService UVC 和高级参数服务
Encryption FaceEncryptionService 加密相关服务
Callback FaceModuleCallbackAdapter 回调式 API 适配
IsOpen bool 通信是否打开
IsReady bool 是否收到 READY
CurrentStatus FaceModuleStatus 当前模组状态
LastError string 最近错误文本
CurrentCommand string 当前命令名
Config FaceModuleConfig 当前运行配置
Settings FaceSdkSettings 当前绑定配置资产

方法

方法 说明
ConfigureTransport(IFaceModuleTransport transport) 注入自定义通信层
Configure(bool useMockInEditor, string portName, int baudRate) 兼容旧代码的快速配置入口
ApplySettings(FaceSdkSettings sdkSettings) 应用 ScriptableObject 配置并重建 transport
Open() 打开通信
Close() 同步安全关闭硬件流程并关闭串口
CloseAsync() 异步安全关闭硬件流程并关闭串口
StopFaceOperationAsync() 停止当前人脸流程,优先关闭自动验证
StartAutoVerifyAsync(byte timeout) 开启自动验证,返回开关命令结果
StopAutoVerifyAsync(byte timeout = 1) 关闭自动验证,返回开关命令结果
WaitReadyAsync(int timeoutMs = 5000) 等待 READY NOTE
ProbeReadyByStatusAsync() 主动查询状态并标记 READY
SendRawBytes(byte[] bytes) 发送原始协议 bytes
RefreshStatus() 异步刷新 CurrentStatus

真实串口运行前会自动校验 SDK 授权。授权文件默认路径:

Assets/StreamingAssets/si-m1_face.dat

事件

事件 说明
OnReady 首次 READY
OnStatusChanged(FaceModuleStatus) 当前状态变化
OnReplyReceived(FaceReply) 收到 REPLY 包
OnNoteReceived(FaceNote) 收到 NOTE 包
OnFaceStateUpdated(FaceFaceStateNote) 收到人脸状态 NOTE
OnAutoVerifyResult(FaceAutoVerifyResult) 收到自动验证识别结果 NOTE
OnQrCodeReceived(string) 收到二维码 NOTE
OnFeatureReceived(byte[]) 收到读取特征数据包
OnDataPacketReceived(FacePacket) 收到 ImageOrTemplate 数据包
OnError(FaceResultCode, string) 错误上报
OnRawLog(string) 原始 TX / RX 日志

3. 基础服务 FaceBasicService

访问路径:

manager.Basic
方法 返回 说明
ResetAsync() Task<FaceReply> 复位模组
FaceResetAsync() Task<FaceReply> 取消当前人脸流程
GetStatusAsync() Task<FaceModuleStatus> 获取模组状态
GetVersionAsync() Task<string> 获取固件版本
GetSnAsync() Task<string> 获取设备序列号
SetDemoModeAsync(bool enable) Task<FaceReply> 设置 Demo Mode
UpgradeFirmwareAsync() Task<FaceReply> 启动固件升级命令

4. 验证服务 FaceVerifyService

访问路径:

manager.Verify
方法 返回 说明
VerifyAsync(byte timeout, byte maxRecognitionTimes = 30) Task<FaceVerifyResult> 单次人脸验证
AutoVerifyAsync(bool enable, byte timeout) Task<FaceReply> 底层自动验证开关命令,只表示开关命令 ACK

推荐业务层使用 FaceModuleManager.StartAutoVerifyAsync() 和 FaceModuleManager.StopAutoVerifyAsync() 控制自动验证,识别结果通过 OnAutoVerifyResult 获取。

var control = await manager.StartAutoVerifyAsync(10);
if (control.Success)
{
    manager.OnAutoVerifyResult += result =>
    {
        Debug.Log("自动验证结果: " + result.ResultCode);
    };
}

StartAutoVerifyAsync() / StopAutoVerifyAsync() 的返回值是 FaceAutoVerifyControlResult,表示开启或关闭命令是否成功,不表示识别结果。

5. 录入服务 FaceEnrollmentService

访问路径:

manager.Enrollment
方法 返回 说明
EnrollAsync(bool admin, string userName, FaceDirection direction, byte timeout) Task<FaceEnrollResult> 交互式多方向录入
EnrollSingleAsync(bool admin, string userName, byte timeout) Task<FaceEnrollResult> 单帧录入
EnrollIntegratedAsync(bool admin, string userName, FaceDirection direction, byte timeout, bool singleFrame = false, bool duplicateCheck = true) Task<FaceEnrollResult> 集成式录入
EnrollSnapFaceImageAsync(bool admin, string userName) Task<FaceEnrollResult> 抓拍人脸后注册

6. 用户服务 FaceUserService

访问路径:

manager.Users
方法 返回 说明
DeleteUserAsync(int userId) Task<FaceReply> 删除指定用户
DeleteAllAsync() Task<FaceReply> 删除全部用户
GetUserInfoAsync(int userId) Task<FaceUserInfo> 查询用户信息
GetAllUserIdsAsync() Task<List<int>> 查询用户 ID 列表
GetAllUserIds2Async() Task<List<int>> 使用扩展命令查询用户 ID 列表
GetAllUserInfosAsync() Task<List<FaceUserInfo>> 查询全部用户详情
GetAllUserInfos2Async() Task<List<FaceUserInfo>> 使用扩展命令查询全部用户详情

7. 二维码服务 FaceQrCodeService

访问路径:

manager.QrCode
方法 返回 说明
ScanQrCodeAsync(byte timeout) Task<string> 扫描二维码并返回内容

8. 图片服务 FaceImageService

访问路径:

manager.Images
方法 返回 说明
SnapUploadImageAsync() Task<FaceImageResult> 抓拍普通图片
SnapUploadFaceImageAsync() Task<FaceImageResult> 抓拍人脸图片
SnapUploadLargeImageAsync(ImageDpi dpi) Task<FaceImageResult> 抓拍大图
EnrollWithPhotoAsync(byte[] photoBytes, BioType type, string userName = null, bool duplicateCheck = true, Action<int, int> onProgress = null) Task<FaceEnrollResult> 照片注册
EnrollWithPhotoAndIdAsync(int userId, byte[] photoBytes, BioType type, string userName = null, bool duplicateCheck = true, Action<int, int> onProgress = null) Task<FaceEnrollResult> 指定用户 ID 照片注册

9. 特征服务 FaceFeatureService

访问路径:

manager.Features
方法 返回 说明
ReadFeatureAsync(int userId, FeatureType type) Task<byte[]> 读取指定用户特征
WriteFeatureAsync(byte[] featureBytes, FeatureType type, string userName = null, Action<int, int> onProgress = null) Task<FaceEnrollResult> 写入特征并注册

10. UVC 和高级参数 FaceUvcService

访问路径:

manager.Uvc
方法 返回 说明
ReadUsbUvcParametersAsync() Task<UsbUvcParameters> 读取 USB / UVC 参数
SetUsbUvcParametersAsync(UsbUvcParameters parameters) Task<FaceReply> 设置 USB / UVC 参数
SetFaceLocationDisplayAsync(bool visible) Task<FaceReply> 设置人脸框显示
SetRgbLevelAsync(byte level) Task<FaceReply> 设置 RGB 阈值
SetDuplicateCheckAsync(bool enableCheck) Task<FaceReply> 设置查重
ReadDuplicateCheckAsync() Task<bool> 读取查重状态

11. 加密服务 FaceEncryptionService

访问路径:

manager.Encryption
方法 返回 说明
SetReleaseEncryptionKeyAsync(byte[] key16) Task<FaceReply> 设置 Release 加密密钥
SetDebugEncryptionKeyAsync(byte[] key16) Task<FaceReply> 设置 Debug 加密密钥
InitEncryptionAsync(byte[] seed4, byte mode) Task<FaceReply> 初始化加密流程
EnableEncryption(IFaceModuleCrypto crypto) void 设置本地加密算法适配器
DisableEncryption() void 关闭本地加密算法适配器

IFaceModuleCrypto:

public interface IFaceModuleCrypto
{
    byte[] Encrypt(byte[] plainBytes);
    byte[] Decrypt(byte[] encryptedBytes);
    byte[] GenerateSessionKey(byte[] seed4, byte[] encKey16);
}

12. 回调式 API

FaceModuleManager.Callback 适合 Unity Button、旧项目回调风格或不方便使用 await 的业务。

manager.Callback.Verify(
    timeout: 10,
    success: result => Debug.Log(result.UserId),
    error: message => Debug.LogError(message));

回调特点:

  • 所有 API 统一使用 success 和 error。
  • 照片注册、特征写入支持 progress(current, total)。
  • 回调会通过 FaceModuleMainThreadDispatcher 回到 Unity 主线程。

13. 主要模型

类型 说明
FaceReply REPLY 包解析结果
FaceNote NOTE 包解析结果
FaceFaceStateNote 人脸状态 NOTE
FaceUserInfo 用户 ID、姓名、管理员标记
FaceVerifyResult 验证结果、用户信息、开锁状态
FaceAutoVerifyResult 自动验证识别结果
FaceAutoVerifyControlResult 自动验证开启/关闭命令结果
FaceEnrollResult 录入结果、用户 ID、方向
FaceImageResult 图片 bytes、Texture2D、用户 ID
UsbUvcParameters USB / UVC 参数
FaceCommandException 底层命令 REPLY 非成功时抛出的异常

高层业务 Result 类型统一使用 Success 和 ResultCode。FaceReply 是底层 REPLY 模型,也统一只暴露 Success 和 ResultCode。

13.1 常用模型字段

类型 字段 说明
FaceReply Mid 对应的命令 ID
FaceReply Success ResultCode == FaceResultCode.Success
FaceReply ResultCode 模组返回结果码
FaceReply Data REPLY 业务数据,不包含命令 ID 和结果码
FaceNote Nid NOTE 类型
FaceNote Data NOTE 业务数据,不包含 NOTE ID
FaceFaceStateNote State 人脸状态码
FaceFaceStateNote Left / Top / Right / Bottom 人脸框坐标
FaceFaceStateNote Yaw / Pitch / Roll 人脸姿态角
FaceUserInfo UserId 用户 ID
FaceUserInfo UserName 用户名
FaceUserInfo IsAdmin 是否管理员
FaceVerifyResult Success / ResultCode 验证是否成功及结果码
FaceVerifyResult UserId / UserName / IsAdmin 验证成功时的用户信息
FaceVerifyResult UnlockStatus 模组返回的开锁状态
FaceAutoVerifyResult Success / ResultCode 自动验证 NOTE 的识别结果
FaceAutoVerifyResult VerifyResult 成功时解析出的验证结果详情
FaceAutoVerifyControlResult Success / ResultCode 自动验证开关命令结果
FaceAutoVerifyControlResult Enabled 本次命令目标状态
FaceAutoVerifyControlResult Reply 底层开关命令 REPLY
FaceEnrollResult Success / ResultCode 录入是否成功及结果码
FaceEnrollResult UserId 录入成功后分配或写入的用户 ID
FaceEnrollResult Direction 录入方向
FaceImageResult Success / ResultCode 图片命令是否成功及结果码
FaceImageResult UserId 照片注册相关用户 ID
FaceImageResult Bytes 图片原始 bytes
FaceImageResult Texture Unity Texture2D
UsbUvcParameters UsbType USB 输出类型
UsbUvcParameters BitrateMbps 码率,单位 Mbps
UsbUvcParameters MjpgQuality MJPG 质量
UsbUvcParameters Mirror 是否镜像
UsbUvcParameters Rotate180 是否旋转 180 度

13.2 FaceResultCode 结果码

FaceResultCode 会出现在 FaceReply.ResultCode、高层业务 Result、OnError、FaceCommandException.ResultCode 中。可使用 FaceProtocolEncoding.ResultMessage(code) 获取中文提示。

值 名称 说明
0 Success 成功
1 Rejected 模组拒绝命令
2 Aborted 操作已终止
4 CameraOpenFailed 相机打开失败
5 UnknownReason 未知错误
6 InvalidParam 参数无效
7 NoMemory 内存不足
8 UnknownUser 未找到用户或没有已录入用户
9 MaxUser 超过最大用户数量
10 FaceEnrolled 人脸已录入
12 LivenessCheckFailed 活体检测失败
13 Timeout 操作超时
14 AuthorizationFailed 模组侧授权失败
19 ReadFileFailed 读文件失败
20 WriteFileFailed 写文件失败
21 NoEncrypt 通信未加密
23 NoRgbImage RGB 图像未就绪
24 JpgPhotoTooLarge JPG 照片过大
25 JpgPhotoTooSmall JPG 照片过小
26 DetectQr 识别过程中检测到二维码

13.3 FaceStateCode 人脸状态码

FaceStateCode 来自 OnFaceStateUpdated(FaceFaceStateNote),主要用于录入、检测和 UI 引导。可使用 FaceProtocolEncoding.FaceStateMessage(code) 获取中文提示。

值 名称 说明
0 Normal 人脸正常
1 NoFace 未检测到人脸
2 TooUp 人脸太靠上
3 TooDown 人脸太靠下
4 TooLeft 人脸太靠左
5 TooRight 人脸太靠右
6 Far 距离太远
7 Close 距离太近
8 EyebrowOcclusion 眉毛遮挡
9 EyeOcclusion 眼睛遮挡
10 FaceOcclusion 脸部遮挡
11 DirectionError 录入方向错误
12 EyeCloseStatusOpenEye 闭眼检测中发现睁眼
13 EyeCloseStatus 当前为闭眼状态
14 EyeCloseUnknownStatus 无法判定睁闭眼状态
128 PalmDetected 检测到手掌信息

13.4 业务常用枚举

枚举 值 说明
FaceModuleStatus Standby = 0 模组待机
FaceModuleStatus Busy = 1 模组忙碌
FaceModuleStatus Error = 2 模组错误
FaceModuleStatus Invalid = 3 SDK 未知或无效状态
FaceDirection Undefined = 0x00 未定义方向
FaceDirection Middle = 0x01 正脸
FaceDirection Right = 0x02 向右
FaceDirection Left = 0x04 向左
FaceDirection Down = 0x08 向下
FaceDirection Up = 0x10 向上
BioType NormalPhoto = 0 普通照片
BioType EncryptedPhoto = 1 加密照片
BioType NormalFeature = 2 普通特征
BioType CompressedFeature = 3 压缩特征
FeatureType ColorFace = 1 彩色人脸特征
FeatureType ColorAndIrFace = 2 彩色加红外人脸特征
FeatureType Palm = 3 手掌特征
ImageDpi Dpi480x640 = 0 480x640 大图
ImageDpi Dpi600x800 = 1 600x800 大图
ImageDpi Dpi1200x1600 = 2 1200x1600 大图

13.5 配置枚举

枚举 值 说明
FaceTransportMode Auto = 0 默认通信模式,当前串口实现下等价于串口,Editor 可按 Mock 配置切换
FaceTransportMode SerialPort = 1 强制使用串口通信
FaceTransportMode Mock = 3 使用 Mock 模组
FaceExclusiveCommandPolicy RejectWhenAutoVerifyEnabled = 0 自动验证开启时拒绝独占命令
FaceExclusiveCommandPolicy StopAutoVerify = 1 独占命令前自动关闭自动验证
FaceExclusiveCommandPolicy Ignore = 2 不处理自动验证状态,由业务自行保证不冲突

14. 协议和通信底层

业务层通常不需要直接使用底层 API。需要协议调试或自定义通信时可使用:

类型 说明
FacePacketBuilder 封包
FacePacketParser 拆包
FaceProtocolEncoding 用户名、ID、结果文本等编码工具
IFaceModuleTransport 通信接口
SerialPortTransport 串口实现
MockFaceModuleTransport Mock 实现

15. 授权 API

命名空间:

using Aisu.SIM1.Face.Core;
类型 说明
FaceLicenseManager 加载、验证授权 token,查询授权状态
FaceLicensePayload 授权 payload 数据
FaceLicenseStatus 授权状态枚举
FaceLicenseException 授权异常
FaceLicenseFeatures 功能授权常量
FaceUnityRuntimeBinding 读取 identifier、companyName、productName、version、unityVersion

常用方法:

方法 说明
FaceLicenseManager.LoadAndVerify() 读取默认授权文件并验签
FaceLicenseManager.VerifyOrThrow() 授权无效时抛出异常
FaceLicenseManager.VerifyFeatureOrThrow(string feature) 功能未授权时抛出异常
FaceLicenseManager.IsFeatureEnabled(string feature) 查询功能是否授权
FaceLicenseVerifier.VerifyToken(string token) 验签并校验授权 payload
FaceLicenseVerifier.ValidatePayload(FaceLicensePayload payload) 校验 payload 字段、有效期、功能和 Unity 绑定
FaceLicenseVerifier.GetBeijingNow() 获取 SDK 授权使用的当前北京时间
FaceLicenseVerifier.FormatBeijingTime(DateTimeOffset value) 格式化授权北京时间字符串
FaceLicenseVerifier.GetRemainingDays(FaceLicensePayload payload) 计算授权剩余天数

15.1 FaceLicenseStatus

值 名称 说明
0 Unknown 尚未验证或状态未知
1 Valid 授权有效
2 MissingFile 授权文件不存在
3 InvalidFormat 授权格式无效
4 InvalidSignature 授权签名无效
5 ProductMismatch 产品 ID 不匹配
6 BindingMismatch Unity 绑定参数不匹配
7 Expired 授权已过期
8 FeatureDenied 功能未授权
9 PublicKeyInvalid SDK 公钥无效
10 ReadFailed 授权读取失败
11 NotYetValid 授权尚未生效

15.2 FaceLicenseFeatures

名称 说明
SerialRuntime 串口运行时
Basic 基础命令
Verify 人脸验证和自动验证
Enroll 人脸录入
UserManage 用户管理
QrCode 二维码
Image 图片抓拍、照片注册
Feature 特征读写
Uvc UVC 和高级参数
Encryption 加密通信
Firmware 固件升级

Runtime 不提供 token 签发 API,也不提供公钥覆盖 API。授权签发只应存在于内部 Editor DLL 或独立授权工具中。