diff --git a/src/main/java/com/ai/da/common/enums/PoseEnum.java b/src/main/java/com/ai/da/common/enums/PoseEnum.java index 9b0164ca..44361888 100644 --- a/src/main/java/com/ai/da/common/enums/PoseEnum.java +++ b/src/main/java/com/ai/da/common/enums/PoseEnum.java @@ -11,12 +11,18 @@ import java.util.stream.Collectors; @Getter public enum PoseEnum { - POSE_1(1, "aida-sys-image/pose/pose-1.mp4", "aida-sys-image/pose/pose-1.gif", "aida-sys-image/pose/pose-1-first_frame.jpeg", "AACT.8090e67b.-E3pujumEfCbDTI_rjSH-A.LwIlGT3j"), - POSE_2(2, "aida-sys-image/pose/pose-2.mp4", "aida-sys-image/pose/pose-2.gif", "aida-sys-image/pose/pose-2-first_frame.jpeg", "AACT.8090e67b.TwJLxEv3EfCbDTI_rjSH-A.IOQZCYhf"), - POSE_3(3, "aida-sys-image/pose/pose-3.mp4", "aida-sys-image/pose/pose-3.gif", "aida-sys-image/pose/pose-3-first_frame.jpeg", "AACT.8090e67b.gd3OCkv4EfCxyZo8eQGF2Q.qMm-a1XI"), - POSE_4(4, "aida-sys-image/pose/pose-4.mp4", "aida-sys-image/pose/pose-4.gif", "aida-sys-image/pose/pose-4-first_frame.jpeg", "AACT.8090e67b.AUDnuEwDEfCEHBaRJeW4dg.rlx36xEY"), - POSE_5(5, "aida-sys-image/pose/pose-5.mp4", "aida-sys-image/pose/pose-5.gif", "aida-sys-image/pose/pose-5-first_frame.jpeg", "AACT.8090e67b.G8BvkEwEEfCxyZo8eQGF2Q.fo4ryrgR"), - POSE_6(6, "aida-sys-image/pose/pose-6.mp4", "aida-sys-image/pose/pose-6.gif", "aida-sys-image/pose/pose-6-first_frame.jpeg", "AACT.8090e67b.yBIPnEwEEfCxyZo8eQGF2Q.boSFwTG9"); +// POSE_1(1, "aida-sys-image/pose/pose-1.mp4", "aida-sys-image/pose/pose-1.gif", "aida-sys-image/pose/pose-1-first_frame.jpeg", "AACT.8090e67b.-E3pujumEfCbDTI_rjSH-A.LwIlGT3j"), + POSE_1(1, "aida-sys-image/pose/pose-1-1.mp4", "aida-sys-image/pose/pose-1-1.gif", "aida-sys-image/pose/pose-1-first_frame.jpeg", "AACT.8090e67b.qNMWJlyKEfCuORaRJeW4dg.x3wUteVO"), +// POSE_2(2, "aida-sys-image/pose/pose-2.mp4", "aida-sys-image/pose/pose-2.gif", "aida-sys-image/pose/pose-2-first_frame.jpeg", "AACT.8090e67b.TwJLxEv3EfCbDTI_rjSH-A.IOQZCYhf"), + POSE_2(2, "aida-sys-image/pose/pose-2-1.mp4", "aida-sys-image/pose/pose-2-1.gif", "aida-sys-image/pose/pose-2-first_frame.jpeg", "AACT.8090e67b.QpaGOlyLEfCuuJo8eQGF2Q.62EiJj-6"), +// POSE_3(3, "aida-sys-image/pose/pose-3.mp4", "aida-sys-image/pose/pose-3.gif", "aida-sys-image/pose/pose-3-first_frame.jpeg", "AACT.8090e67b.gd3OCkv4EfCxyZo8eQGF2Q.qMm-a1XI"), + POSE_3(3, "aida-sys-image/pose/pose-3-1.mp4", "aida-sys-image/pose/pose-3-1.gif", "aida-sys-image/pose/pose-3-first_frame.jpeg", "AACT.8090e67b.2q5qjFyLEfCImjI_rjSH-A.5cFMwOvi"), +// POSE_4(4, "aida-sys-image/pose/pose-4.mp4", "aida-sys-image/pose/pose-4.gif", "aida-sys-image/pose/pose-4-first_frame.jpeg", "AACT.8090e67b.AUDnuEwDEfCEHBaRJeW4dg.rlx36xEY"), + POSE_4(4, "aida-sys-image/pose/pose-4-1.mp4", "aida-sys-image/pose/pose-4-1.gif", "aida-sys-image/pose/pose-4-first_frame.jpeg", "AACT.8090e67b.KoYMplyPEfCuORaRJeW4dg.MuuBTG78"), +// POSE_5(5, "aida-sys-image/pose/pose-5.mp4", "aida-sys-image/pose/pose-5.gif", "aida-sys-image/pose/pose-5-first_frame.jpeg", "AACT.8090e67b.G8BvkEwEEfCxyZo8eQGF2Q.fo4ryrgR"), + POSE_5(5, "aida-sys-image/pose/pose-5-1.mp4", "aida-sys-image/pose/pose-5-1.gif", "aida-sys-image/pose/pose-5-first_frame.jpeg", "AACT.8090e67b.x54FNFyPEfCuuJo8eQGF2Q.P1egmEZ_"), +// POSE_6(6, "aida-sys-image/pose/pose-6.mp4", "aida-sys-image/pose/pose-6.gif", "aida-sys-image/pose/pose-6-first_frame.jpeg", "AACT.8090e67b.yBIPnEwEEfCxyZo8eQGF2Q.boSFwTG9"); + POSE_6(6, "aida-sys-image/pose/pose-6-1.mp4", "aida-sys-image/pose/pose-6-1.gif", "aida-sys-image/pose/pose-6-first_frame.jpeg", "AACT.8090e67b.QSCvBlyQEfCImjI_rjSH-A.G9-Z5ffW"); private final Integer id; diff --git a/src/main/java/com/ai/da/model/dto/QueryLibraryPageDTO.java b/src/main/java/com/ai/da/model/dto/QueryLibraryPageDTO.java index 9506adfb..05cade70 100644 --- a/src/main/java/com/ai/da/model/dto/QueryLibraryPageDTO.java +++ b/src/main/java/com/ai/da/model/dto/QueryLibraryPageDTO.java @@ -30,7 +30,9 @@ public class QueryLibraryPageDTO extends PageQueryBaseVo { @ApiModelProperty("交集还是并集:1交集2并集") private Integer intersection; + @ApiModelProperty("年龄段") private String ageGroup; + @ApiModelProperty("brandId") private Long brandId; } diff --git a/src/main/java/com/ai/da/python/PythonService.java b/src/main/java/com/ai/da/python/PythonService.java index 7629b408..934e126e 100644 --- a/src/main/java/com/ai/da/python/PythonService.java +++ b/src/main/java/com/ai/da/python/PythonService.java @@ -4011,7 +4011,7 @@ public class PythonService { //关闭FastJson的引用检测 防止出现$ref 现象 Map map = new HashMap<>(); map.put("image_url", url); - map.put("is_brand_dna", Boolean.FALSE); + map.put("is_brand_dna", Boolean.TRUE); log.info("bright请求python 参数:####{}", map); String param = JSON.toJSONString(map, SerializerFeature.WriteNullStringAsEmpty); log.info(param); diff --git a/src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java b/src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java index 5f32628c..07ec661f 100644 --- a/src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java @@ -196,12 +196,12 @@ public class GenerateServiceImpl extends ServiceImpl i String jsonString = ""; HashMap params = new HashMap<>(); String version = null; - if (!StringUtil.isNullOrEmpty(generateThroughImageTextDTO.getModelName()) && generateThroughImageTextDTO.getModelName().equals("high")){ + if (!StringUtil.isNullOrEmpty(generateThroughImageTextDTO.getModelName()) && generateThroughImageTextDTO.getModelName().equals("high")) { version = "high"; - params.put("version","high"); - }else if (!StringUtil.isNullOrEmpty(generateThroughImageTextDTO.getModelName()) && generateThroughImageTextDTO.getModelName().equals("fast")){ + params.put("version", "high"); + } else if (!StringUtil.isNullOrEmpty(generateThroughImageTextDTO.getModelName()) && generateThroughImageTextDTO.getModelName().equals("fast")) { version = "fast"; - params.put("version","fast"); + params.put("version", "fast"); } // 3.1 确定不同类型的印花分别调哪个接口 if (generateThroughImageTextDTO.getLevel1Type().equals(PRINT_BOARD.getRealName())) { @@ -362,7 +362,7 @@ public class GenerateServiceImpl extends ServiceImpl i String prefix = ""; if (userInput.startsWith("Painting Style") || userInput.startsWith("Illustration Style") - || userInput.startsWith("Real Style") ){ + || userInput.startsWith("Real Style")) { prefix = userInput.substring(0, userInput.indexOf(",")) + ", "; userInput = userInput.substring(userInput.indexOf(",") + 1); } @@ -389,7 +389,7 @@ public class GenerateServiceImpl extends ServiceImpl i case "Sketchboard": // text = "clear lines, simple outlines monochrome white vector image of " + translated + ", no background, sketch flat, front view display, best quality, ultra-high resolution 8k"; text = "a single item of sketch of " + translated + ", 4k, white background"; - if (!StringUtil.isNullOrEmpty(ageGroup) && ageGroup.equals("Child")){ + if (!StringUtil.isNullOrEmpty(ageGroup) && ageGroup.equals("Child")) { text = text + ", Children's clothing"; } // generate.setText(text); @@ -533,7 +533,7 @@ public class GenerateServiceImpl extends ServiceImpl i } CreditsEventsEnum creditsEventsEnum = CreditsEventsEnum.OTHER; - if (!StringUtil.isNullOrEmpty(generateThroughImageTextDTO.getModelName()) && generateThroughImageTextDTO.getModelName().equals("wx")){ + if (!StringUtil.isNullOrEmpty(generateThroughImageTextDTO.getModelName()) && generateThroughImageTextDTO.getModelName().equals("wx")) { String taskId = createAsyncTask(generateThroughImageTextDTO); // String taskId = "e53c86ea-53be-424b-8ac7-3c01c141f4f7"; creditsEventsEnum = CreditsEventsEnum.WX_TEXT2IMG; @@ -569,7 +569,7 @@ public class GenerateServiceImpl extends ServiceImpl i // 模型迁移SD1.? -> flux,从而产生了不同模型的选择, // high -> 生成图片质量高,但生成速度慢,每次生成只返回一张图片 // fast -> 生成图片质量低,但生成速度快,每次生成返回四张图片 - if (!StringUtil.isNullOrEmpty(generateThroughImageTextDTO.getModelName()) && generateThroughImageTextDTO.getModelName().equals("high")){ + if (!StringUtil.isNullOrEmpty(generateThroughImageTextDTO.getModelName()) && generateThroughImageTextDTO.getModelName().equals("high")) { creditsEventsEnum = CreditsEventsEnum.LOCAL_TEXT2IMG_HIGH; times = 1; } @@ -629,13 +629,13 @@ public class GenerateServiceImpl extends ServiceImpl i } } else if (generateThroughImageTextDTO.getLevel1Type().equals(MOOD_BOARD.getRealName())) { creditsEventsEnum = CreditsEventsEnum.MOOD_BOARD; - if (!StringUtil.isNullOrEmpty(generateThroughImageTextDTO.getModelName()) && generateThroughImageTextDTO.getModelName().equals("high")){ + if (!StringUtil.isNullOrEmpty(generateThroughImageTextDTO.getModelName()) && generateThroughImageTextDTO.getModelName().equals("high")) { creditsEventsEnum = CreditsEventsEnum.LOCAL_TEXT2IMG_HIGH; times = 1; } } else if (generateThroughImageTextDTO.getLevel1Type().equals(SKETCH_BOARD.getRealName())) { creditsEventsEnum = CreditsEventsEnum.SKETCH_BOARD; - if (!StringUtil.isNullOrEmpty(generateThroughImageTextDTO.getModelName()) && generateThroughImageTextDTO.getModelName().equals("high")){ + if (!StringUtil.isNullOrEmpty(generateThroughImageTextDTO.getModelName()) && generateThroughImageTextDTO.getModelName().equals("high")) { creditsEventsEnum = CreditsEventsEnum.LOCAL_TEXT2IMG_HIGH; times = 1; } @@ -651,7 +651,7 @@ public class GenerateServiceImpl extends ServiceImpl i String uuid = UUID.randomUUID().toString(); // 除了 Moodboard || Printboard->Pattern(可以区分三种风格) || Sketchboard(Generate Sketch)这三个地方需要区分high || fast之外,其他地方保持原样 - if (generateThroughImageTextDTO.getLevel1Type().equals("Printboard") && !generateThroughImageTextDTO.getLevel2Type().equals("Pattern")){ + if (generateThroughImageTextDTO.getLevel1Type().equals("Printboard") && !generateThroughImageTextDTO.getLevel2Type().equals("Pattern")) { generateThroughImageTextDTO.setModelName(null); } @@ -707,12 +707,12 @@ public class GenerateServiceImpl extends ServiceImpl i flag = false; } // 暂定万象每次生成1个 - if (type.equals("wx")){ + if (type.equals("wx")) { return Collections.singletonList(getAsyncTaskResult(taskId)); - } else if (type.equals("freepik")){ + } else if (type.equals("freepik")) { results.add(generateResultVO); continue; - } else if (type.equals("flux")){ + } else if (type.equals("flux")) { results.add(getFluxResultAndSave(taskId)); continue; } @@ -789,8 +789,8 @@ public class GenerateServiceImpl extends ServiceImpl i String path; if (type.equals("Logo")) { path = CommonConstant.GENERATE_LOGO_SINGLE_CANCEL; - } else if(type.equals("PoseTransformation")){ - path =CommonConstant.POSE_TRANSFORMATION_CANCEL; + } else if (type.equals("PoseTransformation")) { + path = CommonConstant.POSE_TRANSFORMATION_CANCEL; } else { path = CommonConstant.GENERATE_CANCEL; } @@ -894,7 +894,7 @@ public class GenerateServiceImpl extends ServiceImpl i // 检查积分是否够本次扣除 CreditsEventsEnum event = CreditsEventsEnum.IMAGE_TO_SKETCH; Boolean b = creditsService.checkCredits(accountId, event, 1); - if (!b){ + if (!b) { throw new BusinessException("remaining.credits.insufficient", ResultEnum.PROMPT.getCode()); } @@ -916,12 +916,12 @@ public class GenerateServiceImpl extends ServiceImpl i } private String requestSketchExtract(ImageToSketchDTO imageToSketchDTO, String collagePictureUrl, - Long accountId, String styleCode){ + Long accountId, String styleCode) { String imagePath; - if (StringUtil.isNullOrEmpty(collagePictureUrl)){ + if (StringUtil.isNullOrEmpty(collagePictureUrl)) { CollectionElement collectionElement = collectionElementService.getById(imageToSketchDTO.getElementId()); imagePath = collectionElement.getUrl(); - }else { + } else { imagePath = collagePictureUrl; } @@ -930,7 +930,7 @@ public class GenerateServiceImpl extends ServiceImpl i String objectName = accountId + "/imageToSketch/" + imageName; String styleImage; - if (!Objects.isNull(imageToSketchDTO.getStyleImageId())){ + if (!Objects.isNull(imageToSketchDTO.getStyleImageId())) { CollectionElement styleElement = collectionElementService.getById(imageToSketchDTO.getElementId()); styleImage = styleElement.getUrl(); } else { @@ -942,8 +942,8 @@ public class GenerateServiceImpl extends ServiceImpl i } private Generate saveExtractSketchRequest(ImageToSketchDTO imageToSketchDTO, String collagePictureUrl, - Long projectId, Long accountId, String styleCode, - String modelName, String taskId){ + Long projectId, Long accountId, String styleCode, + String modelName, String taskId) { // 存DB Generate generate = new Generate(); generate.setAccountId(accountId); @@ -963,12 +963,12 @@ public class GenerateServiceImpl extends ServiceImpl i return generate; } - public GenerateResultVO saveExtractSketchResult(Generate generate, String sketchPath, String gender){ + public GenerateResultVO saveExtractSketchResult(Generate generate, String sketchPath, String gender) { // 将生成结果存入DB GenerateDetail generateDetail = new GenerateDetail(); generateDetail.setGenerateId(generate.getId()); generateDetail.setUrl(sketchPath); - generateDetail.setIsLike((byte)0); + generateDetail.setIsLike((byte) 0); generateDetail.setMd5(MD5Utils.encryptFile(minioUtil.getPreSignedUrl(sketchPath, 24 * 60), Boolean.FALSE)); generateDetail.setCreateDate(LocalDateTime.now()); generateDetailMapper.insert(generateDetail); @@ -979,7 +979,7 @@ public class GenerateServiceImpl extends ServiceImpl i minioUtil.getPreSignedUrl(sketchPath, CommonConstant.MINIO_IMAGE_EXPIRE_TIME), "Success", clothCategory); } - public void doCreditsSubtract(Long accountId, CreditsEventsEnum event){ + public void doCreditsSubtract(Long accountId, CreditsEventsEnum event) { BigDecimal existingCredits = accountService.getById(accountId).getCredits(); BigDecimal subtract = existingCredits.subtract(new BigDecimal(event.getValue())); accountService.updateCreditsAndEndTime(accountId, subtract.toString(), null); @@ -1005,13 +1005,13 @@ public class GenerateServiceImpl extends ServiceImpl i // 生成唯一任务ID String taskId; if (!StringUtil.isNullOrEmpty(imageToSketchDTO.getModelName()) - && imageToSketchDTO.getModelName().equals("flux")){ + && imageToSketchDTO.getModelName().equals("flux")) { String imagePath; // todo 拼贴图的线稿提取是否能用flux - if (StringUtil.isNullOrEmpty(collagePictureUrl)){ + if (StringUtil.isNullOrEmpty(collagePictureUrl)) { CollectionElement collectionElement = collectionElementService.getById(imageToSketchDTO.getElementId()); imagePath = collectionElement.getUrl(); - }else { + } else { imagePath = collagePictureUrl; } taskId = flux(event, null, imagePath, false); @@ -1096,9 +1096,9 @@ public class GenerateServiceImpl extends ServiceImpl i String path; GenerateDetail originalDetail = generateDetailMapper.selectById(generateModifyDTO.getOriginalId()); Long generateDetailId = originalDetail.getId(); - if (generateModifyDTO.getIsOverride()){ + if (generateModifyDTO.getIsOverride()) { path = originalDetail.getUrl().replaceFirst("^[^/]+/", "").replaceFirst("\\.[^.]+$", ""); - }else { + } else { path = accountId + "/sketchboard/" + gender.toLowerCase() + "/" + category + "/" + UUID.randomUUID(); } @@ -1107,17 +1107,17 @@ public class GenerateServiceImpl extends ServiceImpl i log.info("修改后的图片 : {}", minioPath); // 存入db 保存到t_generate_detail - if (!generateModifyDTO.getIsOverride()){ + if (!generateModifyDTO.getIsOverride()) { GenerateDetail generateDetail = new GenerateDetail(); generateDetail.setGenerateId(originalDetail.getGenerateId()); generateDetail.setUrl(minioPath); - generateDetail.setIsLike((byte)0); + generateDetail.setIsLike((byte) 0); generateDetail.setMd5(MD5Utils.encryptFile(minioUtil.getPreSignedUrl(minioPath, CommonConstant.MINIO_IMAGE_EXPIRE_TIME, true), Boolean.FALSE)); generateDetail.setCreateDate(LocalDateTime.now()); generateDetailMapper.insert(generateDetail); generateDetailId = generateDetail.getId(); - }else { + } else { GenerateDetail generateDetail = new GenerateDetail(); generateDetail.setUrl(minioPath); generateDetail.setId(generateDetailId); @@ -1130,7 +1130,7 @@ public class GenerateServiceImpl extends ServiceImpl i @Resource private UserLikeGroupService userLikeGroupService; - public ToProductImageResultVO poseTransform(PoseTransformDTO poseTransformDTO){ + public ToProductImageResultVO poseTransform(PoseTransformDTO poseTransformDTO) { Long accountId = UserContext.getUserHolder().getId(); Long projectId = poseTransformDTO.getProjectId(); String productImage = poseTransformDTO.getProductImage(); @@ -1148,11 +1148,11 @@ public class GenerateServiceImpl extends ServiceImpl i String taskId; Boolean flag = false; PoseTransformation poseTransformation = new PoseTransformation(); - if (!StringUtil.isNullOrEmpty(poseTransformDTO.getModelName()) && poseTransformDTO.getModelName().equals("wx")){ + if (!StringUtil.isNullOrEmpty(poseTransformDTO.getModelName()) && poseTransformDTO.getModelName().equals("wx")) { taskId = animateAnyone(poseTransformDTO, accountId); if (!StringUtil.isNullOrEmpty(taskId)) flag = true; poseTransformation.setModelName("wx"); - }else { + } else { String uuid = UUID.randomUUID().toString(); taskId = uuid + "-" + accountId; flag = pythonService.poseTransformation(productImage, poseId, taskId); @@ -1163,22 +1163,22 @@ public class GenerateServiceImpl extends ServiceImpl i poseTransformation.setUniqueId(taskId); poseTransformation.setProductImage(productImage); poseTransformation.setPoseId(poseId); - poseTransformation.setIsLiked((byte)1); + poseTransformation.setIsLiked((byte) 1); poseTransformation.setCreateTime(LocalDateTime.now()); poseTransformationMapper.insert(poseTransformation); // 当需要默认like ToProductImageResultVO toProductImageResultVO = new ToProductImageResultVO(); - if (Objects.nonNull(poseTransformDTO.getIsDefaultLike()) && poseTransformDTO.getIsDefaultLike()){ + if (Objects.nonNull(poseTransformDTO.getIsDefaultLike()) && poseTransformDTO.getIsDefaultLike()) { // 满足条件下添加到like Integer sort = addPoseTransferLike(poseTransformDTO, poseTransformation.getId()); Integer reSort = userLikeGroupService.rearrangeChildSort(poseTransformation.getId(), CollectionType.POSE_TRANSFORM.getValue(), poseTransformDTO.getParentId(), poseTransformDTO.getUserLikeSortId()); toProductImageResultVO.setSort(Objects.isNull(reSort) ? sort : reSort); - }else if (Objects.nonNull(poseTransformDTO.getIsDefaultLike()) && Objects.nonNull(poseTransformDTO.getParentId())){ + } else if (Objects.nonNull(poseTransformDTO.getIsDefaultLike()) && Objects.nonNull(poseTransformDTO.getParentId())) { toProductImageResultVO.setParentId(poseTransformDTO.getParentId()); } - if (flag){ + if (flag) { // 6、添加预扣除积分到redis creditsService.addRecordToCreditsDeduction(accountId, taskId, creditsEventsEnum); // 6.1 添加积分扣除记录到db @@ -1191,9 +1191,9 @@ public class GenerateServiceImpl extends ServiceImpl i throw new BusinessException("pose transformation error", ResultEnum.ERROR.getCode()); } - private Integer addPoseTransferLike(PoseTransformDTO poseTransformDTO, Long poseTransformationId){ + private Integer addPoseTransferLike(PoseTransformDTO poseTransformDTO, Long poseTransformationId) { if (Objects.nonNull(poseTransformDTO.getParentId()) - && !poseTransformDTO.getParentId().equals(0L)){ + && !poseTransformDTO.getParentId().equals(0L)) { CollectionSort collectionSort = disOrLikePose(poseTransformationId, "like", poseTransformDTO.getProjectId(), poseTransformDTO.getParentId()); return collectionSort.getSort(); @@ -1208,16 +1208,16 @@ public class GenerateServiceImpl extends ServiceImpl i @Resource private DesignService designService; - public void processPoseTransformResult(String taskId, String gifUrl, String videoUrl, String imageUrl){ + public void processPoseTransformResult(String taskId, String gifUrl, String videoUrl, String imageUrl) { // 1、存储模型返回的数据 PoseTransformation poseTransformation; QueryWrapper qw = new QueryWrapper<>(); qw.eq("unique_id", taskId); List poseTransformations = poseTransformationMapper.selectList(qw); - if (poseTransformations != null && poseTransformations.size() > 1){ + if (poseTransformations != null && poseTransformations.size() > 1) { log.warn("通过taskId {} 查询到的PoseTransformation的结果不止一条", taskId); - }else if (poseTransformations == null || poseTransformations.isEmpty()){ - return ; + } else if (poseTransformations == null || poseTransformations.isEmpty()) { + return; } poseTransformation = poseTransformations.get(0); poseTransformation.setGifUrl(gifUrl); @@ -1240,18 +1240,17 @@ public class GenerateServiceImpl extends ServiceImpl i if (flag) creditsService.updateChangedCredits(accountId, taskId); } - public List getPoseTransformationResult(List taskIdList){ + public List getPoseTransformationResult(List taskIdList) { ArrayList poseTransformationVOS = new ArrayList<>(); - for (String taskId : taskIdList){ + for (String taskId : taskIdList) { String type = resolveModelType(taskId, CreditsEventsEnum.POSE_TRANSFORMATION.getValue()); - PoseTransformation poseTransformation = poseTransformationMapper.selectOne(new QueryWrapper().eq("unique_id", taskId)); String key = generateResultKey + ":" + taskId; String resultJson = redisUtil.getFromString(key); PoseTransformationVO poseTransformationVO; - if (!StringUtil.isNullOrEmpty(resultJson)){ + if (!StringUtil.isNullOrEmpty(resultJson)) { poseTransformationVO = new Gson().fromJson(redisUtil.getFromString(key), PoseTransformationVO.class); - if (poseTransformationVO.getStatus().equals("Success") && !type.equals("wx")){ + if (poseTransformationVO.getStatus().equals("Success") && !type.equals("wx")) { // 处理各种URL processUrl(poseTransformationVO.getGifUrl(), url -> poseTransformationVO.setGifUrl(minioUtil.getPreSignedUrl(url, CommonConstant.MINIO_IMAGE_EXPIRE_TIME))); @@ -1261,32 +1260,36 @@ public class GenerateServiceImpl extends ServiceImpl i poseTransformationVO.setFirstFrameUrl(minioUtil.getPreSignedUrl(url, CommonConstant.MINIO_IMAGE_EXPIRE_TIME))); } poseTransformationVO.setResultType(CollectionType.POSE_TRANSFORM.getValue()); - } else if(type.equals("wx")){ + } else if (type.equals("wx")) { poseTransformationVO = getAnimateResult(taskId); } else { poseTransformationVO = new PoseTransformationVO(taskId, "Executing"); } - ToProductImageResult productResultByPath = getProductResultByPath(poseTransformation.getProductImage()); - if (Objects.nonNull(productResultByPath)){ - Long parentId = userLikeGroupService.getParentIdByElementIdAndElementType(productResultByPath.getId(), CollectionType.TO_PRODUCT_IMAGE.getValue()); - poseTransformationVO.setParentId(parentId); + + PoseTransformation poseTransformation = poseTransformationMapper.selectOne(new QueryWrapper().eq("unique_id", taskId)); + if (Objects.nonNull(poseTransformation)) { + ToProductImageResult productResultByPath = getProductResultByPath(poseTransformation.getProductImage()); + if (Objects.nonNull(productResultByPath)) { + Long parentId = userLikeGroupService.getParentIdByElementIdAndElementType(productResultByPath.getId(), CollectionType.TO_PRODUCT_IMAGE.getValue()); + poseTransformationVO.setParentId(parentId); + } } poseTransformationVOS.add(poseTransformationVO); } return poseTransformationVOS; } - private ToProductImageResult getProductResultByPath(String minioPath){ + private ToProductImageResult getProductResultByPath(String minioPath) { QueryWrapper qw = new QueryWrapper<>(); qw.lambda().eq(ToProductImageResult::getUrl, minioPath); return toProductImageResultMapper.selectOne(qw); } - public List getPoseTransformationResultList(Long projectId, boolean like){ + public List getPoseTransformationResultList(Long projectId, boolean like) { List poseTransformations = poseTransformationMapper.selectList(new QueryWrapper().eq("project_id", projectId).eq("is_liked", like ? 1 : 0)); List vos = new ArrayList<>(); // if (poseTransformations != null && poseTransformations.size() > 1){ - if (!CollectionUtils.isEmpty(poseTransformations)){ + if (!CollectionUtils.isEmpty(poseTransformations)) { for (PoseTransformation item : poseTransformations) { String taskId = item.getUniqueId(); String key = generateResultKey + ":" + taskId; @@ -1322,7 +1325,7 @@ public class GenerateServiceImpl extends ServiceImpl i // 处理Redis中没有缓存的情况 poseTransformationVO = CopyUtil.copyObject(item, PoseTransformationVO.class); // todo 面对没有生成成功的情况 如何处理? - if (StringUtil.isNullOrEmpty(item.getVideoUrl())){ + if (StringUtil.isNullOrEmpty(item.getVideoUrl())) { continue; } poseTransformationVO.setTaskId(taskId); @@ -1351,17 +1354,17 @@ public class GenerateServiceImpl extends ServiceImpl i } } - public CollectionSort disOrLikePose(Long transformedId, String likeOrDislike, Long projectId, Long collectionSortParentId){ + public CollectionSort disOrLikePose(Long transformedId, String likeOrDislike, Long projectId, Long collectionSortParentId) { PoseTransformation poseTransformation = poseTransformationMapper.selectById(transformedId); CollectionSort collectionSort = null; - if (Objects.nonNull(poseTransformation)){ - if (likeOrDislike.equals("like")){ - poseTransformation.setIsLiked((byte)1); + if (Objects.nonNull(poseTransformation)) { + if (likeOrDislike.equals("like")) { + poseTransformation.setIsLiked((byte) 1); if (null != collectionSortParentId) { collectionSort = designService.addCollectionSort(poseTransformation.getId(), CollectionType.POSE_TRANSFORM.getValue(), projectId, collectionSortParentId); } - }else if (likeOrDislike.equals("dislike")){ - poseTransformation.setIsLiked((byte)0); + } else if (likeOrDislike.equals("dislike")) { + poseTransformation.setIsLiked((byte) 0); if (null != collectionSortParentId) { designService.deleteCollectionSort(poseTransformation.getId(), CollectionType.POSE_TRANSFORM.getValue(), projectId, collectionSortParentId); } @@ -1379,8 +1382,9 @@ public class GenerateServiceImpl extends ServiceImpl i private SysFileService sysFileService; @Resource - private LibraryModelPointService libraryModelPointService; - public String modifyModelProportion(ModifyModelProportionDTO proportionDTO){ + private LibraryModelPointService libraryModelPointService; + + public String modifyModelProportion(ModifyModelProportionDTO proportionDTO) { log.info("modifyModelProportion params: {}", proportionDTO); String name; String gender; @@ -1388,12 +1392,12 @@ public class GenerateServiceImpl extends ServiceImpl i Long accountId = UserContext.getUserHolder().getId(); String uuid = UUID.randomUUID().toString(); // 所有修改的图片都另存为,不覆盖原图 - if (proportionDTO.getType().equals("Library")){ + if (proportionDTO.getType().equals("Library")) { model = libraryService.getById(proportionDTO.getId()); String url = model.getUrl(); name = url.substring(url.indexOf("/") + 1, url.lastIndexOf("/")) + "/" + uuid; // gender = model.getLevel2Type(); - }else { + } else { SysFileVO sysModel = sysFileService.getById(proportionDTO.getId()); gender = sysModel.getLevel2Type(); name = accountId + "/models/" + gender.toLowerCase() + "/" + uuid; @@ -1434,10 +1438,11 @@ public class GenerateServiceImpl extends ServiceImpl i * String collagePicture(Base64) * List elements * File file + * * @return */ @Transactional(rollbackFor = Exception.class) - public GenerateResultVO sketchReconstructionGenerate(SketchReconstructionDTO sketchReconstructionDTO){ + public GenerateResultVO sketchReconstructionGenerate(SketchReconstructionDTO sketchReconstructionDTO) { // log.info("sketchReconstructionGenerate params: {}", sketchReconstructionDTO); Long accountId = UserContext.getUserHolder().getId(); @@ -1462,7 +1467,7 @@ public class GenerateServiceImpl extends ServiceImpl i String targetPath = url.substring(pathStartIndex + 1, queryStartIndex); try { - if (Objects.isNull(sketchReconstruction)){ + if (Objects.isNull(sketchReconstruction)) { sketchReconstruction = new SketchReconstruction(); sketchReconstruction.setProjectId(projectId); sketchReconstruction.setCollageImgSketchUrl(targetPath); @@ -1470,7 +1475,7 @@ public class GenerateServiceImpl extends ServiceImpl i sketchReconstruction.setGender(sketchReconstructionDTO.getGender()); sketchReconstruction.setCreateTime(LocalDateTime.now()); sketchReconstructionMapper.insert(sketchReconstruction); - }else { + } else { sketchReconstruction.setCollageImgSketchUrl(targetPath); sketchReconstruction.setGenerateDetailId(generateResultVO.getId()); sketchReconstructionMapper.updateById(sketchReconstruction); @@ -1488,19 +1493,19 @@ public class GenerateServiceImpl extends ServiceImpl i return generateResultVO; } - public SketchReconstructionVO getSketchReconstruction(Long projectId){ + public SketchReconstructionVO getSketchReconstruction(Long projectId) { QueryWrapper qw = new QueryWrapper<>(); qw.eq("project_id", projectId); SketchReconstruction sketchReconstruction = sketchReconstructionMapper.selectOne(qw); - if (Objects.isNull(sketchReconstruction)){ + if (Objects.isNull(sketchReconstruction)) { return null; } SketchReconstructionVO vo = new SketchReconstructionVO(); - if (Objects.nonNull(sketchReconstruction.getGenerateDetailId())){ + if (Objects.nonNull(sketchReconstruction.getGenerateDetailId())) { GenerateDetail generateDetail = generateDetailMapper.selectById(sketchReconstruction.getGenerateDetailId()); vo.setCollageSketchUrl(minioUtil.getPreSignedUrl(generateDetail.getUrl(), CommonConstant.MINIO_IMAGE_EXPIRE_TIME)); - vo.setLiked(generateDetail.getIsLike().equals((byte)1)); + vo.setLiked(generateDetail.getIsLike().equals((byte) 1)); String clothCategory = pythonService.getClothCategory(generateDetail.getUrl(), sketchReconstruction.getGender()); String messageFromResource = BusinessException.getMessageFromResource(clothCategory.toUpperCase()); vo.setCategory(clothCategory); @@ -1509,7 +1514,7 @@ public class GenerateServiceImpl extends ServiceImpl i return vo; } - public List> getAllPose(){ + public List> getAllPose() { List> propertyList = PoseEnum.getPropertyList(); propertyList.forEach(item -> { item.put("gif", minioUtil.getPreSignedUrl(item.get("gif"), CommonConstant.MINIO_IMAGE_EXPIRE_TIME)); @@ -1526,10 +1531,10 @@ public class GenerateServiceImpl extends ServiceImpl i QueryWrapper qw = new QueryWrapper<>(); qw.eq("unique_id", taskId); List poseTransformations = poseTransformationMapper.selectList(qw); - if (poseTransformations != null && poseTransformations.size() > 1){ + if (poseTransformations != null && poseTransformations.size() > 1) { log.warn("通过taskId {} 查询到的PoseTransformation的结果不止一条", taskId); - }else if (poseTransformations == null || poseTransformations.isEmpty()){ - return ; + } else if (poseTransformations == null || poseTransformations.isEmpty()) { + return; } poseTransformation = poseTransformations.get(0); poseTransformation.setGifUrl(gifUrl); @@ -1580,6 +1585,7 @@ public class GenerateServiceImpl extends ServiceImpl i /** * 创建异步任务 + * * @return taskId */ public String createAsyncTask(GenerateThroughImageTextDTO generateThroughImageTextDTO) { @@ -1590,7 +1596,7 @@ public class GenerateServiceImpl extends ServiceImpl i String gender = generateThroughImageTextDTO.getGender(); // 添加预设prompt,使生成结果更加具有指向性(区分不同的board) - switch(level1Type){ + switch (level1Type) { case "Moodboard": break; case "Printboard": @@ -1620,7 +1626,7 @@ public class GenerateServiceImpl extends ServiceImpl i ImageSynthesisResult result = null; try { result = imageSynthesis.asyncCall(param); - } catch (Exception e){ + } catch (Exception e) { throw new RuntimeException(e.getMessage()); } String taskId = result.getOutput().getTaskId(); @@ -1633,8 +1639,9 @@ public class GenerateServiceImpl extends ServiceImpl i /** * 获取异步任务结果 + * * @param taskId 任务id - * */ + */ public GenerateResultVO getAsyncTaskResult(String taskId) { ImageSynthesis imageSynthesis = new ImageSynthesis(); ImageSynthesisResult result = null; @@ -1645,12 +1652,12 @@ public class GenerateServiceImpl extends ServiceImpl i //PENDING:任务排队中; RUNNING:任务处理中; SUCCEEDED:任务执行成功; FAILED:任务执行失败; CANCELED:任务取消成功; UNKNOWN:任务不存在或状态未知 String taskStatus = result.getOutput().getTaskStatus(); - if (taskStatus.equals("SUCCEEDED")){ + if (taskStatus.equals("SUCCEEDED")) { List generates = selectListByUniqueId(taskId); String url = result.getOutput().getResults().get(0).get("url"); String path = null; - if (!generates.isEmpty()){ + if (!generates.isEmpty()) { Generate generate = generates.get(0); Long accountId = generate.getAccountId(); @@ -1665,7 +1672,7 @@ public class GenerateServiceImpl extends ServiceImpl i GenerateDetail generateDetail = new GenerateDetail(); generateDetail.setGenerateId(generate.getId()); generateDetail.setUrl(path); - generateDetail.setMd5(MD5Utils.encryptFile(minioUtil.getPreSignedUrl(path, 24 * 60),false)); + generateDetail.setMd5(MD5Utils.encryptFile(minioUtil.getPreSignedUrl(path, 24 * 60), false)); generateDetail.setCreateDate(LocalDateTime.now()); generateDetailMapper.insert(generateDetail); // 4、扣积分 @@ -1673,30 +1680,30 @@ public class GenerateServiceImpl extends ServiceImpl i if (flag) creditsService.updateChangedCredits(String.valueOf(generate.getAccountId()), taskId); GenerateResultVO generateResultVO = new GenerateResultVO(taskId, generateDetail.getId(), minioUtil.getPreSignedUrl(path, 24 * 60), "Success"); - if (generate.getLevel1Type().equals(SKETCH_BOARD.getRealName())){ + if (generate.getLevel1Type().equals(SKETCH_BOARD.getRealName())) { String gender = extractGender(generate.getGenerateType()); - if (!StringUtil.isNullOrEmpty(gender)){ + if (!StringUtil.isNullOrEmpty(gender)) { String clothCategory = pythonService.getClothCategory(path, gender); generateResultVO.setCategory(clothCategory); - }else { + } else { log.warn("未提取到性别"); } } return generateResultVO; - }else { + } else { throw new BusinessException("Unknown generate task"); } - } else if(taskStatus.equals("PENDING") || taskStatus.equals("RUNNING")){ + } else if (taskStatus.equals("PENDING") || taskStatus.equals("RUNNING")) { log.info("万象 异步接口返回生成状态为:{}", taskStatus); return new GenerateResultVO(taskId, null, null, "Executing"); } else { log.warn("万象 异步接口返回生成状态为:{}", taskStatus); return new GenerateResultVO(taskId, null, null, "Fail"); } - } catch (ApiException | NoApiKeyException e){ + } catch (ApiException | NoApiKeyException e) { throw new RuntimeException(e.getMessage()); - } catch (Exception e){ + } catch (Exception e) { log.error("从aliyun下载图片失败, {}", e.getMessage()); throw new BusinessException("Generation result retrieval failed"); } @@ -1706,7 +1713,8 @@ public class GenerateServiceImpl extends ServiceImpl i private static final String TEMPLATE_ID_GEN = "https://dashscope.aliyuncs.com/api/v1/services/aigc/image2video/aa-template-generation/"; private static final String GET_ASYNC_RESULT = "https://dashscope.aliyuncs.com/api/v1/tasks/"; private static final String ANIMATE = "https://dashscope.aliyuncs.com/api/v1/services/aigc/image2video/video-synthesis/"; - public String animateAnyone(PoseTransformDTO poseTransformDTO, Long accountId){ + + public String animateAnyone(PoseTransformDTO poseTransformDTO, Long accountId) { String inputImage = poseTransformDTO.getProductImage(); String inputImageUrl = minioUtil.getPreSignedUrl(inputImage, CommonConstant.MINIO_IMAGE_EXPIRE_TIME); // 1、输入图片检测 @@ -1714,7 +1722,7 @@ public class GenerateServiceImpl extends ServiceImpl i // 2、动作模板生成 String videoTemplateId = PoseEnum.getById(poseTransformDTO.getPoseId()).getTemplateId(); - if (StringUtil.isNullOrEmpty(videoTemplateId)){ + if (StringUtil.isNullOrEmpty(videoTemplateId)) { throw new BusinessException("unknown pose"); } // 3、生成动图 @@ -1738,7 +1746,7 @@ public class GenerateServiceImpl extends ServiceImpl i JSONObject jsonResponse = JSONUtil.parseObj(resp); JSONObject output = jsonResponse.getJSONObject("output"); String status = output.getStr("task_status"); - if (status.equals(STATUS_FAILED) || status.equals(STATUS_UNKNOWN)){ + if (status.equals(STATUS_FAILED) || status.equals(STATUS_UNKNOWN)) { return null; } String taskId = output.getStr("task_id"); @@ -1750,7 +1758,7 @@ public class GenerateServiceImpl extends ServiceImpl i return taskId; } - public void checkImage(String inputImageUrl){ + public void checkImage(String inputImageUrl) { JSONObject requestBody = new JSONObject(); requestBody.set("model", "animate-anyone-detect-gen2"); @@ -1769,7 +1777,7 @@ public class GenerateServiceImpl extends ServiceImpl i JSONObject output = jsonResponse.getJSONObject("output"); Boolean checkPass = output.getBool("check_pass"); - if (!checkPass){ + if (!checkPass) { String reason = output.getStr("reason"); log.info("原因: {}", reason); throw new BusinessException("输入的图片不满足要求"); @@ -1780,11 +1788,11 @@ public class GenerateServiceImpl extends ServiceImpl i private static final int MAX_RETRIES = 30; // 最大重试次数 private static final int POLL_INTERVAL = 20000; // 轮询间隔(毫秒) - public String getVideoTemplateId(String videoPath){ + public String getVideoTemplateId(String videoPath) { boolean contains = PoseEnum.getVideoList().contains(videoPath); String templateId; - if (!contains){ + if (!contains) { String videoUrl = minioUtil.getPreSignedUrl(videoPath, CommonConstant.MINIO_IMAGE_EXPIRE_TIME); JSONObject requestBody = new JSONObject(); requestBody.set("model", "animate-anyone-template-gen2"); @@ -1796,7 +1804,7 @@ public class GenerateServiceImpl extends ServiceImpl i log.info("获取pose的模板id 请求数据:{}", requestBody); String resp = sendRequestUtil.sendAliYunPostAsync(TEMPLATE_ID_GEN, requestBody.toString()); - if (StringUtil.isNullOrEmpty(resp)){ + if (StringUtil.isNullOrEmpty(resp)) { throw new BusinessException("请求获取video template id失败"); } JSONObject jsonResponse = JSONUtil.parseObj(resp); @@ -1806,7 +1814,7 @@ public class GenerateServiceImpl extends ServiceImpl i // 暂时用while循环轮询 templateId = pollTemplateIdResult(taskId); - if (StringUtil.isNullOrEmpty(templateId)){ + if (StringUtil.isNullOrEmpty(templateId)) { throw new BusinessException("获取动作模板失败"); } // templateId = "AACT.8090e67b.-E3pujumEfCbDTI_rjSH-A.LwIlGT3j"; @@ -1895,7 +1903,7 @@ public class GenerateServiceImpl extends ServiceImpl i if (output != null) { log.info("任务输出: {}", output.toStringPretty()); return output.getStr("template_id"); - }else { + } else { return null; } } @@ -1908,7 +1916,7 @@ public class GenerateServiceImpl extends ServiceImpl i } - public PoseTransformationVO getAnimateResult(String taskId){ + public PoseTransformationVO getAnimateResult(String taskId) { String fullUrl = GET_ASYNC_RESULT + taskId; String respBody = sendRequestUtil.sendAliYunGet(fullUrl); log.info("获取wx pose transform 的结果: {}", respBody); @@ -1923,24 +1931,28 @@ public class GenerateServiceImpl extends ServiceImpl i case STATUS_SUCCESS: poseTransformationVO.setStatus("Success"); List poseTransformations = poseTransformationMapper.selectList(new QueryWrapper().eq("unique_id", taskId).orderByDesc("id")); - if (!poseTransformations.isEmpty()){ + if (!poseTransformations.isEmpty()) { PoseTransformation poseTransformation = poseTransformations.get(0); // 生成视频的gif和第一帧图片 processVideo(videoUrl, poseTransformation); poseTransformationVO.setId(poseTransformation.getId()); - if (!StringUtil.isNullOrEmpty(poseTransformation.getGifUrl())){ + if (!StringUtil.isNullOrEmpty(poseTransformation.getGifUrl())) { poseTransformationVO.setGifUrl(minioUtil.getPreSignedUrl(poseTransformation.getGifUrl(), CommonConstant.MINIO_IMAGE_EXPIRE_TIME)); } - if (!StringUtil.isNullOrEmpty(poseTransformation.getVideoUrl())){ + if (!StringUtil.isNullOrEmpty(poseTransformation.getVideoUrl())) { poseTransformationVO.setVideoUrl(minioUtil.getPreSignedUrl(poseTransformation.getVideoUrl(), CommonConstant.MINIO_IMAGE_EXPIRE_TIME)); } - if (!StringUtil.isNullOrEmpty(poseTransformation.getFirstFrameUrl())){ + if (!StringUtil.isNullOrEmpty(poseTransformation.getFirstFrameUrl())) { poseTransformationVO.setFirstFrameUrl(minioUtil.getPreSignedUrl(poseTransformation.getFirstFrameUrl(), CommonConstant.MINIO_IMAGE_EXPIRE_TIME)); } // 执行积分扣除 Long accountId = poseTransformation.getAccountId(); Boolean flag = creditsService.taskCreditsDeduction(accountId, taskId); if (flag) creditsService.updateChangedCredits(String.valueOf(accountId), taskId); + + // 保存数据到redis + String key = generateResultKey + ":" + taskId; + redisUtil.addToString(key, new Gson().toJson(poseTransformationVO), CommonConstant.GENERATE_RESULT_EXPIRE_TIME); } break; case STATUS_FAILED: @@ -1958,9 +1970,6 @@ public class GenerateServiceImpl extends ServiceImpl i poseTransformationVO.setStatus("Fail"); } poseTransformationVO.setTaskId(taskId); - // 保存数据到redis - String key = generateResultKey + ":" + taskId; - redisUtil.addToString(key, new Gson().toJson(poseTransformationVO), CommonConstant.GENERATE_RESULT_EXPIRE_TIME); return poseTransformationVO; } @@ -2079,11 +2088,11 @@ public class GenerateServiceImpl extends ServiceImpl i requestBody.set("imagination", style); String resp = sendRequestUtil.sendFreepikPost(requestBody.toString()); - if (!StringUtil.isNullOrEmpty(resp)){ + if (!StringUtil.isNullOrEmpty(resp)) { JSONObject jsonResp = JSONUtil.parseObj(resp); - JSONObject data = JSONUtil.parseObj(jsonResp.get("data")); + JSONObject data = JSONUtil.parseObj(jsonResp.get("data")); String status = data.getStr("status"); - if (status.equals("COMPLETED")){ + if (status.equals("COMPLETED")) { // List generated = data.getBeanList("generated", String.class); log.info("freepik 调用结果:{}", jsonResp); return jsonResp.getStr("data"); @@ -2122,7 +2131,7 @@ public class GenerateServiceImpl extends ServiceImpl i requestBody.set("img", imagePath); // String description = sendRequestUtil.sendPost("http://localhost:8000/api/img2prompt", requestBody.toString()); String description = sendRequestUtil.sendPost("http://18.167.251.121:9994/api/img2prompt", requestBody.toString()); - if (StringUtil.isNullOrEmpty(description)){ + if (StringUtil.isNullOrEmpty(description)) { throw new BusinessException("从ollama获取图片描述失败"); } /*Object msg = JSONUtil.parseObj(resp).get("message"); @@ -2132,17 +2141,17 @@ public class GenerateServiceImpl extends ServiceImpl i return description; } - private String resolveModelType(String taskId, String func){ + private String resolveModelType(String taskId, String func) { // 判断当前task来自哪个模型 if (!StringUtil.isNullOrEmpty(func) - && func.equals(CreditsEventsEnum.POSE_TRANSFORMATION.getValue())){ + && func.equals(CreditsEventsEnum.POSE_TRANSFORMATION.getValue())) { List poseTransformations = poseTransformationMapper.selectList( new QueryWrapper().eq("unique_id", taskId)); if (!poseTransformations.isEmpty() && !StringUtil.isNullOrEmpty(poseTransformations.get(0).getModelName()) - && poseTransformations.get(0).getModelName().equals("wx")){ + && poseTransformations.get(0).getModelName().equals("wx")) { return "wx"; - }else { + } else { return "local"; } } @@ -2152,9 +2161,9 @@ public class GenerateServiceImpl extends ServiceImpl i !StringUtil.isNullOrEmpty(generate.getModelName()) && (generate.getModelName().equals("wx") || generate.getModelName().equals("freepik") - || generate.getModelName().equals("flux") )){ + || generate.getModelName().equals("flux"))) { return generate.getModelName(); - }else { + } else { return "local"; } } @@ -2172,15 +2181,16 @@ public class GenerateServiceImpl extends ServiceImpl i /** * 接入flux模型,用于imageToSketch(sketch extract) || relighting || to product image - * @param func 功能枚举名 - * @param prompt 用户输入 + * + * @param func 功能枚举名 + * @param prompt 用户输入 * @param imagePath 图片minio路径 * @return 返回taskId,用于异步获取结果 */ - public String flux(CreditsEventsEnum func, String prompt, String imagePath, boolean childStyle){ + public String flux(CreditsEventsEnum func, String prompt, String imagePath, boolean childStyle) { String fluxRequestUrl = "https://api.bfl.ai/v1/flux-kontext-pro"; - if (StringUtil.isNullOrEmpty(prompt)){ - switch (func){ + if (StringUtil.isNullOrEmpty(prompt)) { + switch (func) { case RELIGHT_FLUX: prompt = "a model standing on the beautiful beach, ultra high quality, 8k"; break; @@ -2201,13 +2211,13 @@ public class GenerateServiceImpl extends ServiceImpl i requestBody.set("output_format", "png"); log.info("flux 请求入参:{}", requestBody); - if (!StringUtil.isNullOrEmpty(imagePath)){ + if (!StringUtil.isNullOrEmpty(imagePath)) { try { String imageAsBase64 = null; - if (func.equals(TO_PRODUCT_IMAGE_FLUX)){ + if (func.equals(TO_PRODUCT_IMAGE_FLUX)) { imageAsBase64 = addWhiteBackground(imagePath); } - if (StringUtil.isNullOrEmpty(imageAsBase64)){ + if (StringUtil.isNullOrEmpty(imageAsBase64)) { imageAsBase64 = minioUtil.getImageAsBase64(imagePath); } requestBody.set("input_image", imageAsBase64); @@ -2222,7 +2232,7 @@ public class GenerateServiceImpl extends ServiceImpl i JSONObject respObj = JSONUtil.parseObj(resp); log.info("flux 发起生成请求返回结果: {}", respObj); String taskId = respObj.getStr("id"); - if (StringUtil.isNullOrEmpty(taskId)){ + if (StringUtil.isNullOrEmpty(taskId)) { return null; } @@ -2233,11 +2243,11 @@ public class GenerateServiceImpl extends ServiceImpl i return taskId; } - public String getFluxResult(String taskId, String objectName){ + public String getFluxResult(String taskId, String objectName) { String pollingUrl = redisUtil.getFromString(RedisUtil.FLUX_POLLING_URL + taskId); String fluxResultRequestUrl; HashMap params = new HashMap<>(); - if (StringUtil.isNullOrEmpty(pollingUrl)){ + if (StringUtil.isNullOrEmpty(pollingUrl)) { fluxResultRequestUrl = "https://api.bfl.ai/v1/get_result"; params.put("id", taskId); } else { @@ -2248,7 +2258,7 @@ public class GenerateServiceImpl extends ServiceImpl i log.info("获取flux生成的结果为:{}", resp); JSONObject respObj = JSONUtil.parseObj(resp); String status = respObj.getStr("status"); - switch (status){ + switch (status) { case "Task not found": return "Fail"; case "Pending": @@ -2271,17 +2281,17 @@ public class GenerateServiceImpl extends ServiceImpl i return null; } - private GenerateResultVO getFluxResultAndSave(String taskId){ + private GenerateResultVO getFluxResultAndSave(String taskId) { Generate generate = selectByUniqueId(taskId); - if (Objects.nonNull(generate)){ + if (Objects.nonNull(generate)) { GenerateDetail generateDetail = generateDetailMapper.selectOne(new QueryWrapper().eq("generate_id", generate.getId())); Long accountId = generate.getAccountId(); String objectName = accountId + "/imageToSketch/" + taskId + ".png"; String fluxResult = getFluxResult(taskId, objectName); - if (Objects.isNull(generateDetail)){ - if (StringUtil.isNullOrEmpty(fluxResult)){ + if (Objects.isNull(generateDetail)) { + if (StringUtil.isNullOrEmpty(fluxResult)) { return new GenerateResultVO(taskId, "Fail"); - }else if (fluxResult.equals("Fail") || fluxResult.equals("Pending")){ + } else if (fluxResult.equals("Fail") || fluxResult.equals("Pending")) { String status = fluxResult.equals("Fail") ? "Fail" : "Executing"; return new GenerateResultVO(taskId, status); } @@ -2293,7 +2303,7 @@ public class GenerateServiceImpl extends ServiceImpl i // 扣积分 Boolean flag = creditsService.taskCreditsDeduction(accountId, taskId); if (flag) creditsService.updateChangedCredits(String.valueOf(accountId), taskId); - } else if (StringUtil.isNullOrEmpty(generateDetail.getUrl())){ + } else if (StringUtil.isNullOrEmpty(generateDetail.getUrl())) { // 一般来说这条线应该走不到 generateDetail.setGenerateId(generate.getId()); generateDetail.setUrl(fluxResult); @@ -2306,19 +2316,19 @@ public class GenerateServiceImpl extends ServiceImpl i String clothCategory = pythonService.getClothCategory(url, extractGender(generate.getGenerateType())); return new GenerateResultVO(taskId, generateDetail.getId(), minioUtil.getPreSignedUrl(url, CommonConstant.MINIO_IMAGE_EXPIRE_TIME), "Success", clothCategory); - }else { + } else { throw new BusinessException("unknown generate"); } } - private String addWhiteBackground(String minioPath){ + private String addWhiteBackground(String minioPath) { // 1、先通过后缀判断输入图片类型有没有透明通道 String extension = minioPath.substring(minioPath.lastIndexOf(".") + 1); // 2、如果有,为其添加白色背景 - if (extension.equals("png")){ + if (extension.equals("png")) { return minioUtil.changeToWhiteBackground(minioPath); - }else { + } else { log.info("图片 {} 没有透明通道, 不用添加白底", minioPath); return null; } diff --git a/src/main/java/com/ai/da/service/impl/ProductImageServiceImpl.java b/src/main/java/com/ai/da/service/impl/ProductImageServiceImpl.java index d2ce1d15..be1e5c63 100644 --- a/src/main/java/com/ai/da/service/impl/ProductImageServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/ProductImageServiceImpl.java @@ -17,6 +17,8 @@ import com.ai.da.service.ProductImageService; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import io.netty.util.internal.StringUtil; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Async; @@ -29,6 +31,7 @@ import java.util.Set; import java.util.UUID; import java.util.stream.Collectors; +@Slf4j @Service public class ProductImageServiceImpl implements ProductImageService { @@ -87,17 +90,18 @@ public class ProductImageServiceImpl implements ProductImageService { category = obj.getString("category_male"); }*/ String imgUrl = obj.getString("img_url"); -// JSONObject attribute = obj.getJSONObject("attribute"); -// AttributeRecognitionJSON attrJSON = attribute.toJavaObject(AttributeRecognitionJSON.class); -// ProductImageAttribute attr = toAttrDict(attrJSON); - ProductImageAttribute attr = new ProductImageAttribute(); + JSONObject attribute = obj.getJSONObject("attribute"); + AttributeRecognitionJSON attrJSON = attribute.toJavaObject(AttributeRecognitionJSON.class); + ProductImageAttribute attr = toAttrDict(attrJSON); +// ProductImageAttribute attr = new ProductImageAttribute(); attr.setGender(gender); attr.setCategory(category); attr.setImgUrl(imgUrl); attr.setLibraryId(libraryId); String imageName = UUID.randomUUID().toString(); String objectName = userHolder.getId() + "/imageToSketch/" + imageName; - String sketchPath = pythonService.imageToSketch(imgUrl, userBucket, objectName, "2", ""); + String productImagePath = StringUtil.isNullOrEmpty(imgUrl) ? url : imgUrl; + String sketchPath = pythonService.imageToSketch(productImagePath, userBucket, objectName, "2", ""); attr.setImgUrl(sketchPath); productImageAttributeMapper.insert(attr); } @@ -110,7 +114,7 @@ public class ProductImageServiceImpl implements ProductImageService { } } catch (Exception e) { - System.out.println(e.getMessage()); + log.error(e.getMessage()); // log.error("初始化失败", e); redisUtil.setTaskProgressDTO(progressKey, new ProgressDTO(0, 0, true)); }