Release DLL-only package v0.1.6
This commit is contained in:
parent
affb537801
commit
e82250b5e7
@ -1,5 +1,14 @@
|
||||
# Changelog
|
||||
|
||||
## 0.1.6
|
||||
|
||||
- Added `FaceModuleManager` singleton lifecycle validation.
|
||||
- Added default `FaceSdkSettings` loading from `Resources/AISU/SI-M1 Face SDK/FaceSdkSettings`.
|
||||
- Added auto verify state, start/stop APIs, auto verify result event dispatch, and exclusive operation conflict handling.
|
||||
- Added auto verify configuration fields to `FaceSdkSettings`.
|
||||
- Limited Editor menu entries to Settings and License.
|
||||
- Updated samples to use explicit auto verify start/stop and exclusive operation preparation.
|
||||
|
||||
## 0.1.5
|
||||
|
||||
- Fixed Unity 2021 compatibility for the obfuscated Runtime and Editor DLLs by removing invalid `System.Private.CoreLib` assembly references introduced during obfuscation.
|
||||
|
||||
Binary file not shown.
8
Resources.meta
Normal file
8
Resources.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 38a8adf823e04ed4ba6e7819d0d6f001
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Resources/AISU.meta
Normal file
8
Resources/AISU.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 38a8adf823e04ed4ba6e7819d0d6f002
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Resources/AISU/SI-M1 Face SDK.meta
Normal file
8
Resources/AISU/SI-M1 Face SDK.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 38a8adf823e04ed4ba6e7819d0d6f003
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
31
Resources/AISU/SI-M1 Face SDK/FaceSdkSettings.asset
Normal file
31
Resources/AISU/SI-M1 Face SDK/FaceSdkSettings.asset
Normal file
@ -0,0 +1,31 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 8f79a6ea36b743d49ac4f2de7f2ea81f, type: 3}
|
||||
m_Name: FaceSdkSettings
|
||||
m_EditorClassIdentifier:
|
||||
m_transportMode: 0
|
||||
m_useMockInEditor: 0
|
||||
m_portName: COM3
|
||||
m_baudRate: 115200
|
||||
m_readBufferSize: 4096
|
||||
m_useEditorSerialDebugParameters: 1
|
||||
m_editorPortName: COM3
|
||||
m_editorBaudRate: 115200
|
||||
m_editorReadBufferSize: 4096
|
||||
m_mockResponseDelayFrames: 1
|
||||
m_autoVerifyOnOpen: 0
|
||||
m_autoVerifyTimeout: 10
|
||||
m_stopAutoVerifyBeforeExclusiveCommand: 1
|
||||
m_exclusiveCommandPolicy: 1
|
||||
m_debugLogEnabled: 1
|
||||
m_rawLogEnabled: 1
|
||||
m_logPrefix: '[FaceModule]'
|
||||
8
Resources/AISU/SI-M1 Face SDK/FaceSdkSettings.asset.meta
Normal file
8
Resources/AISU/SI-M1 Face SDK/FaceSdkSettings.asset.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 38a8adf823e04ed4ba6e7819d0d6f004
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@ -64,6 +64,7 @@ namespace Aisu.SIM1.Face.Samples.FaceDetectionDemo
|
||||
m_manager.OnError += OnManagerError;
|
||||
m_manager.OnReady += OnManagerReady;
|
||||
m_manager.OnFaceStateUpdated += OnFaceStateUpdated;
|
||||
m_manager.OnAutoVerifyResult += OnAutoVerifyResult;
|
||||
}
|
||||
|
||||
if (m_serialDropdown != null)
|
||||
@ -132,6 +133,7 @@ namespace Aisu.SIM1.Face.Samples.FaceDetectionDemo
|
||||
m_manager.OnError -= OnManagerError;
|
||||
m_manager.OnReady -= OnManagerReady;
|
||||
m_manager.OnFaceStateUpdated -= OnFaceStateUpdated;
|
||||
m_manager.OnAutoVerifyResult -= OnAutoVerifyResult;
|
||||
m_manager.Close();
|
||||
}
|
||||
|
||||
@ -350,6 +352,17 @@ namespace Aisu.SIM1.Face.Samples.FaceDetectionDemo
|
||||
SetResult("人脸状态: " + FaceProtocolEncoding.FaceStateMessage(state.State));
|
||||
}
|
||||
|
||||
private void OnAutoVerifyResult(FaceAutoVerifyResult result)
|
||||
{
|
||||
if (result.Success)
|
||||
{
|
||||
SetResult("自动检测成功,UserID=" + result.VerifyResult.UserId + ",姓名=" + result.VerifyResult.UserName);
|
||||
return;
|
||||
}
|
||||
|
||||
SetResult("自动检测结果: " + FaceProtocolEncoding.ResultMessage(result.ResultCode));
|
||||
}
|
||||
|
||||
private void OnManagerError(FaceResultCode _, string message)
|
||||
{
|
||||
LogError("SDK 错误: " + message);
|
||||
@ -383,6 +396,12 @@ namespace Aisu.SIM1.Face.Samples.FaceDetectionDemo
|
||||
|
||||
private async Task EnsureModuleStandbyAsync(string operationName)
|
||||
{
|
||||
if (m_manager.IsAutoVerifyEnabled)
|
||||
{
|
||||
await m_manager.EnsureExclusiveOperationReadyAsync(operationName);
|
||||
return;
|
||||
}
|
||||
|
||||
var status = await m_manager.Basic.GetStatusAsync();
|
||||
if (status == FaceModuleStatus.Busy)
|
||||
{
|
||||
|
||||
@ -361,8 +361,15 @@ namespace Aisu.SIM1.Face.Core
|
||||
{
|
||||
try
|
||||
{
|
||||
var result = await Manager.Verify.AutoVerifyAsync(AutoVerifyEnable, VerifyTimeout);
|
||||
Log("自动验证完成:成功=" + result.Success + ",用户ID=" + result.UserId);
|
||||
if (AutoVerifyEnable)
|
||||
{
|
||||
await Manager.StartAutoVerifyAsync(VerifyTimeout);
|
||||
Log("自动验证已开启,识别结果通过事件回调。");
|
||||
return;
|
||||
}
|
||||
|
||||
await Manager.StopAutoVerifyAsync(VerifyTimeout);
|
||||
Log("自动验证已关闭。");
|
||||
}
|
||||
catch (Exception ex) { LogError("自动验证失败:" + ex.Message); }
|
||||
}
|
||||
|
||||
@ -401,6 +401,7 @@ namespace Aisu.SIM1.Face.UI.Pages
|
||||
base.Init(manager, logPanel, loadingView);
|
||||
m_boundManager = m_manager;
|
||||
m_manager.OnFaceStateUpdated += OnFaceState;
|
||||
m_manager.OnAutoVerifyResult += OnAutoVerifyResult;
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
@ -417,9 +418,14 @@ namespace Aisu.SIM1.Face.UI.Pages
|
||||
RunAsync(async () =>
|
||||
{
|
||||
if (!RequireReady()) return;
|
||||
var result = m_autoToggle.isOn
|
||||
? await m_manager.Verify.AutoVerifyAsync(true, ReadByte(m_timeoutInput, 10))
|
||||
: await m_manager.Verify.VerifyAsync(ReadByte(m_timeoutInput, 10), ReadByte(m_maxTimesInput, 30));
|
||||
if (m_autoToggle.isOn)
|
||||
{
|
||||
await m_manager.StartAutoVerifyAsync(ReadByte(m_timeoutInput, 10));
|
||||
SetResult("自动验证已开启");
|
||||
return;
|
||||
}
|
||||
|
||||
var result = await m_manager.Verify.VerifyAsync(ReadByte(m_timeoutInput, 10), ReadByte(m_maxTimesInput, 30));
|
||||
ShowResult(result);
|
||||
});
|
||||
}
|
||||
@ -430,7 +436,19 @@ namespace Aisu.SIM1.Face.UI.Pages
|
||||
/// </summary>
|
||||
public void StopVerify()
|
||||
{
|
||||
RunAsync(async () => { if (RequireConnected()) { await m_manager.Basic.ResetAsync(); SetResult("已停止验证"); } });
|
||||
RunAsync(async () =>
|
||||
{
|
||||
if (!RequireConnected()) return;
|
||||
if (m_manager.IsAutoVerifyEnabled)
|
||||
{
|
||||
await m_manager.StopAutoVerifyAsync();
|
||||
SetResult("自动验证已关闭");
|
||||
return;
|
||||
}
|
||||
|
||||
await m_manager.Basic.ResetAsync();
|
||||
SetResult("已停止验证");
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -455,11 +473,17 @@ namespace Aisu.SIM1.Face.UI.Pages
|
||||
SetResult(result.Success ? "验证成功" : FaceProtocolEncoding.ResultMessage(result.ResultCode));
|
||||
}
|
||||
|
||||
private void OnAutoVerifyResult(FaceAutoVerifyResult result)
|
||||
{
|
||||
ShowResult(result.VerifyResult);
|
||||
}
|
||||
|
||||
private void UnbindManagerEvents()
|
||||
{
|
||||
if (m_boundManager != null)
|
||||
{
|
||||
m_boundManager.OnFaceStateUpdated -= OnFaceState;
|
||||
m_boundManager.OnAutoVerifyResult -= OnAutoVerifyResult;
|
||||
m_boundManager = null;
|
||||
}
|
||||
}
|
||||
@ -545,6 +569,8 @@ namespace Aisu.SIM1.Face.UI.Pages
|
||||
return;
|
||||
}
|
||||
|
||||
await m_manager.EnsureExclusiveOperationReadyAsync("人脸录入");
|
||||
|
||||
FaceEnrollResult result;
|
||||
if (m_modeDropdown.value == 1)
|
||||
{
|
||||
@ -594,7 +620,7 @@ namespace Aisu.SIM1.Face.UI.Pages
|
||||
/// </summary>
|
||||
public void CancelEnroll()
|
||||
{
|
||||
RunAsync(async () => { if (RequireConnected()) { await m_manager.Basic.FaceResetAsync(); SetResult("已取消录入"); } });
|
||||
RunAsync(async () => { if (RequireConnected()) { await m_manager.EnsureExclusiveOperationReadyAsync("取消录入"); await m_manager.Basic.FaceResetAsync(); SetResult("已取消录入"); } });
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -674,6 +700,7 @@ namespace Aisu.SIM1.Face.UI.Pages
|
||||
RunAsync(async () =>
|
||||
{
|
||||
if (!RequireReady()) return;
|
||||
await m_manager.EnsureExclusiveOperationReadyAsync("查询用户");
|
||||
var info = await m_manager.Users.GetUserInfoAsync(ReadInt(m_userIdInput, 0));
|
||||
m_detailText.text = $"用户详情: ID={info.UserId} Name={info.UserName} Admin={info.IsAdmin}";
|
||||
SetResult("查询成功");
|
||||
@ -688,6 +715,7 @@ namespace Aisu.SIM1.Face.UI.Pages
|
||||
RunAsync(async () =>
|
||||
{
|
||||
if (!RequireReady()) return;
|
||||
await m_manager.EnsureExclusiveOperationReadyAsync("删除用户");
|
||||
await m_manager.Users.DeleteUserAsync(ReadInt(m_userIdInput, 0));
|
||||
SetResult("删除成功");
|
||||
await RefreshIds(false);
|
||||
@ -716,6 +744,7 @@ namespace Aisu.SIM1.Face.UI.Pages
|
||||
RunAsync(async () =>
|
||||
{
|
||||
if (!RequireReady()) return;
|
||||
await m_manager.EnsureExclusiveOperationReadyAsync("删除全部用户");
|
||||
await m_manager.Users.DeleteAllAsync();
|
||||
SetResult("全部用户已删除");
|
||||
await RefreshIds(false);
|
||||
@ -743,6 +772,7 @@ namespace Aisu.SIM1.Face.UI.Pages
|
||||
/// </summary>
|
||||
private async System.Threading.Tasks.Task RefreshIds(bool useV2)
|
||||
{
|
||||
await m_manager.EnsureExclusiveOperationReadyAsync("刷新用户列表");
|
||||
var ids = useV2 ? await m_manager.Users.GetAllUserIds2Async() : await m_manager.Users.GetAllUserIdsAsync();
|
||||
m_listText.text = string.Join("\n", ids.ConvertAll(id => "UserID: " + id));
|
||||
SetResult("用户列表已刷新");
|
||||
@ -791,6 +821,7 @@ namespace Aisu.SIM1.Face.UI.Pages
|
||||
RunAsync(async () =>
|
||||
{
|
||||
if (!RequireReady()) return;
|
||||
await m_manager.EnsureExclusiveOperationReadyAsync("扫码");
|
||||
var qr = await m_manager.QrCode.ScanQrCodeAsync(ReadByte(m_timeoutInput, 10));
|
||||
m_qrText.text = "二维码内容: " + qr;
|
||||
SetResult(string.IsNullOrEmpty(qr) ? "二维码为空" : "扫码成功");
|
||||
@ -802,7 +833,7 @@ namespace Aisu.SIM1.Face.UI.Pages
|
||||
/// </summary>
|
||||
public void AutoScan()
|
||||
{
|
||||
RunAsync(async () => { if (RequireReady()) { await m_manager.Verify.AutoVerifyAsync(true, ReadByte(m_timeoutInput, 10)); SetResult("自动探测已启动"); } });
|
||||
RunAsync(async () => { if (RequireReady()) { await m_manager.StartAutoVerifyAsync(ReadByte(m_timeoutInput, 10)); SetResult("自动探测已启动"); } });
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -810,7 +841,19 @@ namespace Aisu.SIM1.Face.UI.Pages
|
||||
/// </summary>
|
||||
public void Stop()
|
||||
{
|
||||
RunAsync(async () => { if (RequireConnected()) { await m_manager.Basic.ResetAsync(); SetResult("已停止"); } });
|
||||
RunAsync(async () =>
|
||||
{
|
||||
if (!RequireConnected()) return;
|
||||
if (m_manager.IsAutoVerifyEnabled)
|
||||
{
|
||||
await m_manager.StopAutoVerifyAsync();
|
||||
SetResult("自动探测已停止");
|
||||
return;
|
||||
}
|
||||
|
||||
await m_manager.Basic.ResetAsync();
|
||||
SetResult("已停止");
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -883,6 +926,7 @@ namespace Aisu.SIM1.Face.UI.Pages
|
||||
RunAsync(async () =>
|
||||
{
|
||||
if (!RequireReady()) return;
|
||||
await m_manager.EnsureExclusiveOperationReadyAsync("图片抓拍");
|
||||
FaceImageResult result;
|
||||
if (type == "Face") result = await m_manager.Images.SnapUploadFaceImageAsync();
|
||||
else if (type == "Large") result = await m_manager.Images.SnapUploadLargeImageAsync((ImageDpi)m_dpiDropdown.value);
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "xin.aisu.si-m1.face",
|
||||
"displayName": "AISU SI-M1 Face SDK",
|
||||
"version": "0.1.0",
|
||||
"version": "0.1.6",
|
||||
"unity": "2021.3",
|
||||
"description": "Unity UPM package for the AISU SI-M1 face recognition module protocol, transport, command services, lifecycle manager, tests, and demo sample.",
|
||||
"author": {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user