feat:同步人脸优化

This commit is contained in:
dzc committed 2026-09-30 14:24:20 +08:00
1 parent 3f99e73c44
commit 6f0e3ea37e
8 files changed
+552 -47

No files matched your search

@@ -181,7 +181,7 @@ public class FaceServer {
int searchId = faceEntity.getFaceId();
FaceEntity oldEntity = copyFaceEntity(faceRegisterInfoMap.get(searchId));
try {
FaceFeatureInfo oldFeature = getFaceFeature(searchId);
FaceFeatureInfo oldFeature = oldEntity == null ? getFaceFeatureQuiet(searchId) : null;
if (oldEntity == null && oldFeature != null) {
oldEntity = new FaceEntity(searchId, oldFeature.getFeatureData());
}
@@ -268,6 +268,22 @@ public class FaceServer {
return faceFeatureInfo;
}
/**
* 探测内存库特征但不记录异常日志。
*
* <p>标识不存在是增量路径的常见前置状态(新样本 upsert 探测旧特征、孤儿
* 重复删除的存在性检查),IllegalArgumentException 属预期分支;批量同步
* 数千张全新样本时会逐条抛错刷屏,这里静默返回空。</p>
*/
private FaceFeatureInfo getFaceFeatureQuiet(int searchId) {
if (faceEngine == null) return null;
try {
return faceEngine.getFaceFeature(searchId);
} catch (IllegalArgumentException e) {
return null;
}
}
// 获取人脸数量
public synchronized int getTotalFaceCount() {
if (faceEngine == null) return -99;
@@ -278,7 +294,7 @@ public class FaceServer {
public synchronized int removeFace(int searchId) {
if (faceEngine == null) return -99;
// MQ 和每日快照都可能重复删除同一样本;内存库已不存在时直接按幂等成功处理。
if (searchId != -1 && getFaceFeature(searchId) == null) {
if (searchId != -1 && getFaceFeatureQuiet(searchId) == null) {
faceRegisterInfoMap.remove(searchId);
return ErrorInfo.MOK;
}