提交修改

This commit is contained in:
quyixiao 2025-03-19 23:56:49 +08:00
parent 619aca0b0e
commit c04a19c021
13 changed files with 448 additions and 0 deletions

View File

@ -0,0 +1,64 @@
package com.heyu.api.controller.imageseg;
import com.aliyun.imageseg20191230.models.ChangeSkyResponse;
import com.aliyun.imageseg20191230.models.ChangeSkyResponseBody;
import com.heyu.api.alibaba.handle.imageseg.AChangeSkyHandle;
import com.heyu.api.alibaba.request.imageseg.AChangeSkyRequest;
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.imageseg.ChangeSkyReq;
import com.heyu.api.resp.imageseg.ChangeSkyResp;
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/imageseg/2019-12-30/ChangeSky
*
*天空替换 ChangeSky
*
* 功能描述
* 输入两种图像天空替换能力可以将参考图 B 的天空样式替换到目标图 A 从而改变目标图 A 的天空样式实现换天功能 关于该接口功能的示例图如下
*
*
*
*/
@Slf4j
@RestController
@RequestMapping("/image")
@NotIntercept
public class ChangeSkyController extends BaseController {
@Autowired
private AChangeSkyHandle aChangeSkyHandle;
@RequestMapping("/changeSky")
@CacheResult
public R changeSky(ChangeSkyReq request) {
ChangeSkyResp resp = new ChangeSkyResp();
AChangeSkyRequest aChangeSkyRequest = new AChangeSkyRequest();
aChangeSkyRequest.setImageUrl(request.getImageUrl());
aChangeSkyRequest.setImageBase64(request.getImageBase64());
aChangeSkyRequest.setReplaceImageBase64(request.getReplaceImageBase64());
aChangeSkyRequest.setReplaceImageURL(request.getReplaceImageURL());
ApiR<ChangeSkyResponse> aR = aChangeSkyHandle.handle(aChangeSkyRequest);
if (aR.isSuccess() && isSuccessStatusCode(aR.getData().getStatusCode())) {
ChangeSkyResponseBody.ChangeSkyResponseBodyData responseBodyData = aR.getData().getBody().getData();
resp.setImageURL(responseBodyData.getImageURL());
return R.ok().setData(resp);
}
return R.error(aR.getErrorMsg());
}
}

View File

@ -0,0 +1,74 @@
package com.heyu.api.controller.imageseg;
import com.aliyun.imageseg20191230.models.ParseFaceResponse;
import com.aliyun.imageseg20191230.models.ParseFaceResponseBody;
import com.heyu.api.alibaba.handle.imageseg.AParseFaceHandle;
import com.heyu.api.alibaba.request.imageseg.AParseFaceRequest;
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.imageseg.ParseFaceReq;
import com.heyu.api.resp.imageseg.ParseFaceDataElements;
import com.heyu.api.resp.imageseg.ParseFaceResp;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
/***
* https://next.api.aliyun.com/api/imageseg/2019-12-30/ParseFace?tab=DOC&lang=JAVA&RegionId=cn-shanghai
*
*五官分割 ParseFace
*
*
*功能描述
* 五官分割能力可以检测输入的人脸正面图像对眼睛鼻子嘴进行像素级语义分割
*/
@Slf4j
@RestController
@RequestMapping("/face")
@NotIntercept
public class ParseFaceController extends BaseController {
@Autowired
private AParseFaceHandle parseFaceHandle;
@RequestMapping("/parse")
@CacheResult
public R changeSky(ParseFaceReq request) {
ParseFaceResp resp = new ParseFaceResp();
AParseFaceRequest aParseFaceRequest = new AParseFaceRequest();
aParseFaceRequest.setImageBase64(request.getImageBase64());
aParseFaceRequest.setImageUrl(request.getImageUrl());
ApiR<ParseFaceResponse> aR = parseFaceHandle.handle(aParseFaceRequest);
if (aR.isSuccess() && isSuccessStatusCode(aR.getData().getStatusCode())) {
ParseFaceResponseBody.ParseFaceResponseBodyData responseBodyData = aR.getData().getBody().getData();
resp.setOriginImageURL(responseBodyData.getOriginImageURL());
List<ParseFaceDataElements> parseFaceDataElements = new ArrayList<>();
if (CollectionUtils.isNotEmpty(responseBodyData.getElements())) {
for (ParseFaceResponseBody.ParseFaceResponseBodyDataElements element : responseBodyData.getElements()) {
ParseFaceDataElements elements = new ParseFaceDataElements();
elements.setName(element.getName());
elements.setImageURL(element.getImageURL());
parseFaceDataElements.add(elements);
}
}
resp.setParseFaceDataElements(parseFaceDataElements);
return R.ok().setData(resp);
}
return R.error();
}
}

View File

