This commit is contained in:
2025-01-26 02:21:27 +08:00
parent 7bd9a7507f
commit 1b11342e5d
32 changed files with 310 additions and 133 deletions

View File

@@ -49,7 +49,6 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
@@ -87,7 +86,12 @@ public class TaskFaceServiceImpl implements TaskFaceService {
private SourceMapper sourceMapper;
@Autowired
private OrderBiz orderBiz;
private SlidingWindowRateLimiter limiter = new SlidingWindowRateLimiter(5); // 阿里云人脸检索限制qps=5
// 阿里云人脸检索限制qps=2
private final SlidingWindowRateLimiter addEntityLimiter = new SlidingWindowRateLimiter(1);
// 阿里云人脸检索限制qps=5
private final SlidingWindowRateLimiter searchFaceLimiter = new SlidingWindowRateLimiter(4);
private final SlidingWindowRateLimiter deleteDbLimiter = new SlidingWindowRateLimiter(1);
private final SlidingWindowRateLimiter deleteEntityLimiter = new SlidingWindowRateLimiter(1);
private IAcsClient getClient() {
DefaultProfile profile = DefaultProfile.getProfile(
@@ -163,6 +167,10 @@ public class TaskFaceServiceImpl implements TaskFaceService {
request.setLimit(100);
// request.setQualityScoreThreshold(60f);
FaceDetectLog log = FaceDetectLog.quickCreate("预留字段", request);
try {
searchFaceLimiter.aquire();
} catch (InterruptedException ignored) {
}
try {
SearchFaceResponse response = client.getAcsResponse(request);
log.fillResponse(response);
@@ -197,7 +205,7 @@ public class TaskFaceServiceImpl implements TaskFaceService {
.collect(Collectors.toList());
log.matchLocalRecord(records);
List<Long> faceSampleIds = records.stream()
.filter(record -> record.getScore() > 0.6)
.filter(record -> record.getScore() > 0.525F)
.map(MatchLocalRecord::getFaceSampleId)
.collect(Collectors.toList());
respVo.setFirstMatchRate(matchList.get(0).getFaceItems().get(0).getScore());
@@ -235,9 +243,8 @@ public class TaskFaceServiceImpl implements TaskFaceService {
request.setEntityId(entityId);
IAcsClient client = getClient();
try {
limiter.allowRequest();
} catch (InterruptedException e) {
return null;
addEntityLimiter.aquire();
} catch (InterruptedException ignored) {
}
try {
client.getAcsResponse(request);
@@ -256,7 +263,7 @@ public class TaskFaceServiceImpl implements TaskFaceService {
respVo.setScore(acsResponse.getData().getQualitieScore());
return respVo;
} catch (ClientException e) {
log.error("addFaceEntity", e);
log.error("addFace", e);
return null;
}
}
@@ -283,6 +290,10 @@ public class TaskFaceServiceImpl implements TaskFaceService {
DeleteFaceEntityRequest request = new DeleteFaceEntityRequest();
request.setDbName(scenicId.toString());
request.setEntityId(entityId);
try {
deleteEntityLimiter.aquire();
} catch (InterruptedException ignored) {
}
try {
client.getAcsResponse(request);
} catch (ClientException e) {
@@ -310,9 +321,8 @@ public class TaskFaceServiceImpl implements TaskFaceService {
deleteFaceEntityRequest.setDbName(entity.getDbName());
deleteFaceEntityRequest.setEntityId(entity.getEntityId());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
deleteEntityLimiter.aquire();
} catch (InterruptedException ignored) {
}
try {
client.getAcsResponse(deleteFaceEntityRequest);
@@ -323,6 +333,10 @@ public class TaskFaceServiceImpl implements TaskFaceService {
}
DeleteFaceDbRequest deleteFaceDbRequest = new DeleteFaceDbRequest();
deleteFaceDbRequest.setName(dbName);
try {
deleteDbLimiter.aquire();
} catch (InterruptedException ignored) {
}
client.getAcsResponse(deleteFaceDbRequest);
removeFaceDBCache(dbName);
} catch (ClientException e) {

View File

@@ -545,7 +545,7 @@ public class TaskTaskServiceImpl implements TaskService {
}
ScenicEntity scenic = scenicRepository.getScenic(item.getScenicId());
String title = "您在【" + scenic.getName() + "】的专属影像";
String page = "pages/videoSynthesis/buy?scenicId=" + item.getScenicId() + "&faceId=" + item.getFaceId() + "&id=" + item.getVideoId();
String page = "pages/videoSynthesis/index?scenicId=" + item.getScenicId() + "&faceId=" + item.getFaceId();
/**
* 视频名称 {{thing1.DATA}}
* 生成时间 {{time4.DATA}}