fix: 修复特征提取失败(错误码81929)
问题: extractFaceFeature 返回错误码 81929 (MERR_FSDK_FACEFEATURE_FACEDATA) 根本原因: detectFaces 返回的人脸信息缺少 faceData 字段, 而虹软 SDK 的 extractFaceFeature 必须要有这个字段才能提取特征 修复: - FaceEngineManager.convertFaceInfoToList: 添加返回 faceData - ArcPlugin.handleExtractFaceFeature: 接收并传递 faceData 参数 - Dart API: extractFaceFeature 添加 faceData 参数 - example: 传递 faceData 到特征提取调用 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -525,6 +525,13 @@ class _FaceRecognitionScreenState extends State<FaceRecognitionScreen> {
|
||||
return;
|
||||
}
|
||||
|
||||
// 检查 faceData 是否存在
|
||||
final faceData = _currentFaceInfo!['faceData'] as Uint8List?;
|
||||
if (faceData == null) {
|
||||
_showMessage('人脸数据缺失,请重新检测');
|
||||
return;
|
||||
}
|
||||
|
||||
setState(() {
|
||||
_statusMessage = '正在提取特征...';
|
||||
});
|
||||
@@ -539,8 +546,9 @@ class _FaceRecognitionScreenState extends State<FaceRecognitionScreen> {
|
||||
rectTop: _currentFaceInfo!['rectTop'] as int,
|
||||
rectRight: _currentFaceInfo!['rectRight'] as int,
|
||||
rectBottom: _currentFaceInfo!['rectBottom'] as int,
|
||||
faceOrientation: _currentFaceInfo!['orient'] as int? ?? 0,
|
||||
faceOrientation: _currentFaceInfo!['faceOrientation'] as int? ?? 0,
|
||||
faceId: _currentFaceInfo!['faceId'] as int? ?? -1,
|
||||
faceData: faceData, // 关键:传递 faceData,这是虹软 SDK 特征提取必需的数据
|
||||
extractType: 0, // REGISTER 模式
|
||||
mask: 0,
|
||||
);
|
||||
@@ -557,9 +565,11 @@ class _FaceRecognitionScreenState extends State<FaceRecognitionScreen> {
|
||||
});
|
||||
_showMessage('人脸注册成功!');
|
||||
} else {
|
||||
final errorCode = result?['errorCode'] ?? -1;
|
||||
final errorMsg = result?['message'] ?? '未知错误';
|
||||
debugPrint('特征提取失败: errorCode=$errorCode, message=$errorMsg');
|
||||
setState(() {
|
||||
_statusMessage = '特征提取失败: $errorMsg';
|
||||
_statusMessage = '特征提取失败: [$errorCode] $errorMsg';
|
||||
});
|
||||
}
|
||||
} catch (e) {
|
||||
@@ -581,6 +591,13 @@ class _FaceRecognitionScreenState extends State<FaceRecognitionScreen> {
|
||||
return;
|
||||
}
|
||||
|
||||
// 检查 faceData 是否存在
|
||||
final faceData = _currentFaceInfo!['faceData'] as Uint8List?;
|
||||
if (faceData == null) {
|
||||
_showMessage('人脸数据缺失,请重新检测');
|
||||
return;
|
||||
}
|
||||
|
||||
// 读取存储的特征
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
final storedFeatureBase64 = prefs.getString(_storedFeatureKey);
|
||||
@@ -604,8 +621,9 @@ class _FaceRecognitionScreenState extends State<FaceRecognitionScreen> {
|
||||
rectTop: _currentFaceInfo!['rectTop'] as int,
|
||||
rectRight: _currentFaceInfo!['rectRight'] as int,
|
||||
rectBottom: _currentFaceInfo!['rectBottom'] as int,
|
||||
faceOrientation: _currentFaceInfo!['orient'] as int? ?? 0,
|
||||
faceOrientation: _currentFaceInfo!['faceOrientation'] as int? ?? 0,
|
||||
faceId: _currentFaceInfo!['faceId'] as int? ?? -1,
|
||||
faceData: faceData, // 关键:传递 faceData,这是虹软 SDK 特征提取必需的数据
|
||||
extractType: 1, // RECOGNIZE 模式
|
||||
mask: 0,
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user