diff --git a/api-web/api-interface/src/main/java/com/heyu/api/controller/face/DeepfakeFaceController.java b/api-web/api-interface/src/main/java/com/heyu/api/controller/face/DeepfakeFaceController.java index 9d4bac3..de46207 100644 --- a/api-web/api-interface/src/main/java/com/heyu/api/controller/face/DeepfakeFaceController.java +++ b/api-web/api-interface/src/main/java/com/heyu/api/controller/face/DeepfakeFaceController.java @@ -4,12 +4,14 @@ package com.heyu.api.controller.face; import com.aliyun.facebody20191230.models.DeepfakeFaceResponse; import com.aliyun.facebody20191230.models.DeepfakeFaceResponseBody; import com.heyu.api.alibaba.handle.facebody.ADeepfakeFaceHandle; +import com.heyu.api.alibaba.request.ACommonTextRequest; import com.heyu.api.alibaba.request.facebody.ADeepfakeFaceRequest; import com.heyu.api.controller.BaseController; import com.heyu.api.data.annotation.CacheResult; import com.heyu.api.data.annotation.NotIntercept; import com.heyu.api.data.utils.ApiR; import com.heyu.api.data.utils.R; +import com.heyu.api.request.CommonReq; import com.heyu.api.request.face.DeepfakeFaceReq; import com.heyu.api.resp.face.DeepfakeFaceListResp; import com.heyu.api.resp.face.DeepfakeFaceResp; @@ -66,8 +68,23 @@ public class DeepfakeFaceController extends BaseController { @RequestMapping("/deepfake") @CacheResult public R deepfake(DeepfakeFaceReq req) { + ADeepfakeFaceRequest aDeepfakeFaceRequest = new ADeepfakeFaceRequest(); + List urls = new ArrayList<>(); + + + for (CommonReq image : req.getImages()) { + ACommonTextRequest textRequest = new ACommonTextRequest(); + textRequest.setImageBase64(image.getImageBase64()); + textRequest.setImageUrl(image.getImageUrl()); + urls.add(textRequest); + + } + aDeepfakeFaceRequest.setUrls(urls); + + + List faces = new ArrayList<>(); ApiR aR = aDeepfakeFaceHandle.handle(aDeepfakeFaceRequest); diff --git a/api-web/api-interface/src/main/java/com/heyu/api/controller/face/FaceTidyupController.java b/api-web/api-interface/src/main/java/com/heyu/api/controller/face/FaceTidyupController.java index bfd158b..75f1f48 100644 --- a/api-web/api-interface/src/main/java/com/heyu/api/controller/face/FaceTidyupController.java +++ b/api-web/api-interface/src/main/java/com/heyu/api/controller/face/FaceTidyupController.java @@ -50,10 +50,7 @@ public class FaceTidyupController extends BaseController { @RequestMapping("/tidyup") @CacheResult public R tidyup(FaceTidyupReq req) { - FaceTidyupResp faceTidyupResp = new FaceTidyupResp(); - - AFaceTidyupRequest faceTidyupRequest = new AFaceTidyupRequest(); faceTidyupRequest.setImageUrl(req.getImageUrl()); faceTidyupRequest.setImageBase64(req.getImageBase64()); diff --git a/api-web/api-interface/src/main/java/com/heyu/api/controller/face/GenerateHumanAnimeStyleController.java b/api-web/api-interface/src/main/java/com/heyu/api/controller/face/GenerateHumanAnimeStyleController.java new file mode 100644 index 0000000..7ea9fdf --- /dev/null +++ b/api-web/api-interface/src/main/java/com/heyu/api/controller/face/GenerateHumanAnimeStyleController.java @@ -0,0 +1,65 @@ +package com.heyu.api.controller.face; + + +import com.aliyun.facebody20191230.models.GenerateHumanAnimeStyleResponse; +import com.aliyun.facebody20191230.models.GenerateHumanAnimeStyleResponseBody; +import com.heyu.api.alibaba.handle.facebody.AGenerateHumanAnimeStyleHandle; +import com.heyu.api.alibaba.request.facebody.AGenerateHumanAnimeStyleRequest; +import com.heyu.api.controller.BaseController; +import com.heyu.api.data.annotation.CacheResult; +import com.heyu.api.data.annotation.NotIntercept; +import com.heyu.api.data.utils.ApiR; +import com.heyu.api.data.utils.R; +import com.heyu.api.resp.face.GenerateHumanAnimeStyleResp; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/*** + * https://next.api.aliyun.com/api/facebody/2019-12-30/GenerateHumanAnimeStyle?RegionId=cn-shanghai&tab=DOC&lang=JAVA + * + * 人物动漫化 + * + * GenerateHumanAnimeStyle + * + * 人物动漫化能力可以将一张人物图像进行转换处理,生成卡通形象,并返回动漫化后的结果图像。 + * + * 支持风格:国画(NEW)、港漫(NEW)、漫画风(NEW)、动画 3D(NEW)、日漫、3D、手绘、铅笔画和艺术特效 9 个风格。 + * 多人照片:可转换多人照片,一次可处理图片中最多 5 个人脸。 + * + * + * + * 应用场景 + * 保护隐私:为保护图像中的人物隐私,将人物卡通化,可避免识别出原人物是谁。保留社交趣味度的同时避免过度娱乐化。 + * 社交娱乐:将自己的照片变成卡通人物,塑造可爱氛围,配上图文分享给朋友。 + * 特效应用:可用于打造个性头像以及趣味活动等场景。 + * + * + * + */ +@Slf4j +@RestController +@RequestMapping("/human") +@NotIntercept +public class GenerateHumanAnimeStyleController extends BaseController { + + + @Autowired + private AGenerateHumanAnimeStyleHandle aGenerateHumanAnimeStyleHandle; + + + @RequestMapping("/animeStyle") + @CacheResult + public R animeStyle(AGenerateHumanAnimeStyleRequest req) { + GenerateHumanAnimeStyleResp resp = new GenerateHumanAnimeStyleResp(); + ApiR aR = aGenerateHumanAnimeStyleHandle.handle(req); + if (aR.isSuccess() && isSuccessStatusCode(aR.getData().getStatusCode())) { + GenerateHumanAnimeStyleResponseBody.GenerateHumanAnimeStyleResponseBodyData responseBodyData = aR.getData().getBody().getData(); + resp.setImageURL(responseBodyData.getImageURL()); + return R.ok().setData(resp); + } + return R.error(aR.getErrorMsg()); + } + +} diff --git a/api-web/api-interface/src/main/java/com/heyu/api/controller/face/LiquifyFaceController.java b/api-web/api-interface/src/main/java/com/heyu/api/controller/face/LiquifyFaceController.java new file mode 100644 index 0000000..889a0aa --- /dev/null +++ b/api-web/api-interface/src/main/java/com/heyu/api/controller/face/LiquifyFaceController.java @@ -0,0 +1,56 @@ +package com.heyu.api.controller.face; + + +import com.aliyun.facebody20191230.models.LiquifyFaceRequest; +import com.aliyun.facebody20191230.models.LiquifyFaceResponse; +import com.aliyun.facebody20191230.models.LiquifyFaceResponseBody; +import com.heyu.api.alibaba.handle.facebody.ALiquifyFaceHandle; +import com.heyu.api.alibaba.request.facebody.ALiquifyFaceRequest; +import com.heyu.api.controller.BaseController; +import com.heyu.api.data.annotation.CacheResult; +import com.heyu.api.data.annotation.NotIntercept; +import com.heyu.api.data.utils.ApiR; +import com.heyu.api.data.utils.R; +import com.heyu.api.request.face.LiquifyFaceReq; +import com.heyu.api.resp.face.LiquifyFaceResp; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Slf4j +@RestController +@RequestMapping("/face") +@NotIntercept +public class LiquifyFaceController extends BaseController { + + @Autowired + private ALiquifyFaceHandle aLiquifyFaceHandle; + + + @RequestMapping("/liquify") + @CacheResult + public R liquify(LiquifyFaceReq req) { + + LiquifyFaceResp resp = new LiquifyFaceResp(); + ALiquifyFaceRequest request = new ALiquifyFaceRequest(); + + request.setSlimDegree(req.getSlimDegree()); + request.setImageBase64(req.getImageBase64()); + request.setImageUrl(req.getImageUrl()); + + + ApiR aR = aLiquifyFaceHandle.handle(request); + + + if (aR.isSuccess() && isSuccessStatusCode(aR.getData().getStatusCode())) { + LiquifyFaceResponseBody.LiquifyFaceResponseBodyData responseBodyData = aR.getData().getBody().getData(); + + resp.setImageURL(responseBodyData.getImageURL()); + return R.ok().setData(resp); + } + return R.error(aR.getErrorMsg()); + } + + +} diff --git a/api-web/api-interface/src/main/java/com/heyu/api/controller/face/MonitorExaminationScreenController.java b/api-web/api-interface/src/main/java/com/heyu/api/controller/face/MonitorExaminationScreenController.java new file mode 100644 index 0000000..c0de307 --- /dev/null +++ b/api-web/api-interface/src/main/java/com/heyu/api/controller/face/MonitorExaminationScreenController.java @@ -0,0 +1,72 @@ +package com.heyu.api.controller.face; + + +import com.aliyun.facebody20191230.models.MonitorExaminationResponse; +import com.aliyun.facebody20191230.models.MonitorExaminationResponseBody; +import com.heyu.api.alibaba.handle.facebody.AMonitorExaminationHandle; +import com.heyu.api.alibaba.request.facebody.AMonitorExaminationRequest; +import com.heyu.api.controller.BaseController; +import com.heyu.api.data.annotation.NotIntercept; +import com.heyu.api.data.utils.ApiR; +import com.heyu.api.data.utils.R; +import com.heyu.api.request.face.MonitorExaminationScreenReq; +import com.heyu.api.resp.face.MonitorExaminationScreenResp; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/*** + * https://next.api.aliyun.com/api/facebody/2019-12-30/MonitorExamination?tab=DOC¶ms={%22ImageURL%22:%22http%3A%2F%2Fworkbench-file-transfer.oss-cn-shanghai.aliyuncs.com%2Fuser-files%2F84753ea9-9809-4348-ac27-71437b89fee9-WechatIMG29.jpg%3FOSSAccessKeyId%3DLTAI5tRvL6vYdjKSfTFZ156m%26Expires%3D1742056256%26Signature%3Dl%252B1vglgYe%252BIN3wHE4Eror6e5tj4%253D%26response-content-disposition%3Dattachment%22,%22Type%22:1}&lang=JAVA + *线上监考 + * + * MonitorExamination + * + * 监控屏幕 + * + */ + + +@Slf4j +@RestController +@RequestMapping("/monitor") +@NotIntercept +public class MonitorExaminationScreenController extends BaseController { + + + @Autowired + private AMonitorExaminationHandle aMonitorExaminationHandle; + + @RequestMapping("/screen") + public R screen(MonitorExaminationScreenReq req) { + + + MonitorExaminationScreenResp monitorExaminationScreenResp = new MonitorExaminationScreenResp(); + + AMonitorExaminationRequest aMonitorExaminationRequest = new AMonitorExaminationRequest(); + aMonitorExaminationRequest.setImageUrl(req.getImageUrl()); + aMonitorExaminationRequest.setImageBase64(req.getImageBase64()); + // 0:屏幕聊天工具检测 + aMonitorExaminationRequest.setType(0L); + ApiR aR = aMonitorExaminationHandle.handle(aMonitorExaminationRequest); + if (aR.isSuccess() && isSuccessStatusCode(aR.getData().getStatusCode())) { + /*** + * + { + "RequestId": "A104C55A-BA6A-5FB6-B841-8DB5C11D2EA4", + "Data": { + "ChatScore": 1, + "Threshold": 0.5 + } + } + */ + MonitorExaminationResponseBody.MonitorExaminationResponseBodyData responseBodyData = aR.getData().getBody().getData(); + monitorExaminationScreenResp.setChatScore(responseBodyData.getChatScore()); + monitorExaminationScreenResp.setThreshold(responseBodyData.getThreshold()); + return R.error().setData(monitorExaminationScreenResp); + } + return R.error(); + } + + +} diff --git a/api-web/api-interface/src/main/java/com/heyu/api/request/face/GenerateHumanAnimeStyleReq.java b/api-web/api-interface/src/main/java/com/heyu/api/request/face/GenerateHumanAnimeStyleReq.java new file mode 100644 index 0000000..0d40c89 --- /dev/null +++ b/api-web/api-interface/src/main/java/com/heyu/api/request/face/GenerateHumanAnimeStyleReq.java @@ -0,0 +1,17 @@ +package com.heyu.api.request.face; + + +import lombok.Data; + +/*** + * + */ + + +@Data +public class GenerateHumanAnimeStyleReq { + + + + +} diff --git a/api-web/api-interface/src/main/java/com/heyu/api/request/face/HandPostureReq.java b/api-web/api-interface/src/main/java/com/heyu/api/request/face/HandPostureReq.java new file mode 100644 index 0000000..3789bc8 --- /dev/null +++ b/api-web/api-interface/src/main/java/com/heyu/api/request/face/HandPostureReq.java @@ -0,0 +1,12 @@ +package com.heyu.api.request.face; + +import com.heyu.api.data.dto.BaseReq; +import lombok.Data; + + +@Data +public class HandPostureReq extends BaseReq { + + + +} diff --git a/api-web/api-interface/src/main/java/com/heyu/api/request/face/LiquifyFaceReq.java b/api-web/api-interface/src/main/java/com/heyu/api/request/face/LiquifyFaceReq.java new file mode 100644 index 0000000..692f159 --- /dev/null +++ b/api-web/api-interface/src/main/java/com/heyu/api/request/face/LiquifyFaceReq.java @@ -0,0 +1,24 @@ +package com.heyu.api.request.face; + + +import com.heyu.api.data.dto.BaseReq; +import com.heyu.api.request.CommonReq; +import lombok.Data; + +@Data +public class LiquifyFaceReq extends CommonReq { + + + + + /** + * 标准力度。取值范围为[0,2.0],默认为 1.0。数值越大,瘦脸效果越明显。 + * + * 示例值: + * 1.0 + * 取值 <= 2 + */ + public Float slimDegree = 2.0f; + + +} diff --git a/api-web/api-interface/src/main/java/com/heyu/api/request/face/MonitorExaminationScreenReq.java b/api-web/api-interface/src/main/java/com/heyu/api/request/face/MonitorExaminationScreenReq.java new file mode 100644 index 0000000..7b426bc --- /dev/null +++ b/api-web/api-interface/src/main/java/com/heyu/api/request/face/MonitorExaminationScreenReq.java @@ -0,0 +1,34 @@ +package com.heyu.api.request.face; + +import com.heyu.api.request.CommonReq; +import lombok.Data; + +/*** + * https://next.api.aliyun.com/api/facebody/2019-12-30/MonitorExamination?tab=DOC¶ms={%22ImageURL%22:%22http%3A%2F%2Fworkbench-file-transfer.oss-cn-shanghai.aliyuncs.com%2Fuser-files%2F84753ea9-9809-4348-ac27-71437b89fee9-WechatIMG29.jpg%3FOSSAccessKeyId%3DLTAI5tRvL6vYdjKSfTFZ156m%26Expires%3D1742056256%26Signature%3Dl%252B1vglgYe%252BIN3wHE4Eror6e5tj4%253D%26response-content-disposition%3Dattachment%22,%22Type%22:1}&lang=JAVA + * + * + * + */ +@Data +public class MonitorExaminationScreenReq extends CommonReq { + + + /*** + * + ImageURL + string + 图像 URL 地址。推荐使用上海地域的 OSS 链接,对于文件在本地或者非上海地域 OSS 链接的情况,请参见文件 URL 处理。 + + 示例值: + http://viapi-test.oss-cn-shanghai.aliyuncs.com/viapi-3.0domepic/facebody/MonitorExamination/1MonitorExamination1.jpg + 参考取值来源: + MergeImageFace + + + + */ + + + + +} diff --git a/api-web/api-interface/src/main/java/com/heyu/api/resp/CommonImageUrlResp.java b/api-web/api-interface/src/main/java/com/heyu/api/resp/CommonImageUrlResp.java new file mode 100644 index 0000000..dc20acc --- /dev/null +++ b/api-web/api-interface/src/main/java/com/heyu/api/resp/CommonImageUrlResp.java @@ -0,0 +1,24 @@ +package com.heyu.api.resp; + + +import lombok.Data; + +@Data +public class CommonImageUrlResp { + + + /*** + * ImageURL + * string + * 瘦脸后图像的 URL 地址。展开详情 + * + * 示例值: + * http://vibktprfx-prod-prod-aic-gd-cn-shanghai.oss-cn-shanghai.aliyuncs.com/face-liquify/CA1C8937-B30C-15E6-B804-41C357BA413B_5eca_20210923-093411.jpg?Expires=1632391451&OSSAccessKeyId=LTAI4FoLmvQ9urWXgSRp****&Signature=46apJQVNBz%2FFzDLEYn2M1w9MKA**** + */ + private String imageURL; + + + + + +} diff --git a/api-web/api-interface/src/main/java/com/heyu/api/resp/face/GenerateHumanAnimeStyleResp.java b/api-web/api-interface/src/main/java/com/heyu/api/resp/face/GenerateHumanAnimeStyleResp.java new file mode 100644 index 0000000..1857d54 --- /dev/null +++ b/api-web/api-interface/src/main/java/com/heyu/api/resp/face/GenerateHumanAnimeStyleResp.java @@ -0,0 +1,21 @@ +package com.heyu.api.resp.face; + + +import com.heyu.api.data.dto.BaseResp; +import lombok.Data; + +@Data +public class GenerateHumanAnimeStyleResp extends BaseResp { + + /*** + * 人物卡通化结果图的 URL 地址。 + * + * 说明 该 URL 地址为临时地址,有效期为 30 分钟,过期后将无法访问。若需要长时间或者永久保存文件,请在 30 分钟内访问 URL 地址,下载文件转存到自己的 OSS 或者其他存储空间。 + * 示例值: + * https://dashscope-result-sh.oss-cn-shanghai.aliyuncs.com/viapi-video/person_image_cartoonizer/2023-10-25/55798d04-0957-4ab1-accc-0e4d2d01a039/20231025092636774205_styleanime_n2vedxruht.jpg?Expires=1698283596&OSSAccessKeyId=LTAI4FoLmvQ9urWXgSR****&Signature=ut2kn46Lz%2FRwqJ9jWJ0RBDut12**** + */ + private String imageURL; + + + +} diff --git a/api-web/api-interface/src/main/java/com/heyu/api/resp/face/HandPostureResp.java b/api-web/api-interface/src/main/java/com/heyu/api/resp/face/HandPostureResp.java new file mode 100644 index 0000000..fd5480d --- /dev/null +++ b/api-web/api-interface/src/main/java/com/heyu/api/resp/face/HandPostureResp.java @@ -0,0 +1,12 @@ +package com.heyu.api.resp.face; + + +import com.heyu.api.data.dto.BaseResp; +import lombok.Data; + +@Data +public class HandPostureResp extends BaseResp { + + + +} diff --git a/api-web/api-interface/src/main/java/com/heyu/api/resp/face/LiquifyFaceResp.java b/api-web/api-interface/src/main/java/com/heyu/api/resp/face/LiquifyFaceResp.java new file mode 100644 index 0000000..8731eb4 --- /dev/null +++ b/api-web/api-interface/src/main/java/com/heyu/api/resp/face/LiquifyFaceResp.java @@ -0,0 +1,15 @@ +package com.heyu.api.resp.face; + + +import com.heyu.api.data.dto.BaseResp; +import com.heyu.api.resp.CommonImageUrlResp; +import lombok.Data; + +@Data +public class LiquifyFaceResp extends CommonImageUrlResp { + + + + + +} diff --git a/api-web/api-interface/src/main/java/com/heyu/api/resp/face/MonitorExaminationScreenResp.java b/api-web/api-interface/src/main/java/com/heyu/api/resp/face/MonitorExaminationScreenResp.java new file mode 100644 index 0000000..54176c1 --- /dev/null +++ b/api-web/api-interface/src/main/java/com/heyu/api/resp/face/MonitorExaminationScreenResp.java @@ -0,0 +1,34 @@ +package com.heyu.api.resp.face; + + +import lombok.Data; + +/*** + * https://next.api.aliyun.com/api/facebody/2019-12-30/MonitorExamination?tab=DOC¶ms={%22ImageURL%22:%22http%3A%2F%2Fworkbench-file-transfer.oss-cn-shanghai.aliyuncs.com%2Fuser-files%2F84753ea9-9809-4348-ac27-71437b89fee9-WechatIMG29.jpg%3FOSSAccessKeyId%3DLTAI5tRvL6vYdjKSfTFZ156m%26Expires%3D1742056256%26Signature%3Dl%252B1vglgYe%252BIN3wHE4Eror6e5tj4%253D%26response-content-disposition%3Dattachment%22,%22Type%22:1}&lang=JAVA + * + *线上监考 + * + * MonitorExamination + * + * + */ +@Data +public class MonitorExaminationScreenResp { + /*** + * 屏幕截图包含聊天工具的概率,取值范围(0,1)。 当请求参数 Type 取值为 0 时显示该参数。 + * + * 示例值: + * 0.28805577754974365 + */ + private Float chatScore; + + + /*** + * 建议阈值,取值范围(0,1)。当 ChatScore 大于阈值时,系统判定输入屏幕截图中包含聊天工具。 当请求参数 Type 取值为 0 时显示该参数。 + * + * 示例值: + * 0.5 + */ + private Float threshold; + +}