提交修改

This commit is contained in:
quyixiao 2025-03-16 10:45:57 +08:00
parent 2d1a953206
commit ece8503dd7
14 changed files with 403 additions and 3 deletions

View File

@ -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<ACommonTextRequest> 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<DeepfakeFaceResp> faces = new ArrayList<>();
ApiR<DeepfakeFaceResponse> aR = aDeepfakeFaceHandle.handle(aDeepfakeFaceRequest);

View File

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

View File

@ -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动画 3DNEW日漫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<GenerateHumanAnimeStyleResponse> 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());
}
}

View File

@ -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<LiquifyFaceResponse> 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());
}
}

View File

@ -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&params={%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<MonitorExaminationResponse> 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();
}
}

View File

@ -0,0 +1,17 @@
package com.heyu.api.request.face;
import lombok.Data;
/***
*
*/
@Data
public class GenerateHumanAnimeStyleReq {
}

View File

@ -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 {
}

View File

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

View File

@ -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&params={%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
*/
}

View File

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

View File

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

View File

@ -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 {
}

View File

@ -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 {
}

View File

@ -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&params={%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;
}