@ -0,0 +1,63 @@
package com.heyu.api.controller.imageseg;
import com.aliyun.imageseg20191230.models.SegmentBodyResponse;
import com.aliyun.imageseg20191230.models.SegmentBodyResponseBody;
import com.heyu.api.alibaba.handle.imageseg.ASegmentBodyHandle;
import com.heyu.api.alibaba.request.imageseg.ASegmentBodyRequest;
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.imageseg.SegmentBodyReq;
import com.heyu.api.resp.imageseg.SegmentBodyResp;
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/imageseg/2019-12-30/SegmentBody?tab=DOC&RegionId=cn-shanghai
*
*人体分割
*
* SegmentBody
*
*
* 功能描述
* 人体分割能力用于识别输入图像中的人体轮廓与背景进行分离返回分割后的前景人像图4 通道本功能适用于真人图片不适用于卡通图片 关于该接口功能的示例图如下
*
*/
@Slf4j
@RestController
@RequestMapping("/body")
@NotIntercept
public class SegmentBodyController extends BaseController {
@Autowired
private ASegmentBodyHandle segmentBodyHandle;
@RequestMapping("/segment")
@CacheResult
public R changeSky(SegmentBodyReq request) {
SegmentBodyResp resp = new SegmentBodyResp();
ASegmentBodyRequest aSegmentBodyRequest = new ASegmentBodyRequest();
aSegmentBodyRequest.setReturnType(request.getReturnForm());
aSegmentBodyRequest.setImageBase64(request.getImageBase64());
aSegmentBodyRequest.setImageUrl(request.getImageUrl());
ApiR<SegmentBodyResponse> aR = segmentBodyHandle.handle(aSegmentBodyRequest);
if (aR.isSuccess() && isSuccessStatusCode(aR.getData().getStatusCode())) {
SegmentBodyResponseBody.SegmentBodyResponseBodyData responseBodyData = aR.getData().getBody().getData();
resp.setImageURL(responseBodyData.getImageURL());
return R.ok().setData(resp);
}
return R.error(aR.getErrorMsg());
}
}

View File

@ -0,0 +1,73 @@
package com.heyu.api.controller.imageseg;
import com.aliyun.imageseg20191230.models.SegmentClothResponse;
import com.aliyun.imageseg20191230.models.SegmentClothResponseBody;
import com.heyu.api.alibaba.handle.imageseg.ASegmentClothHandle;
import com.heyu.api.alibaba.request.imageseg.ASegmentClothRequest;
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.imageseg.SegmentClothResp;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
/***
*
*https://next.api.aliyun.com/api/imageseg/2019-12-30/SegmentCloth?tab=DOC&lang=JAVA&RegionId=cn-shanghai
*
*服饰分割
*
* SegmentCloth
*
* 功能描述
* 服饰分割能力可以对输入人台服饰真人服饰纯服饰虚拟人服饰等场景图片中的主体服饰进行像素级抠图并返回抠图结果服饰分割主要是针对图片中的服装进行精细化分割服饰分割标准支持外套
* 上装含内衬裤装裙装帽子鞋子包包品类分割其他皮带领带等装饰品等内容建议使用商品分割 关于该接口功能的示例图如下 输入原图和输出结果图
*
*
*
*/
@Slf4j
@RestController
@RequestMapping("/cloth")
@NotIntercept
public class SegmentClothController extends BaseController {
@Autowired
private ASegmentClothHandle aSegmentClothHandle;
@RequestMapping("/segment")
@CacheResult
public R changeSky(ASegmentClothRequest request) {
List<SegmentClothResp> respList = new ArrayList<>();
ApiR<SegmentClothResponse> aR = aSegmentClothHandle.handle(request);
if (aR.isSuccess() && isSuccessStatusCode(aR.getData().getStatusCode())) {
SegmentClothResponseBody.SegmentClothResponseBodyData responseBodyData = aR.getData().getBody().getData();
if (CollectionUtils.isNotEmpty(responseBodyData.getElements())) {
for (SegmentClothResponseBody.SegmentClothResponseBodyDataElements element : responseBodyData.getElements()) {
SegmentClothResp resp = new SegmentClothResp();
resp.setClassUrl(element.getClassUrl());
resp.setImageURL(element.getImageURL());
respList.add(resp);
}
return R.ok().setData(respList);
}
}
return R.error(aR.getErrorMsg());
}
}

View File

@ -0,0 +1,25 @@
package com.heyu.api.request.imageseg;
import com.heyu.api.request.CommonReq;
import lombok.Data;
@Data
public class ChangeSkyReq extends CommonReq {
/**
* 参考图 URL 地址推荐使用上海地域的 OSS 链接对于文件在本地或者非上海地域 OSS 链接的情况请参见文件 URL 处理
*
* 示例值:
* http://viapi-test.oss-cn-shanghai.aliyuncs.com/viapi-3.0domepic/imageseg/ChangeSky/ChangeSky6.jpg
*/
private String replaceImageURL;
private String replaceImageBase64;
}

View File

@ -0,0 +1,11 @@
package com.heyu.api.request.imageseg;
import com.heyu.api.request.CommonReq;
import lombok.Data;
@Data
public class ParseFaceReq extends CommonReq {
}

View File

