You've already forked FrameTour-BE
feat(face): 添加人脸识别重试功能并优化得分筛选逻辑
- 在FaceSampleController中新增retryFaceRecognition接口用于手动重试失败的人脸识别任务- 集成人脸识别Kafka服务,支持异步处理重试请求- 在FaceServiceImpl中增加从景区配置读取人脸得分阈值的功能 - 根据配置的得分阈值对人脸识别结果进行筛选,过滤低分样本 - 添加详细的日志记录和异常处理机制- 优化线程池使用,确保重试任务能够正确提交和执行
This commit is contained in:
@@ -191,4 +191,53 @@ public class FaceProcessingKafkaService {
|
||||
log.error("更新人脸样本状态失败, faceSampleId: {}", faceSampleId, e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 重试失败的人脸识别
|
||||
* 用于手动重试状态为-1的人脸样本
|
||||
*
|
||||
* @param faceSampleId 人脸样本ID
|
||||
* @return 是否成功提交重试任务
|
||||
*/
|
||||
public boolean retryFaceRecognition(Long faceSampleId) {
|
||||
try {
|
||||
// 查询人脸样本信息
|
||||
FaceSampleEntity faceSample = faceSampleMapper.getEntity(faceSampleId);
|
||||
if (faceSample == null) {
|
||||
log.error("人脸样本不存在, faceSampleId: {}", faceSampleId);
|
||||
return false;
|
||||
}
|
||||
|
||||
// 检查状态是否为失败状态(-1)
|
||||
if (faceSample.getStatus() != -1) {
|
||||
log.warn("人脸样本状态不是失败状态, 无需重试, faceSampleId: {}, status: {}",
|
||||
faceSampleId, faceSample.getStatus());
|
||||
return false;
|
||||
}
|
||||
|
||||
// 构造人脸处理消息
|
||||
FaceProcessingMessage message = FaceProcessingMessage.builder()
|
||||
.faceSampleId(faceSample.getId())
|
||||
.scenicId(faceSample.getScenicId())
|
||||
.deviceId(faceSample.getDeviceId())
|
||||
.faceUrl(faceSample.getFaceUrl())
|
||||
.shotTime(faceSample.getCreateAt())
|
||||
.createTime(new Date())
|
||||
.source("retry-manual")
|
||||
.build();
|
||||
|
||||
// 提交到线程池进行异步处理
|
||||
faceRecognitionExecutor.execute(() -> processFaceRecognitionAsync(message));
|
||||
|
||||
log.info("人脸识别重试任务已提交, faceSampleId: {}, 活跃线程: {}, 队列大小: {}",
|
||||
faceSampleId, faceRecognitionExecutor.getActiveCount(),
|
||||
faceRecognitionExecutor.getQueue().size());
|
||||
|
||||
return true;
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("提交人脸识别重试任务失败, faceSampleId: {}", faceSampleId, e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user