diff --git a/src/main/java/com/ycwl/basic/controller/viid/ViidController.java b/src/main/java/com/ycwl/basic/controller/viid/ViidController.java index f7d928c..fab2fa4 100644 --- a/src/main/java/com/ycwl/basic/controller/viid/ViidController.java +++ b/src/main/java/com/ycwl/basic/controller/viid/ViidController.java @@ -45,6 +45,7 @@ import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.TimeZone; +import java.util.UUID; @IgnoreToken @RestController @@ -233,7 +234,7 @@ public class ViidController { faceSample.setCreateAt(new Date()); String url; try { - url = ossUtil.uploadFile(file.getInputStream(), AliFaceUtil.generateEntityId(faceSample) + "." + ext); + url = ossUtil.uploadFile(file.getInputStream(), UUID.randomUUID().toString() + "." + ext); } catch (IOException e) { log.error("文件上传失败!", e); continue; diff --git a/src/main/java/com/ycwl/basic/model/task/resp/AddFaceRespVo.java b/src/main/java/com/ycwl/basic/model/task/resp/AddFaceSampleRespVo.java similarity index 73% rename from src/main/java/com/ycwl/basic/model/task/resp/AddFaceRespVo.java rename to src/main/java/com/ycwl/basic/model/task/resp/AddFaceSampleRespVo.java index 6afc14e..540942c 100644 --- a/src/main/java/com/ycwl/basic/model/task/resp/AddFaceRespVo.java +++ b/src/main/java/com/ycwl/basic/model/task/resp/AddFaceSampleRespVo.java @@ -3,6 +3,6 @@ package com.ycwl.basic.model.task.resp; import lombok.Data; @Data -public class AddFaceRespVo { +public class AddFaceSampleRespVo { private float score; } diff --git a/src/main/java/com/ycwl/basic/service/impl/task/TaskFaceServiceImpl.java b/src/main/java/com/ycwl/basic/service/impl/task/TaskFaceServiceImpl.java index 1200703..7b9c6dc 100644 --- a/src/main/java/com/ycwl/basic/service/impl/task/TaskFaceServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/impl/task/TaskFaceServiceImpl.java @@ -27,10 +27,9 @@ import com.ycwl.basic.model.pc.faceSample.entity.FaceSampleEntity; import com.ycwl.basic.model.pc.faceSample.req.FaceSampleReqQuery; import com.ycwl.basic.model.pc.faceSample.resp.FaceSampleRespVO; import com.ycwl.basic.model.pc.scenic.entity.ScenicConfigEntity; -import com.ycwl.basic.model.task.resp.AddFaceRespVo; +import com.ycwl.basic.model.task.resp.AddFaceSampleRespVo; import com.ycwl.basic.model.task.resp.SearchFaceRespVo; import com.ycwl.basic.service.task.TaskFaceService; -import com.ycwl.basic.utils.AliFaceUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -41,6 +40,7 @@ import com.aliyuncs.IAcsClient; import com.aliyuncs.profile.DefaultProfile; import java.math.BigDecimal; +import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.stream.Collectors; @@ -67,9 +67,9 @@ public class TaskFaceServiceImpl implements TaskFaceService { } @Override - public SearchFaceRespVo searchFace(Long scenicId, Long faceId) { + public SearchFaceRespVo searchFace(Long faceId) { FaceRespVO faceRespVO = faceMapper.getById(faceId); - SearchFaceRespVo respVo = searchFace(scenicId, faceRespVO.getFaceUrl()); + SearchFaceRespVo respVo = searchFace(faceRespVO.getScenicId(), faceRespVO.getFaceUrl()); if (respVo != null) { FaceEntity faceEntity = new FaceEntity(); faceEntity.setId(faceId); @@ -84,9 +84,15 @@ public class TaskFaceServiceImpl implements TaskFaceService { @Override public SearchFaceRespVo searchFace(Long scenicId, String faceUrl) { + return searchFace(scenicId.toString(), faceUrl); + } + + @Override + public SearchFaceRespVo searchFace(String dbName, String faceUrl) { + assureFaceDB(dbName); IAcsClient client = getClient(); SearchFaceRequest request = new SearchFaceRequest(); - request.setDbName(scenicId.toString()); + request.setDbName(dbName); request.setImageUrl(faceUrl); request.setLimit(100); request.setQualityScoreThreshold(80F); @@ -118,11 +124,22 @@ public class TaskFaceServiceImpl implements TaskFaceService { } @Override - public AddFaceRespVo addFaceSample(Long faceSampleId) { + public AddFaceSampleRespVo addFaceSample(Long faceSampleId) { FaceSampleRespVO faceSampleRespVO = faceSampleMapper.getById(faceSampleId); + String entityId = generateEntityId(faceSampleRespVO); + AddFaceSampleRespVo respVo = addFaceSample(faceSampleRespVO.getScenicId().toString(), entityId, faceSampleRespVO.getFaceUrl(), faceSampleId.toString()); + FaceSampleEntity faceSampleEntity = new FaceSampleEntity(); + faceSampleEntity.setId(faceSampleId); + faceSampleEntity.setScore(respVo.getScore()); + faceSampleEntity.setUpdateAt(new Date()); + faceSampleMapper.update(faceSampleEntity); + return respVo; + } + + @Override + public AddFaceSampleRespVo addFaceSample(String dbName, String entityId, String faceUrl, String extData) { AddFaceEntityRequest request = new AddFaceEntityRequest(); - request.setDbName(faceSampleRespVO.getScenicId().toString()); - String entityId = AliFaceUtil.generateEntityId(faceSampleRespVO); + request.setDbName(dbName); request.setEntityId(entityId); IAcsClient client = getClient(); try { @@ -131,27 +148,22 @@ public class TaskFaceServiceImpl implements TaskFaceService { return null; } AddFaceRequest addFaceRequest = new AddFaceRequest(); - addFaceRequest.setDbName(faceSampleRespVO.getScenicId().toString()); + addFaceRequest.setDbName(dbName); addFaceRequest.setEntityId(entityId); - addFaceRequest.setImageUrl(faceSampleRespVO.getFaceUrl()); - addFaceRequest.setExtraData(faceSampleId.toString()); - AddFaceRespVo respVo = new AddFaceRespVo(); + addFaceRequest.setImageUrl(faceUrl); + addFaceRequest.setExtraData(extData); + AddFaceSampleRespVo respVo = new AddFaceSampleRespVo(); try { AddFaceResponse acsResponse = client.getAcsResponse(addFaceRequest); - FaceSampleEntity faceSampleEntity = new FaceSampleEntity(); - faceSampleEntity.setId(faceSampleId); - faceSampleEntity.setScore(acsResponse.getData().getQualitieScore()); - faceSampleEntity.setUpdateAt(new Date()); - faceSampleMapper.update(faceSampleEntity); respVo.setScore(acsResponse.getData().getQualitieScore()); + return respVo; } catch (ClientException e) { return null; } - return respVo; } @Override - public void batchDeleteFace(Long scenicId) { + public void batchDeleteExpiredFace(Long scenicId) { FaceSampleReqQuery query = new FaceSampleReqQuery(); query.setDeviceId(scenicId); faceSampleMapper.list(query); @@ -170,7 +182,7 @@ public class TaskFaceServiceImpl implements TaskFaceService { query.setEndTime(dayEnd); IAcsClient client = getClient(); faceSampleMapper.list(query).forEach(faceSampleEntity -> { - String entityId = AliFaceUtil.generateEntityId(faceSampleEntity); + String entityId = generateEntityId(faceSampleEntity); DeleteFaceEntityRequest request = new DeleteFaceEntityRequest(); request.setDbName(scenicId.toString()); request.setEntityId(entityId); @@ -232,18 +244,6 @@ public class TaskFaceServiceImpl implements TaskFaceService { } } - public void addFaceDBCache(String dbName) { - redisTemplate.opsForValue().set(FaceConstant.FACE_DB_NAME_PFX + dbName, "1"); - } - - public Boolean removeFaceDBCache(String dbName) { - return redisTemplate.delete(FaceConstant.FACE_DB_NAME_PFX + dbName); - } - - public Boolean clearFaceDBCache() { - return redisTemplate.delete(FaceConstant.FACE_DB_NAME_PFX + "*"); - } - @Override public void assureFaceDB(String dbName) { if (redisTemplate.hasKey(FaceConstant.FACE_DB_NAME_PFX + dbName)) { @@ -267,4 +267,30 @@ public class TaskFaceServiceImpl implements TaskFaceService { log.error("阿里云确保人脸数据库失败!", e); } } + + public void addFaceDBCache(String dbName) { + redisTemplate.opsForValue().set(FaceConstant.FACE_DB_NAME_PFX + dbName, "1"); + } + + public Boolean removeFaceDBCache(String dbName) { + return redisTemplate.delete(FaceConstant.FACE_DB_NAME_PFX + dbName); + } + + public Boolean clearFaceDBCache() { + return redisTemplate.delete(FaceConstant.FACE_DB_NAME_PFX + "*"); + } + + + private static final String DATE_FORMAT="yyyyMMddHHmmssSSS"; + + public static String generateEntityId(FaceSampleEntity entity) { + SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT); + String entityId = entity.getDeviceId().toString() + "_" + sdf.format(entity.getCreateAt()); + return entityId; + } + public static String generateEntityId(FaceSampleRespVO entity) { + SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT); + String entityId = entity.getDeviceId().toString() + "_" + sdf.format(entity.getCreateAt()); + return entityId; + } } diff --git a/src/main/java/com/ycwl/basic/service/task/TaskFaceService.java b/src/main/java/com/ycwl/basic/service/task/TaskFaceService.java index 29dae3d..c0d0f7a 100644 --- a/src/main/java/com/ycwl/basic/service/task/TaskFaceService.java +++ b/src/main/java/com/ycwl/basic/service/task/TaskFaceService.java @@ -1,17 +1,20 @@ package com.ycwl.basic.service.task; -import com.ycwl.basic.model.task.resp.AddFaceRespVo; +import com.ycwl.basic.model.task.resp.AddFaceSampleRespVo; import com.ycwl.basic.model.task.resp.SearchFaceRespVo; public interface TaskFaceService { - SearchFaceRespVo searchFace(Long scenicId, Long faceId); + SearchFaceRespVo searchFace(Long faceId); SearchFaceRespVo searchFace(Long scenicId, String faceUrl); + SearchFaceRespVo searchFace(String dbName, String faceUrl); - AddFaceRespVo addFaceSample(Long faceSampleId); + AddFaceSampleRespVo addFaceSample(Long faceSampleId); - void batchDeleteFace(Long scenicId); + AddFaceSampleRespVo addFaceSample(String dbName, String entityId, String faceUrl, String extData); + + void batchDeleteExpiredFace(Long scenicId); void deleteFaceDB(String scenicId); diff --git a/src/main/java/com/ycwl/basic/task/DynamicTaskGenerator.java b/src/main/java/com/ycwl/basic/task/DynamicTaskGenerator.java index 981f1d3..1ec78de 100644 --- a/src/main/java/com/ycwl/basic/task/DynamicTaskGenerator.java +++ b/src/main/java/com/ycwl/basic/task/DynamicTaskGenerator.java @@ -106,7 +106,7 @@ public class DynamicTaskGenerator { if (face.getMatchSampleIds() != null) { oldMatchedSampleListIds = Arrays.asList(face.getMatchSampleIds().split(",")); } - SearchFaceRespVo searchFace = faceService.searchFace(scenic.getId(), face.getId()); + SearchFaceRespVo searchFace = faceService.searchFace(face.getId()); if (oldMatchedSampleListIds.size() == searchFace.getSampleListIds().size()) { boolean isEqual = true; for (Long sampleId : searchFace.getSampleListIds()) { diff --git a/src/main/java/com/ycwl/basic/task/FaceCleaner.java b/src/main/java/com/ycwl/basic/task/FaceCleaner.java index 1c1b243..44a54fc 100644 --- a/src/main/java/com/ycwl/basic/task/FaceCleaner.java +++ b/src/main/java/com/ycwl/basic/task/FaceCleaner.java @@ -28,7 +28,7 @@ public class FaceCleaner { List scenicList = scenicMapper.list(scenicQuery); scenicList.forEach(scenic -> { log.info("当前景区{},开始删除人脸样本", scenic.getName()); - faceService.batchDeleteFace(scenic.getId()); + faceService.batchDeleteExpiredFace(scenic.getId()); }); } } diff --git a/src/main/java/com/ycwl/basic/utils/AliFaceUtil.java b/src/main/java/com/ycwl/basic/utils/AliFaceUtil.java index 658307f..9c34a1a 100644 --- a/src/main/java/com/ycwl/basic/utils/AliFaceUtil.java +++ b/src/main/java/com/ycwl/basic/utils/AliFaceUtil.java @@ -6,16 +6,4 @@ import com.ycwl.basic.model.pc.faceSample.resp.FaceSampleRespVO; import java.text.SimpleDateFormat; public class AliFaceUtil { - private static final String DATE_FORMAT="yyyyMMddHHmmssSSS"; - - public static String generateEntityId(FaceSampleEntity entity) { - SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT); - String entityId = entity.getDeviceId().toString() + "_" + sdf.format(entity.getCreateAt()); - return entityId; - } - public static String generateEntityId(FaceSampleRespVO entity) { - SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT); - String entityId = entity.getDeviceId().toString() + "_" + sdf.format(entity.getCreateAt()); - return entityId; - } }