加个字段

This commit is contained in:
Jerry Yan 2025-03-01 16:37:05 +08:00
parent eea1dd15b7
commit 519f9969ec
4 changed files with 57 additions and 17 deletions

View File

@ -69,4 +69,5 @@ public class ScenicConfigEntity {
private StorageType storeType; private StorageType storeType;
private String storeConfigJson; private String storeConfigJson;
private BigDecimal brokerDirectRate; private BigDecimal brokerDirectRate;
private Integer faceDetectHelperThreshold;
} }

View File

@ -16,10 +16,12 @@ import com.ycwl.basic.model.pc.face.entity.FaceEntity;
import com.ycwl.basic.model.pc.face.req.FaceReqQuery; import com.ycwl.basic.model.pc.face.req.FaceReqQuery;
import com.ycwl.basic.model.pc.face.resp.FaceRespVO; import com.ycwl.basic.model.pc.face.resp.FaceRespVO;
import com.ycwl.basic.model.pc.faceSample.entity.FaceSampleEntity; import com.ycwl.basic.model.pc.faceSample.entity.FaceSampleEntity;
import com.ycwl.basic.model.pc.scenic.entity.ScenicConfigEntity;
import com.ycwl.basic.model.pc.source.entity.MemberSourceEntity; import com.ycwl.basic.model.pc.source.entity.MemberSourceEntity;
import com.ycwl.basic.model.pc.source.entity.SourceEntity; import com.ycwl.basic.model.pc.source.entity.SourceEntity;
import com.ycwl.basic.model.task.resp.SearchFaceRespVo; import com.ycwl.basic.model.task.resp.SearchFaceRespVo;
import com.ycwl.basic.repository.FaceRepository; import com.ycwl.basic.repository.FaceRepository;
import com.ycwl.basic.repository.ScenicRepository;
import com.ycwl.basic.service.pc.FaceService; import com.ycwl.basic.service.pc.FaceService;
import com.ycwl.basic.service.task.TaskFaceService; import com.ycwl.basic.service.task.TaskFaceService;
import com.ycwl.basic.service.task.TaskService; import com.ycwl.basic.service.task.TaskService;
@ -67,6 +69,8 @@ public class FaceServiceImpl implements FaceService {
private FaceRepository faceRepository; private FaceRepository faceRepository;
@Autowired @Autowired
private VideoMapper videoMapper; private VideoMapper videoMapper;
@Autowired
private ScenicRepository scenicRepository;
@Override @Override
public ApiResponse<PageInfo<FaceRespVO>> pageQuery(FaceReqQuery faceReqQuery) { public ApiResponse<PageInfo<FaceRespVO>> pageQuery(FaceReqQuery faceReqQuery) {
@ -207,26 +211,29 @@ public class FaceServiceImpl implements FaceService {
return null; return null;
} }
SearchFaceRespVo scenicDbSearchResult = faceService.searchFace(face.getScenicId(), face.getFaceUrl()); SearchFaceRespVo scenicDbSearchResult = faceService.searchFace(face.getScenicId(), face.getFaceUrl());
// 写死逻辑 ScenicConfigEntity scenicConfig = scenicRepository.getScenicConfig(face.getScenicId());
if (scenicDbSearchResult.getSampleListIds() != null && scenicDbSearchResult.getFirstMatchRate() != null && !scenicDbSearchResult.getSampleListIds().isEmpty()) { if (scenicDbSearchResult.getSampleListIds() != null && scenicDbSearchResult.getFirstMatchRate() != null && !scenicDbSearchResult.getSampleListIds().isEmpty()) {
if (scenicDbSearchResult.getSampleListIds().size() < 5) { if (scenicConfig != null && scenicConfig.getFaceDetectHelperThreshold() != null && scenicConfig.getFaceDetectHelperThreshold() > 0) {
// 补救逻辑 if (scenicDbSearchResult.getSampleListIds().size() < scenicConfig.getFaceDetectHelperThreshold()) {
Long faceSampleId = scenicDbSearchResult.getSampleListIds().get(0); // 补救逻辑
FaceSampleEntity faceSample = faceRepository.getFaceSample(faceSampleId); Long faceSampleId = scenicDbSearchResult.getSampleListIds().get(0);
if (faceSample != null) { FaceSampleEntity faceSample = faceRepository.getFaceSample(faceSampleId);
// 以这个结果为人脸库的匹配结果 if (faceSample != null) {
scenicDbSearchResult = faceService.searchFace(face.getScenicId().toString(), faceSample.getFaceUrl(), "补救措施1人脸数太少少于5"); // 以这个结果为人脸库的匹配结果
} scenicDbSearchResult = faceService.searchFace(face.getScenicId().toString(), faceSample.getFaceUrl(), "补救措施1人脸数太少少于设定值"+scenicConfig.getFaceDetectHelperThreshold());
} else if (scenicDbSearchResult.getFirstMatchRate() > 0.7) { }
// 如果匹配度高于阈值则使用景区第一张人脸去匹配景区库
// 找第一张人脸
Long faceSampleId = scenicDbSearchResult.getSampleListIds().get(0);
FaceSampleEntity faceSample = faceRepository.getFaceSample(faceSampleId);
if (faceSample != null) {
// 以这个结果为人脸库的匹配结果
scenicDbSearchResult = faceService.searchFace(face.getScenicId().toString(), faceSample.getFaceUrl(), "补救措施2存在得分够高");
} }
} }
// if (scenicDbSearchResult.getFirstMatchRate() > 0.7) {
// // 如果匹配度高于阈值则使用景区第一张人脸去匹配景区库
// // 找第一张人脸
// Long faceSampleId = scenicDbSearchResult.getSampleListIds().get(0);
// FaceSampleEntity faceSample = faceRepository.getFaceSample(faceSampleId);
// if (faceSample != null) {
// // 以这个结果为人脸库的匹配结果
// scenicDbSearchResult = faceService.searchFace(face.getScenicId().toString(), faceSample.getFaceUrl(), "补救措施2存在得分够高");
// }
// }
} }
FaceEntity faceEntity = new FaceEntity(); FaceEntity faceEntity = new FaceEntity();
faceEntity.setId(faceId); faceEntity.setId(faceId);

