部分修改

This commit is contained in:
Jerry Yan 2024-12-26 14:21:33 +08:00
parent ad87d4396b
commit 64504fdf3b
7 changed files with 70 additions and 52 deletions

View File

@ -45,6 +45,7 @@ import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.TimeZone; import java.util.TimeZone;
import java.util.UUID;
@IgnoreToken @IgnoreToken
@RestController @RestController
@ -233,7 +234,7 @@ public class ViidController {
faceSample.setCreateAt(new Date()); faceSample.setCreateAt(new Date());
String url; String url;
try { try {
url = ossUtil.uploadFile(file.getInputStream(), AliFaceUtil.generateEntityId(faceSample) + "." + ext); url = ossUtil.uploadFile(file.getInputStream(), UUID.randomUUID().toString() + "." + ext);
} catch (IOException e) { } catch (IOException e) {
log.error("文件上传失败!", e); log.error("文件上传失败!", e);
continue; continue;

View File

@ -3,6 +3,6 @@ package com.ycwl.basic.model.task.resp;
import lombok.Data; import lombok.Data;
@Data @Data
public class AddFaceRespVo { public class AddFaceSampleRespVo {
private float score; private float score;
} }

View File

@ -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.req.FaceSampleReqQuery;
import com.ycwl.basic.model.pc.faceSample.resp.FaceSampleRespVO; import com.ycwl.basic.model.pc.faceSample.resp.FaceSampleRespVO;
import com.ycwl.basic.model.pc.scenic.entity.ScenicConfigEntity; 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.model.task.resp.SearchFaceRespVo;
import com.ycwl.basic.service.task.TaskFaceService; import com.ycwl.basic.service.task.TaskFaceService;
import com.ycwl.basic.utils.AliFaceUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -41,6 +40,7 @@ import com.aliyuncs.IAcsClient;
import com.aliyuncs.profile.DefaultProfile; import com.aliyuncs.profile.DefaultProfile;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -67,9 +67,9 @@ public class TaskFaceServiceImpl implements TaskFaceService {
} }
@Override @Override
public SearchFaceRespVo searchFace(Long scenicId, Long faceId) { public SearchFaceRespVo searchFace(Long faceId) {
FaceRespVO faceRespVO = faceMapper.getById(faceId); FaceRespVO faceRespVO = faceMapper.getById(faceId);
SearchFaceRespVo respVo = searchFace(scenicId, faceRespVO.getFaceUrl()); SearchFaceRespVo respVo = searchFace(faceRespVO.getScenicId(), faceRespVO.getFaceUrl());
if (respVo != null) { if (respVo != null) {
FaceEntity faceEntity = new FaceEntity(); FaceEntity faceEntity = new FaceEntity();
faceEntity.setId(faceId); faceEntity.setId(faceId);
@ -84,9 +84,15 @@ public class TaskFaceServiceImpl implements TaskFaceService {
@Override @Override
public SearchFaceRespVo searchFace(Long scenicId, String faceUrl) { 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(); IAcsClient client = getClient();
SearchFaceRequest request = new SearchFaceRequest(); SearchFaceRequest request = new SearchFaceRequest();
request.setDbName(scenicId.toString()); request.setDbName(dbName);
request.setImageUrl(faceUrl); request.setImageUrl(faceUrl);
request.setLimit(100); request.setLimit(100);
request.setQualityScoreThreshold(80F); request.setQualityScoreThreshold(80F);
@ -118,11 +124,22 @@ public class TaskFaceServiceImpl implements TaskFaceService {
} }
@Override @Override
public AddFaceRespVo addFaceSample(Long faceSampleId) { public AddFaceSampleRespVo addFaceSample(Long faceSampleId) {
FaceSampleRespVO faceSampleRespVO = faceSampleMapper.getById(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(); AddFaceEntityRequest request = new AddFaceEntityRequest();
request.setDbName(faceSampleRespVO.getScenicId().toString()); request.setDbName(dbName);
String entityId = AliFaceUtil.generateEntityId(faceSampleRespVO);
request.setEntityId(entityId); request.setEntityId(entityId);
IAcsClient client = getClient(); IAcsClient client = getClient();
try { try {
@ -131,27 +148,22 @@ public class TaskFaceServiceImpl implements TaskFaceService {
return null; return null;
} }
AddFaceRequest addFaceRequest = new AddFaceRequest(); AddFaceRequest addFaceRequest = new AddFaceRequest();
addFaceRequest.setDbName(faceSampleRespVO.getScenicId().toString()); addFaceRequest.setDbName(dbName);
addFaceRequest.setEntityId(entityId); addFaceRequest.setEntityId(entityId);
addFaceRequest.setImageUrl(faceSampleRespVO.getFaceUrl()); addFaceRequest.setImageUrl(faceUrl);
addFaceRequest.setExtraData(faceSampleId.toString()); addFaceRequest.setExtraData(extData);
AddFaceRespVo respVo = new AddFaceRespVo(); AddFaceSampleRespVo respVo = new AddFaceSampleRespVo();
try { try {
AddFaceResponse acsResponse = client.getAcsResponse(addFaceRequest); 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()); respVo.setScore(acsResponse.getData().getQualitieScore());
return respVo;
} catch (ClientException e) { } catch (ClientException e) {
return null; return null;
} }
return respVo;
} }
@Override @Override
public void batchDeleteFace(Long scenicId) { public void batchDeleteExpiredFace(Long scenicId) {
FaceSampleReqQuery query = new FaceSampleReqQuery(); FaceSampleReqQuery query = new FaceSampleReqQuery();
query.setDeviceId(scenicId); query.setDeviceId(scenicId);
faceSampleMapper.list(query); faceSampleMapper.list(query);
@ -170,7 +182,7 @@ public class TaskFaceServiceImpl implements TaskFaceService {
query.setEndTime(dayEnd); query.setEndTime(dayEnd);
IAcsClient client = getClient(); IAcsClient client = getClient();
faceSampleMapper.list(query).forEach(faceSampleEntity -> { faceSampleMapper.list(query).forEach(faceSampleEntity -> {
String entityId = AliFaceUtil.generateEntityId(faceSampleEntity); String entityId = generateEntityId(faceSampleEntity);
DeleteFaceEntityRequest request = new DeleteFaceEntityRequest(); DeleteFaceEntityRequest request = new DeleteFaceEntityRequest();
request.setDbName(scenicId.toString()); request.setDbName(scenicId.toString());
request.setEntityId(entityId); 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 @Override
public void assureFaceDB(String dbName) { public void assureFaceDB(String dbName) {
if (redisTemplate.hasKey(FaceConstant.FACE_DB_NAME_PFX + dbName)) { if (redisTemplate.hasKey(FaceConstant.FACE_DB_NAME_PFX + dbName)) {
@ -267,4 +267,30 @@ public class TaskFaceServiceImpl implements TaskFaceService {
log.error("阿里云确保人脸数据库失败!", e); 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;
}
} }

View File

@ -1,17 +1,20 @@
package com.ycwl.basic.service.task; 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; import com.ycwl.basic.model.task.resp.SearchFaceRespVo;
public interface TaskFaceService { public interface TaskFaceService {
SearchFaceRespVo searchFace(Long scenicId, Long faceId); SearchFaceRespVo searchFace(Long faceId);
SearchFaceRespVo searchFace(Long scenicId, String faceUrl); 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); void deleteFaceDB(String scenicId);

View File

@ -106,7 +106,7 @@ public class DynamicTaskGenerator {
if (face.getMatchSampleIds() != null) { if (face.getMatchSampleIds() != null) {
oldMatchedSampleListIds = Arrays.asList(face.getMatchSampleIds().split(",")); 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()) { if (oldMatchedSampleListIds.size() == searchFace.getSampleListIds().size()) {
boolean isEqual = true; boolean isEqual = true;
for (Long sampleId : searchFace.getSampleListIds()) { for (Long sampleId : searchFace.getSampleListIds()) {

View File

@ -28,7 +28,7 @@ public class FaceCleaner {
List<ScenicRespVO> scenicList = scenicMapper.list(scenicQuery); List<ScenicRespVO> scenicList = scenicMapper.list(scenicQuery);
scenicList.forEach(scenic -> { scenicList.forEach(scenic -> {
log.info("当前景区{},开始删除人脸样本", scenic.getName()); log.info("当前景区{},开始删除人脸样本", scenic.getName());
faceService.batchDeleteFace(scenic.getId()); faceService.batchDeleteExpiredFace(scenic.getId());
}); });
} }
} }

View File

@ -6,16 +6,4 @@ import com.ycwl.basic.model.pc.faceSample.resp.FaceSampleRespVO;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
public class AliFaceUtil { 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;
}
} }