From 519f9969ec3804a3832678942d90268af79ac657 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Sat, 1 Mar 2025 16:37:05 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E4=B8=AA=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pc/scenic/entity/ScenicConfigEntity.java | 1 + .../service/impl/pc/FaceServiceImpl.java | 41 +++++++++++-------- .../task/impl/TaskFaceServiceImpl.java | 31 ++++++++++++++ src/main/resources/mapper/ScenicMapper.xml | 1 + 4 files changed, 57 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/ycwl/basic/model/pc/scenic/entity/ScenicConfigEntity.java b/src/main/java/com/ycwl/basic/model/pc/scenic/entity/ScenicConfigEntity.java index 0bf1a72..da4a654 100644 --- a/src/main/java/com/ycwl/basic/model/pc/scenic/entity/ScenicConfigEntity.java +++ b/src/main/java/com/ycwl/basic/model/pc/scenic/entity/ScenicConfigEntity.java @@ -69,4 +69,5 @@ public class ScenicConfigEntity { private StorageType storeType; private String storeConfigJson; private BigDecimal brokerDirectRate; + private Integer faceDetectHelperThreshold; } diff --git a/src/main/java/com/ycwl/basic/service/impl/pc/FaceServiceImpl.java b/src/main/java/com/ycwl/basic/service/impl/pc/FaceServiceImpl.java index bd3727d..2c67f23 100644 --- a/src/main/java/com/ycwl/basic/service/impl/pc/FaceServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/impl/pc/FaceServiceImpl.java @@ -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.resp.FaceRespVO; 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.SourceEntity; import com.ycwl.basic.model.task.resp.SearchFaceRespVo; import com.ycwl.basic.repository.FaceRepository; +import com.ycwl.basic.repository.ScenicRepository; import com.ycwl.basic.service.pc.FaceService; import com.ycwl.basic.service.task.TaskFaceService; import com.ycwl.basic.service.task.TaskService; @@ -67,6 +69,8 @@ public class FaceServiceImpl implements FaceService { private FaceRepository faceRepository; @Autowired private VideoMapper videoMapper; + @Autowired + private ScenicRepository scenicRepository; @Override public ApiResponse> pageQuery(FaceReqQuery faceReqQuery) { @@ -207,26 +211,29 @@ public class FaceServiceImpl implements FaceService { return null; } 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().size() < 5) { - // 补救逻辑 - Long faceSampleId = scenicDbSearchResult.getSampleListIds().get(0); - FaceSampleEntity faceSample = faceRepository.getFaceSample(faceSampleId); - if (faceSample != null) { - // 以这个结果为人脸库的匹配结果 - scenicDbSearchResult = faceService.searchFace(face.getScenicId().toString(), faceSample.getFaceUrl(), "补救措施1:人脸数太少少于5"); - } - } 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 (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); + if (faceSample != null) { + // 以这个结果为人脸库的匹配结果 + scenicDbSearchResult = faceService.searchFace(face.getScenicId().toString(), faceSample.getFaceUrl(), "补救措施1:人脸数太少少于设定值"+scenicConfig.getFaceDetectHelperThreshold()); + } } } +// 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.setId(faceId); diff --git a/src/main/java/com/ycwl/basic/service/task/impl/TaskFaceServiceImpl.java b/src/main/java/com/ycwl/basic/service/task/impl/TaskFaceServiceImpl.java index 3c5d44a..7d4e800 100644 --- a/src/main/java/com/ycwl/basic/service/task/impl/TaskFaceServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/task/impl/TaskFaceServiceImpl.java @@ -68,6 +68,8 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.stream.Collectors; +import static com.ycwl.basic.constant.FaceConstant.USER_FACE_DB_NAME; + @Slf4j @Service public class TaskFaceServiceImpl implements TaskFaceService { @@ -312,6 +314,35 @@ public class TaskFaceServiceImpl implements TaskFaceService { } Date endDate = DateUtil.offsetDay(DateUtil.beginOfDay(new Date()), -sampleStoreDay); 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.setOrder("asc"); try { diff --git a/src/main/resources/mapper/ScenicMapper.xml b/src/main/resources/mapper/ScenicMapper.xml index 2fa8800..b13c589 100644 --- a/src/main/resources/mapper/ScenicMapper.xml +++ b/src/main/resources/mapper/ScenicMapper.xml @@ -104,6 +104,7 @@ user_source_expire_day=#{userSourceExpireDay}, face_score_threshold=#{faceScoreThreshold}, force_finish_time=#{forceFinishTime}, + face_detect_helper_threshold=#{faceDetectHelperThreshold}, store_type=#{storeType}, store_config_json=#{storeConfigJson}, broker_direct_rate=#{brokerDirectRate}