fix(example): 修复注册后不显示已注册状态的问题

问题:注册按钮只更新了显示列表,没有将特征标识和ID存入映射表
修复:
- 添加 _currentFaceKeys 保存当前帧的人脸特征标识
- 注册时将特征标识和生成的ID存入 _faceIdMap
- 下次检测时可以从映射表中找到已注册的ID

Quick task: 260330-ll6
This commit is contained in:
2026-03-30 15:35:42 +08:00
parent cbfeabd57a
commit 1c4f01904e
3 changed files with 52 additions and 6 deletions

View File

@@ -333,6 +333,8 @@ class _CameraPreviewScreenState extends State<CameraPreviewScreen> {
final Map<String, String> _faceIdMap = {};
/// 当前帧检测到的人脸ID列表
List<String> _currentFaceIds = [];
/// 当前帧检测到的人脸特征标识列表(用于注册时关联)
List<String> _currentFaceKeys = [];
/// 随机数生成器
final Random _random = Random();
@@ -459,10 +461,12 @@ class _CameraPreviewScreenState extends State<CameraPreviewScreen> {
_lastDetectionTime = timeStr;
_rgbLivenessResult = rgbLiveness;
_rgbLivenessStatus = rgbIsAlive ? '真人' : (rgbLiveness == 0 ? '非真人' : '未知');
// 更新当前人脸ID列表
_currentFaceIds = faceList.map((face) {
final faceKey = _getFaceKey(face as Map);
return _faceIdMap[faceKey] ?? '未注册';
// 更新当前人脸特征标识和ID列表
_currentFaceKeys = faceList.map((face) {
return _getFaceKey(face as Map);
}).toList();
_currentFaceIds = _currentFaceKeys.map((key) {
return _faceIdMap[key] ?? '未注册';
}).toList();
});
}
@@ -476,6 +480,7 @@ class _CameraPreviewScreenState extends State<CameraPreviewScreen> {
_rgbLivenessResult = -1;
_rgbLivenessStatus = '未检测';
_currentFaceIds = [];
_currentFaceKeys = [];
});
}
}
@@ -713,11 +718,15 @@ class _CameraPreviewScreenState extends State<CameraPreviewScreen> {
width: double.infinity,
child: ElevatedButton.icon(
onPressed: () {
// 为未注册的人脸生成随机ID
// 为未注册的人脸生成随机ID,并存入映射表
setState(() {
for (int i = 0; i < _faceCount; i++) {
if (_currentFaceIds[i] == '未注册') {
_currentFaceIds[i] = _generateRandomFaceId();
final newId = _generateRandomFaceId();
final faceKey = _currentFaceKeys[i];
// 将特征标识和ID存入映射表
_faceIdMap[faceKey] = newId;
_currentFaceIds[i] = newId;
}
}
});