From cf3a49d590dbd7416795767e0d525a1e7707c3e4 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Mon, 7 Apr 2025 01:08:06 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=BA=E8=84=B8=E6=90=9C=E7=B4=A2=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/pc/impl/FaceServiceImpl.java | 4 ++ .../task/impl/TaskFaceServiceImpl.java | 43 +++++++++++-------- 2 files changed, 30 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/ycwl/basic/service/pc/impl/FaceServiceImpl.java b/src/main/java/com/ycwl/basic/service/pc/impl/FaceServiceImpl.java index 8fb9050..d0803f9 100644 --- a/src/main/java/com/ycwl/basic/service/pc/impl/FaceServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/pc/impl/FaceServiceImpl.java @@ -5,6 +5,7 @@ import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.ycwl.basic.biz.OrderBiz; import com.ycwl.basic.enums.StatisticEnum; +import com.ycwl.basic.exception.BaseException; import com.ycwl.basic.facebody.FaceBodyFactory; import com.ycwl.basic.facebody.adapter.AliFaceBodyAdapter; import com.ycwl.basic.facebody.adapter.IFaceBodyAdapter; @@ -229,6 +230,9 @@ public class FaceServiceImpl implements FaceService { faceBodyAdapter = FaceBodyFactory.use(); } SearchFaceRespVo scenicDbSearchResult = faceService.searchFace(faceBodyAdapter, String.valueOf(face.getScenicId()), face.getFaceUrl(), "人脸识别"); + if (scenicDbSearchResult == null) { + throw new BaseException("人脸识别失败,请换一张试试把~"); + } if (scenicDbSearchResult.getSampleListIds() != null && scenicDbSearchResult.getFirstMatchRate() != null && !scenicDbSearchResult.getSampleListIds().isEmpty()) { if (scenicConfig != null && scenicConfig.getFaceDetectHelperThreshold() != null && scenicConfig.getFaceDetectHelperThreshold() > 0) { if (scenicDbSearchResult.getSampleListIds().size() < scenicConfig.getFaceDetectHelperThreshold()) { 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 87bfc74..3487671 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 @@ -181,7 +181,7 @@ public class TaskFaceServiceImpl implements TaskFaceService { request.setLimit(200); // request.setQualityScoreThreshold(60f); FaceDetectLog logEntity = FaceDetectLog.quickCreate(reason, request); - float threshold = 0.525F; + float threshold = 0; int tourMinutes = -1; if (StringUtils.isNumeric(dbName)) { ScenicConfigEntity scenicConfig = scenicRepository.getScenicConfig(Long.valueOf(dbName)); @@ -193,9 +193,18 @@ public class TaskFaceServiceImpl implements TaskFaceService { tourMinutes = scenicConfig.getTourTime(); } } + } else if (StringUtils.isNumeric(dbName.replace(USER_FACE_DB_NAME, ""))) { + Long scenicId = Long.valueOf(dbName.replace(USER_FACE_DB_NAME, "")); + ScenicConfigEntity scenicConfig = scenicRepository.getScenicConfig(scenicId); + if (scenicConfig != null) { + if (scenicConfig.getFaceScoreThreshold() != null) { + threshold = scenicConfig.getFaceScoreThreshold() / 100F; + } + } } final float _threshold = threshold; List acceptFaceSampleIds; + List allFaceSampleIds; try { SearchFaceResp response = adapter.searchFace(dbName, faceUrl); if (response == null) { @@ -219,45 +228,45 @@ public class TaskFaceServiceImpl implements TaskFaceService { .filter(StringUtils::isNumeric) .map(Long::valueOf) .collect(Collectors.toList()); - if (acceptFaceSampleIds.isEmpty()) { - respVo.setFirstMatchRate(0f); - respVo.setSampleListIds(Collections.emptyList()); - return respVo; - } - List faceSampleList = new ArrayList<>(); + allFaceSampleIds = records.stream() + .map(SearchFaceResultItem::getExtData) + .filter(StringUtils::isNumeric) + .map(Long::valueOf) + .collect(Collectors.toList()); + List allFaceSampleList = new ArrayList<>(); if (StringUtils.isNumeric(dbName)) { // 景区 - faceSampleList = faceSampleMapper.listByIds(acceptFaceSampleIds); + allFaceSampleList = faceSampleMapper.listByIds(allFaceSampleIds); Long firstFaceSampleId = acceptFaceSampleIds.get(0); - Optional firstFaceSample = faceSampleList.stream().filter(faceSample -> faceSample.getId().equals(firstFaceSampleId)).findAny(); + Optional firstFaceSample = allFaceSampleList.stream().filter(faceSample -> faceSample.getId().equals(firstFaceSampleId)).findAny(); if (firstFaceSample.isPresent()) { if (tourMinutes > 0) { + List acceptFaceSampleList = faceSampleMapper.listByIds(acceptFaceSampleIds); Date startDate = DateUtil.offsetMinute(firstFaceSample.get().getCreateAt(), -tourMinutes/2); Date endDate = DateUtil.offsetMinute(firstFaceSample.get().getCreateAt(), tourMinutes/2); - acceptFaceSampleIds = faceSampleList.stream() + acceptFaceSampleIds = acceptFaceSampleList.stream() .filter(faceSample -> faceSample.getCreateAt().after(startDate) && faceSample.getCreateAt().before(endDate)) .map(FaceSampleEntity::getId) .collect(Collectors.toList()); log.info("时间范围逻辑:最高匹配:{},时间范围需要在:{}~{}间", firstFaceSample, startDate, endDate); } else { - acceptFaceSampleIds = faceSampleList.stream() - .map(FaceSampleEntity::getId) - .collect(Collectors.toList()); log.info("时间范围逻辑:景区未限制"); } } else { - acceptFaceSampleIds = faceSampleList.stream() - .map(FaceSampleEntity::getId) - .collect(Collectors.toList()); log.info("时间范围逻辑:最高匹配ID:{},未找到", firstFaceSampleId); } } + if (acceptFaceSampleIds.isEmpty()) { + respVo.setFirstMatchRate(0f); + respVo.setSampleListIds(Collections.emptyList()); + return respVo; + } List collect = new ArrayList<>(); for (SearchFaceResultItem item : records) { MatchLocalRecord record = new MatchLocalRecord(); record.setIdStr(item.getExtData()); record.setFaceSampleId(Long.parseLong(item.getExtData())); if (StringUtils.isNumeric(item.getDbName())) { - Optional optionalFse = faceSampleList.stream().filter(face -> face.getId().equals(Long.parseLong(item.getExtData()))).findAny(); + Optional optionalFse = allFaceSampleList.stream().filter(face -> face.getId().equals(Long.parseLong(item.getExtData()))).findAny(); if (optionalFse.isPresent()) { DeviceEntity device = deviceRepository.getDevice(optionalFse.get().getDeviceId()); if (device != null) {