部分修改

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.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;

View File

@ -3,6 +3,6 @@ package com.ycwl.basic.model.task.resp;
import lombok.Data;
@Data
public class AddFaceRespVo {
public class AddFaceSampleRespVo {
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.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;
}
}

View File

@ -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);

View File

@ -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()) {

View File

@ -28,7 +28,7 @@ public class FaceCleaner {
List<ScenicRespVO> scenicList = scenicMapper.list(scenicQuery);
scenicList.forEach(scenic -> {
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;
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;
}
}