View File

@ -68,6 +68,8 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static com.ycwl.basic.constant.FaceConstant.USER_FACE_DB_NAME;
@Slf4j @Slf4j
@Service @Service
public class TaskFaceServiceImpl implements TaskFaceService { public class TaskFaceServiceImpl implements TaskFaceService {
@ -312,6 +314,35 @@ public class TaskFaceServiceImpl implements TaskFaceService {
} }
Date endDate = DateUtil.offsetDay(DateUtil.beginOfDay(new Date()), -sampleStoreDay); Date endDate = DateUtil.offsetDay(DateUtil.beginOfDay(new Date()), -sampleStoreDay);
ListFaceEntitiesRequest listFaceEntitiesRequest = new ListFaceEntitiesRequest(); ListFaceEntitiesRequest listFaceEntitiesRequest = new ListFaceEntitiesRequest();
listFaceEntitiesRequest.setDbName(USER_FACE_DB_NAME + String.valueOf(scenicId));
listFaceEntitiesRequest.setOrder("asc");
try {
IAcsClient client = getClient();
AtomicBoolean flag = new AtomicBoolean(false);
while (true) {
ListFaceEntitiesResponse listFaceEntitiesResponse = client.getAcsResponse(listFaceEntitiesRequest);
if (listFaceEntitiesResponse == null || listFaceEntitiesResponse.getData() == null || listFaceEntitiesResponse.getData().getEntities() == null || listFaceEntitiesResponse.getData().getEntities().isEmpty()) {
break;
}
listFaceEntitiesResponse.getData().getEntities().forEach(entity -> {
Date createdDate = new Date(entity.getCreatedAt());
if (createdDate.before(endDate)) {
flag.set(true);
log.info("当前景区{},开始删除人脸样本:{}", scenicId, entity.getEntityId());
deleteFaceSample(String.valueOf(scenicId), entity.getEntityId());
} else {
log.info("当前景区{},人脸样本:{}未过期", scenicId, entity.getEntityId());
}
});
if (!flag.get()) {
break;
} else {
flag.set(false);
}
}
} catch (Exception ignored) {
}
listFaceEntitiesRequest.setDbName(String.valueOf(scenicId)); listFaceEntitiesRequest.setDbName(String.valueOf(scenicId));
listFaceEntitiesRequest.setOrder("asc"); listFaceEntitiesRequest.setOrder("asc");
try { try {

View File

@ -104,6 +104,7 @@
user_source_expire_day=#{userSourceExpireDay}, user_source_expire_day=#{userSourceExpireDay},
face_score_threshold=#{faceScoreThreshold}, face_score_threshold=#{faceScoreThreshold},
force_finish_time=#{forceFinishTime}, force_finish_time=#{forceFinishTime},
face_detect_helper_threshold=#{faceDetectHelperThreshold},
store_type=#{storeType}, store_type=#{storeType},
store_config_json=#{storeConfigJson}, store_config_json=#{storeConfigJson},
broker_direct_rate=#{brokerDirectRate} broker_direct_rate=#{brokerDirectRate}