From 63c9ff36a150dd01b8cdbad909b118ab36c9a118 Mon Sep 17 00:00:00 2001 From: xupei Date: Tue, 25 Mar 2025 16:11:03 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=96=B0=E5=A2=9Elike\dislike=20pose=20tra?= =?UTF-8?q?nsformation=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ai/da/controller/GenerateController.java | 6 +++ .../primary/entity/PoseTransformation.java | 2 +- .../ai/da/model/vo/PoseTransformationVO.java | 2 +- .../com/ai/da/service/GenerateService.java | 4 ++ .../da/service/impl/GenerateServiceImpl.java | 38 +++++++++++++++---- 5 files changed, 43 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/ai/da/controller/GenerateController.java b/src/main/java/com/ai/da/controller/GenerateController.java index cb8723f0..e98c4465 100644 --- a/src/main/java/com/ai/da/controller/GenerateController.java +++ b/src/main/java/com/ai/da/controller/GenerateController.java @@ -110,6 +110,12 @@ public class GenerateController { return Response.success(generateResult); } + @ApiOperation("喜欢或取消喜欢姿势变换生成的图片") + @PostMapping("/likeOrDislike") + public Response likeOrDislike(@ApiParam("id") @RequestParam Long transformedId, @ApiParam("like || dislike") @RequestParam String likeOrDislike) { + return Response.success(generateService.disOrLikePose(transformedId, likeOrDislike)); + } + @ApiOperation(value = "修改模特比例") @PostMapping("/modifyProportion") public Response modifyModelProportion(@Valid @RequestBody ModifyModelProportionDTO proportionDTO){ diff --git a/src/main/java/com/ai/da/mapper/primary/entity/PoseTransformation.java b/src/main/java/com/ai/da/mapper/primary/entity/PoseTransformation.java index 55c95939..62a7dfb4 100644 --- a/src/main/java/com/ai/da/mapper/primary/entity/PoseTransformation.java +++ b/src/main/java/com/ai/da/mapper/primary/entity/PoseTransformation.java @@ -23,7 +23,7 @@ public class PoseTransformation extends BaseEntity { private String videoUrl; // GIF第一帧截图 - private String imageUrl; + private String firstFrameUrl; private byte isLiked; diff --git a/src/main/java/com/ai/da/model/vo/PoseTransformationVO.java b/src/main/java/com/ai/da/model/vo/PoseTransformationVO.java index fb7e57b5..55e39da1 100644 --- a/src/main/java/com/ai/da/model/vo/PoseTransformationVO.java +++ b/src/main/java/com/ai/da/model/vo/PoseTransformationVO.java @@ -17,7 +17,7 @@ public class PoseTransformationVO { private String videoUrl; // GIF第一帧截图 - private String imageUrl; + private String firstFrameUrl; private byte isLiked; diff --git a/src/main/java/com/ai/da/service/GenerateService.java b/src/main/java/com/ai/da/service/GenerateService.java index 597a79d1..656e6cec 100644 --- a/src/main/java/com/ai/da/service/GenerateService.java +++ b/src/main/java/com/ai/da/service/GenerateService.java @@ -52,6 +52,10 @@ public interface GenerateService extends IService { PoseTransformationVO getPoseTransformationResult(String taskId); + List getPoseTransformationResultList(String projectId); + + Boolean disOrLikePose(Long transformedId, String likeOrDislike); + String modifyModelProportion(ModifyModelProportionDTO proportionDTO); GenerateResultVO sketchReconstructionGenerate(SketchReconstructionDTO sketchReconstructionDTO); 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 1766dc05..e98caf63 100644 --- a/src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java @@ -14,8 +14,6 @@ import com.ai.da.model.vo.*; import com.ai.da.python.PythonService; import com.ai.da.service.*; import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.serializer.SerializerFeature; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException; @@ -28,17 +26,14 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.io.IOException; -import java.io.InputStream; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.*; import static com.ai.da.common.enums.CollectionLevel1TypeEnum.*; -import static com.ai.da.service.impl.UserLikeGroupServiceImpl.convert; @Slf4j @Service @@ -988,7 +983,7 @@ public class GenerateServiceImpl extends ServiceImpl i poseTransformation = poseTransformations.get(0); poseTransformation.setGifUrl(gifUrl); poseTransformation.setVideoUrl(videoUrl); - poseTransformation.setImageUrl(imageUrl); + poseTransformation.setFirstFrameUrl(imageUrl); poseTransformation.setUpdateTime(LocalDateTime.now()); poseTransformationMapper.updateById(poseTransformation); @@ -1015,7 +1010,7 @@ public class GenerateServiceImpl extends ServiceImpl i if (poseTransformationVO.getStatus().equals("Success")){ poseTransformationVO.setGifUrl(minioUtil.getPreSignedUrl(poseTransformationVO.getGifUrl(), CommonConstant.MINIO_IMAGE_EXPIRE_TIME)); poseTransformationVO.setVideoUrl(minioUtil.getPreSignedUrl(poseTransformationVO.getVideoUrl(), CommonConstant.MINIO_IMAGE_EXPIRE_TIME)); - poseTransformationVO.setImageUrl(minioUtil.getPreSignedUrl(poseTransformationVO.getImageUrl(), CommonConstant.MINIO_IMAGE_EXPIRE_TIME)); + poseTransformationVO.setFirstFrameUrl(minioUtil.getPreSignedUrl(poseTransformationVO.getFirstFrameUrl(), CommonConstant.MINIO_IMAGE_EXPIRE_TIME)); } return poseTransformationVO; }else { @@ -1023,6 +1018,35 @@ public class GenerateServiceImpl extends ServiceImpl i } } + public List getPoseTransformationResultList(String projectId){ + List poseTransformations = poseTransformationMapper.selectList(new QueryWrapper().eq("project_id", projectId).eq("is_liked", 1)); + List vos = new ArrayList<>(); + if (poseTransformations != null && poseTransformations.size() > 1){ + poseTransformations.forEach(item -> { + PoseTransformationVO poseTransformationVO = CopyUtil.copyObject(item, PoseTransformationVO.class); + poseTransformationVO.setId(item.getId()); + vos.add(poseTransformationVO); + }); + } + return vos; + } + + public Boolean disOrLikePose(Long transformedId, String likeOrDislike){ + PoseTransformation poseTransformation = poseTransformationMapper.selectById(transformedId); + if (Objects.nonNull(poseTransformation)){ + if (likeOrDislike.equals("like")){ + poseTransformation.setIsLiked((byte)1); + }else if (likeOrDislike.equals("dislike")){ + poseTransformation.setIsLiked((byte)0); + } + poseTransformation.setUpdateTime(LocalDateTime.now()); + poseTransformationMapper.updateById(poseTransformation); + }else { + return false; + } + return true; + } + @Resource private SysFileService sysFileService; From 67225c1a9633e61c783560f8e205916e0e4a2721 Mon Sep 17 00:00:00 2001 From: xupei Date: Tue, 25 Mar 2025 16:20:00 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E4=BB=8E=E7=BB=9F=E4=B8=80=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E8=8E=B7=E5=8F=96pose=20transformation=E7=9A=84?= =?UTF-8?q?=E7=94=9F=E6=88=90=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/ai/da/model/vo/ModuleChooseVO.java | 2 +- .../com/ai/da/model/vo/PoseTransformationVO.java | 12 ++++++++++++ src/main/java/com/ai/da/service/GenerateService.java | 2 +- .../com/ai/da/service/impl/GenerateServiceImpl.java | 9 +++++++-- .../ai/da/service/impl/UserLikeGroupServiceImpl.java | 3 +++ 5 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/ai/da/model/vo/ModuleChooseVO.java b/src/main/java/com/ai/da/model/vo/ModuleChooseVO.java index 071cf62b..3cf15c4a 100644 --- a/src/main/java/com/ai/da/model/vo/ModuleChooseVO.java +++ b/src/main/java/com/ai/da/model/vo/ModuleChooseVO.java @@ -30,7 +30,7 @@ public class ModuleChooseVO { private CavasModuleChooseVO canvas; private List boundingBox; -// private moodBoardModuleChooseVO poseTransfer; + private List poseTransfer; // private moodBoardModuleChooseVO patternMaking3D; private SketchReconstructionVO deReconstruction; } diff --git a/src/main/java/com/ai/da/model/vo/PoseTransformationVO.java b/src/main/java/com/ai/da/model/vo/PoseTransformationVO.java index 55e39da1..e7349e32 100644 --- a/src/main/java/com/ai/da/model/vo/PoseTransformationVO.java +++ b/src/main/java/com/ai/da/model/vo/PoseTransformationVO.java @@ -13,6 +13,8 @@ public class PoseTransformationVO { private String taskId; + private String productImage; + private String gifUrl; private String videoUrl; @@ -22,4 +24,14 @@ public class PoseTransformationVO { private byte isLiked; private String status; + + public PoseTransformationVO(Long id, String taskId, String gifUrl, String videoUrl, String firstFrameUrl, byte isLiked, String status) { + this.id = id; + this.taskId = taskId; + this.gifUrl = gifUrl; + this.videoUrl = videoUrl; + this.firstFrameUrl = firstFrameUrl; + this.isLiked = isLiked; + this.status = status; + } } diff --git a/src/main/java/com/ai/da/service/GenerateService.java b/src/main/java/com/ai/da/service/GenerateService.java index 656e6cec..445a8eb7 100644 --- a/src/main/java/com/ai/da/service/GenerateService.java +++ b/src/main/java/com/ai/da/service/GenerateService.java @@ -52,7 +52,7 @@ public interface GenerateService extends IService { PoseTransformationVO getPoseTransformationResult(String taskId); - List getPoseTransformationResultList(String projectId); + List getPoseTransformationResultList(Long projectId); Boolean disOrLikePose(Long transformedId, String likeOrDislike); 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 e98caf63..07a01e11 100644 --- a/src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java @@ -1018,13 +1018,18 @@ public class GenerateServiceImpl extends ServiceImpl i } } - public List getPoseTransformationResultList(String projectId){ + public List getPoseTransformationResultList(Long projectId){ List poseTransformations = poseTransformationMapper.selectList(new QueryWrapper().eq("project_id", projectId).eq("is_liked", 1)); List vos = new ArrayList<>(); if (poseTransformations != null && poseTransformations.size() > 1){ poseTransformations.forEach(item -> { - PoseTransformationVO poseTransformationVO = CopyUtil.copyObject(item, PoseTransformationVO.class); + PoseTransformationVO poseTransformationVO = new PoseTransformationVO(); poseTransformationVO.setId(item.getId()); + poseTransformationVO.setProductImage(minioUtil.getPreSignedUrl(item.getProductImage(), CommonConstant.MINIO_IMAGE_EXPIRE_TIME)); + poseTransformationVO.setGifUrl(minioUtil.getPreSignedUrl(item.getGifUrl(), CommonConstant.MINIO_IMAGE_EXPIRE_TIME)); + poseTransformationVO.setVideoUrl(minioUtil.getPreSignedUrl(item.getVideoUrl(), CommonConstant.MINIO_IMAGE_EXPIRE_TIME)); + poseTransformationVO.setFirstFrameUrl(minioUtil.getPreSignedUrl(item.getFirstFrameUrl(), CommonConstant.MINIO_IMAGE_EXPIRE_TIME)); + poseTransformationVO.setIsLiked(item.getIsLiked()); vos.add(poseTransformationVO); }); } diff --git a/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java b/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java index 039aeaf2..21b36dad 100644 --- a/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java @@ -1549,6 +1549,9 @@ public class UserLikeGroupServiceImpl extends ServiceImpl poseTransformationResultList = generateService.getPoseTransformationResultList(projectDTO.getId()); + moduleChooseVO.setPoseTransfer(poseTransformationResultList); } } return moduleChooseVO; From a4365abd4d6ad0268ce3f34a319cde4e534907dc Mon Sep 17 00:00:00 2001 From: xupei Date: Tue, 25 Mar 2025 17:37:35 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E6=A8=A1=E7=89=B9=E6=AF=94=E4=BE=8B?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8F=82=E6=95=B0=E5=8F=98=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/ai/da/python/PythonService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/ai/da/python/PythonService.java b/src/main/java/com/ai/da/python/PythonService.java index 3e050c7f..fb62429a 100644 --- a/src/main/java/com/ai/da/python/PythonService.java +++ b/src/main/java/com/ai/da/python/PythonService.java @@ -4074,7 +4074,7 @@ public class PythonService { } } - public String modifyModelProportion(String mannequinPath, Float scale, String name, int top, int bottom) { + public String modifyModelProportion(String mannequinPath, Float stretch, String name, int top, int bottom) { OkHttpClient client = new OkHttpClient().newBuilder() .connectTimeout(30, TimeUnit.SECONDS) .pingInterval(5, TimeUnit.SECONDS)//websocket轮训间隔(单位:秒) @@ -4087,7 +4087,7 @@ public class PythonService { // 模特的minio地址 content.put("mannequins", mannequinPath); // 缩放比 - content.put("scale", scale.toString()); + content.put("resize_pixel", stretch.toString()); // 结果存放桶名 content.put("bucket_name", "aida-users"); // 模特名uuid From 20b15c0b788ab1f7bfbdf03084bfb9103056ca28 Mon Sep 17 00:00:00 2001 From: xupei Date: Wed, 26 Mar 2025 13:39:39 +0800 Subject: [PATCH 4/4] =?UTF-8?q?sketch=E6=8B=BC=E8=B4=B4=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E8=BF=94=E5=9B=9E=E6=9C=8D=E8=A3=85=E5=88=86=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ai/da/mapper/primary/entity/SketchReconstruction.java | 2 ++ src/main/java/com/ai/da/model/vo/SketchReconstructionVO.java | 4 ++++ .../java/com/ai/da/service/impl/GenerateServiceImpl.java | 5 +++++ 3 files changed, 11 insertions(+) diff --git a/src/main/java/com/ai/da/mapper/primary/entity/SketchReconstruction.java b/src/main/java/com/ai/da/mapper/primary/entity/SketchReconstruction.java index d4b124a1..49f8ec1e 100644 --- a/src/main/java/com/ai/da/mapper/primary/entity/SketchReconstruction.java +++ b/src/main/java/com/ai/da/mapper/primary/entity/SketchReconstruction.java @@ -15,4 +15,6 @@ public class SketchReconstruction extends BaseEntity{ private Long generateDetailId; + private String gender; + } diff --git a/src/main/java/com/ai/da/model/vo/SketchReconstructionVO.java b/src/main/java/com/ai/da/model/vo/SketchReconstructionVO.java index 43c13acb..9493e05f 100644 --- a/src/main/java/com/ai/da/model/vo/SketchReconstructionVO.java +++ b/src/main/java/com/ai/da/model/vo/SketchReconstructionVO.java @@ -10,4 +10,8 @@ public class SketchReconstructionVO { private boolean isLiked; + private String category; + + private String categoryValue; + } 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 07a01e11..0969b9bb 100644 --- a/src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java @@ -1141,6 +1141,7 @@ public class GenerateServiceImpl extends ServiceImpl i sketchReconstruction.setProjectId(projectId); sketchReconstruction.setCollageImgSketchUrl(targetPath); sketchReconstruction.setGenerateDetailId(generateResultVO.getId()); + sketchReconstruction.setGender(sketchReconstructionDTO.getGender()); sketchReconstruction.setCreateTime(LocalDateTime.now()); sketchReconstructionMapper.insert(sketchReconstruction); }else { @@ -1165,6 +1166,10 @@ public class GenerateServiceImpl extends ServiceImpl i GenerateDetail generateDetail = generateDetailMapper.selectById(sketchReconstruction.getGenerateDetailId()); vo.setCollageSketchUrl(minioUtil.getPreSignedUrl(generateDetail.getUrl(), CommonConstant.MINIO_IMAGE_EXPIRE_TIME)); vo.setLiked(generateDetail.getIsLike().equals((byte)1)); + String clothCategory = pythonService.getClothCategory(generateDetail.getUrl(), sketchReconstruction.getGender()); + String messageFromResource = BusinessException.getMessageFromResource(clothCategory.toUpperCase()); + vo.setCategory(clothCategory); + vo.setCategoryValue(messageFromResource); } return vo; }