@ -0,0 +1,27 @@
package com.heyu.api.request.imageseg;
import com.heyu.api.request.CommonReq;
import lombok.Data;
@Data
public class SegmentBodyReq extends CommonReq {
/***
* 指定返回的图像形式
*
* 如果设置为mask则返回单通道黑白图
*
* 如果设置为crop则返回裁剪之后的四通道 PNG 裁掉边缘空白区域
*
* 如果设置为whiteBK则返回白底图
*
* 如果不设置或者设置为其他值则返回四通道 PNG
*
* 示例值:
* mask
*
*/
private String returnForm;
}

View File

@ -0,0 +1,4 @@
package com.heyu.api.request.imageseg;
public class SegmentClothReq {
}

View File

@ -0,0 +1,12 @@
package com.heyu.api.resp.imageseg;
import com.heyu.api.resp.CommonImageUrlResp;
import lombok.Data;
@Data
public class ChangeSkyResp extends CommonImageUrlResp {
}

View File

@ -0,0 +1,25 @@
package com.heyu.api.resp.imageseg;
import lombok.Data;
import java.io.Serializable;
@Data
public class ParseFaceDataElements implements Serializable {
/***
* 抠图结果 抠图之后返回四通道 PNG 无压缩图像尺寸保持不变图像体积会变大
*
* 说明 URL 地址为临时地址有效期为 30 分钟过期后将无法访问若需要长时间或者永久保存文件请在 30 分钟内访问 URL 地址下载文件转存到自己的 OSS 或者其他存储空间
* 示例值:
* http://vibktprfx-prod-prod-aic-gd-cn-shanghai.oss-cn-shanghai.aliyuncs.com/fivesensesegmenter/prod/560FA2E7-FDC6-59A5-ABDD-D62A05146734/skin/_18dd_20211231-040658.png?Expires=1640925418&OSSAccessKeyId=LTAI4FoLmvQ9urWXgSRp****&Signature=2g0M88wZl%2Bn4t4gzQX%2BTIskpWB****
*/
public String imageURL;
/***
* 抠图结果 key 具体请参见下方表格说明
*
* 示例值:
* skin
*/
public String name;
}

View File

@ -0,0 +1,27 @@
package com.heyu.api.resp.imageseg;
import com.heyu.api.data.dto.BaseResp;
import lombok.Data;
import java.util.List;
@Data
public class ParseFaceResp extends BaseResp {
/***
* 原始图像 URL 地址
*
* 示例值:
* http://viapi-test.oss-cn-shanghai.aliyuncs.com/viapi-3.0domepic/imageseg/ParseFace/ParseFace1.jpg
*/
private String originImageURL;
/***
* 各个子元素的分割结果
*/
private List<ParseFaceDataElements> parseFaceDataElements;
}

View File

@ -0,0 +1,8 @@
package com.heyu.api.resp.imageseg;
import com.heyu.api.resp.CommonImageUrlResp;
import lombok.Data;
@Data
public class SegmentBodyResp extends CommonImageUrlResp {
}

View File

@ -0,0 +1,35 @@
package com.heyu.api.resp.imageseg;
import com.heyu.api.data.dto.BaseResp;
import lombok.Data;
@Data
public class SegmentClothResp extends BaseResp {
/***
* 根据用户输入的clothClass返回一个服饰类别对应的 URL
*
* 说明 URL 地址为临时地址有效期为 30 分钟过期后将无法访问若需要长时间或者永久保存文件请在 30 分钟内访问 URL 地址下载文件转存到自己的 OSS 或者其他存储空间
* string
* 根据用户输入的clothClass返回一个服饰类别对应的 URL
*
* 说明 URL 地址为临时地址有效期为 30 分钟过期后将无法访问若需要长时间或者永久保存文件请在 30 分钟内访问 URL 地址下载文件转存到自己的 OSS 或者其他存储空间
* 示例值:
* {'tops':http://viapi-cn-shanghai-dha-segmenter.oss-cn-shanghai.aliyuncs.com/..,'hat':http://viapi-cn-shanghai-dha-segmenter...,...}
*/
public java.util.Map<String, String> classUrl;
/***
* 返回抠图结果图像 URL 地址 抠图之后返回四通道 PNG 无压缩图像尺寸保持不变图像体积会变大
*
* 说明 URL 地址为临时地址有效期为 30 分钟过期后将无法访问若需要长时间或者永久保存文件请在 30 分钟内访问 URL 地址下载文件转存到自己的 OSS 或者其他存储空间
* 示例值:
* http://viapi-cn-shanghai-dha-segmenter.oss-cn-shanghai.aliyuncs.com/upload/clothingsegmentation-2020-06-17-16-54-40-688c84cbbd-hnqfq/2020-6-18/invi__015924459307821000041_IIVHoM.png?Expires=1592447730&OSSAccessKeyId=LTAI4FoLmvQ9urWXgSRp****&Signature=Hy8pn3IQj8nuKN0LEaC57cee9L****
*/
public String imageURL;
}