You've already forked FrameTour-BE
feat(task):优化人脸识别任务中的样本排序逻辑
- 引入HashMap以支持按ID顺序排序人脸样本列表 - 在筛选前对搜索结果按分数降序排序 - 简化设备照片限制逻辑,去除冗余的时间排序步骤 - 提升匹配准确性和处理效率
This commit is contained in:
@@ -49,6 +49,7 @@ import java.util.ArrayList;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
@@ -251,11 +252,18 @@ public class TaskFaceServiceImpl implements TaskFaceService {
|
|||||||
.anyMatch(record -> record.getScore() > _lowThreshold);
|
.anyMatch(record -> record.getScore() > _lowThreshold);
|
||||||
respVo.setLowThreshold(isLowThreshold);
|
respVo.setLowThreshold(isLowThreshold);
|
||||||
allFaceSampleIds = records.stream()
|
allFaceSampleIds = records.stream()
|
||||||
|
.sorted(Comparator.comparing(SearchFaceResultItem::getScore).reversed())
|
||||||
.map(SearchFaceResultItem::getExtData)
|
.map(SearchFaceResultItem::getExtData)
|
||||||
.filter(StringUtils::isNumeric)
|
.filter(StringUtils::isNumeric)
|
||||||
.map(Long::valueOf)
|
.map(Long::valueOf)
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
List<FaceSampleEntity> allFaceSampleList = faceSampleMapper.listByIds(allFaceSampleIds);
|
List<FaceSampleEntity> allFaceSampleList = faceSampleMapper.listByIds(allFaceSampleIds);
|
||||||
|
// 按照allFaceSampleIds的顺序对allFaceSampleList进行排序
|
||||||
|
Map<Long, Integer> idIndexMap = new HashMap<>();
|
||||||
|
for (int i = 0; i < allFaceSampleIds.size(); i++) {
|
||||||
|
idIndexMap.put(allFaceSampleIds.get(i), i);
|
||||||
|
}
|
||||||
|
allFaceSampleList.sort(Comparator.comparing(sample -> idIndexMap.get(sample.getId())));
|
||||||
acceptFaceSampleIds = applySampleFilters(acceptFaceSampleIds, allFaceSampleList, scenicConfig);
|
acceptFaceSampleIds = applySampleFilters(acceptFaceSampleIds, allFaceSampleList, scenicConfig);
|
||||||
List<MatchLocalRecord> collect = new ArrayList<>();
|
List<MatchLocalRecord> collect = new ArrayList<>();
|
||||||
for (SearchFaceResultItem item : records) {
|
for (SearchFaceResultItem item : records) {
|
||||||
@@ -515,9 +523,8 @@ public class TaskFaceServiceImpl implements TaskFaceService {
|
|||||||
log.debug("设备照片限制:设备ID={}, 无限制,保留{}张照片",
|
log.debug("设备照片限制:设备ID={}, 无限制,保留{}张照片",
|
||||||
deviceId, deviceSampleIds.size());
|
deviceId, deviceSampleIds.size());
|
||||||
} else {
|
} else {
|
||||||
// 按创建时间倒序排序,取前N张
|
// 取前N张
|
||||||
List<FaceSampleEntity> limitedSamples = deviceSamples.stream()
|
List<FaceSampleEntity> limitedSamples = deviceSamples.stream()
|
||||||
.sorted(Comparator.comparing(FaceSampleEntity::getCreateAt).reversed())
|
|
||||||
.limit(limitPhoto)
|
.limit(limitPhoto)
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user