提交修改

This commit is contained in:
quyixiao 2025-03-15 16:31:40 +08:00
parent a06ef45358
commit 07a2e69405
16 changed files with 478 additions and 9 deletions

View File

@ -38,7 +38,7 @@ public class ACompareFaceRequest {
* 示例值:
* 98.5
*/
private Float qualityScoreThreshold;
private Float qualityScoreThreshold = 98.5f;
}

View File

@ -1,9 +1,20 @@
package com.heyu.api.controller.face;
import com.aliyun.facebody20191230.models.BlurFaceResponse;
import com.aliyun.facebody20191230.models.BlurFaceResponseBody;
import com.heyu.api.alibaba.handle.facebody.ABlurFaceHandle;
import com.heyu.api.alibaba.request.facebody.ABlurFaceRequest;
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.card.CharacterRecognizeRequest;
import com.heyu.api.request.face.CharacterRecognizeReq;
import com.heyu.api.resp.face.CharacterRecognizeResp;
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;
@ -23,13 +34,34 @@ import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/face")
@NotIntercept
public class BlurFaceController extends BaseController {
public class BlurFaceController extends BaseController {
@Autowired
private ABlurFaceHandle aBlurFaceHandle;
@RequestMapping("/mask")
@CacheResult
public R recognize(CharacterRecognizeReq request) {
CharacterRecognizeResp resp = new CharacterRecognizeResp();
ABlurFaceRequest aBlurFaceRequest = new ABlurFaceRequest();
aBlurFaceRequest.setImageBase64(request.getImageBase64());
aBlurFaceRequest.setImageUrl(request.getImageUrl());
ApiR<BlurFaceResponse> aR = aBlurFaceHandle.handle(aBlurFaceRequest);
if (aR.isSuccess() && isSuccessStatusCode(aR.getData().getStatusCode())) {
BlurFaceResponseBody responseBody = aR.getData().getBody();
BlurFaceResponseBody.BlurFaceResponseBodyData responseBodyData = responseBody.getData();
resp.setOriginImageUrl(resp.getOriginImageUrl());
resp.setMaskImageURL(resp.getMaskImageURL());
return R.ok().setData(resp);
}
return R.error(aR.getErrorMsg());
}
}

View File

@ -0,0 +1,91 @@
package com.heyu.api.controller.face;
import com.aliyun.facebody20191230.models.BodyPostureResponse;
import com.aliyun.facebody20191230.models.BodyPostureResponseBody;
import com.heyu.api.alibaba.handle.facebody.ABodyPostureHandle;
import com.heyu.api.alibaba.request.facebody.ABodyPostureRequest;
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.BodyPostureReq;
import com.heyu.api.resp.face.BodyPostureBodiesResp;
import com.heyu.api.resp.face.BodyPostureResp;
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.Collection;
import java.util.List;
/***
* https://next.api.aliyun.com/api/facebody/2019-12-30/BodyPosture?RegionId=cn-shanghai&tab=DEBUG&lang=JAVA
*人体姿态关键点 BodyPosture
*
*
* 人体姿态关键点能力可以获取人体的十八个关键点信息包括noseneckright_shoulderright_elbowright_wristleft_shoulderleft_elbowleft_wristright_hipright_kneeright_ankleleft_hipleft_kneeleft_ankleright_eyeleft_eyeright_earleft_ear
*/
@Slf4j
@RestController
@RequestMapping("/face")
@NotIntercept
public class BodyPostureController extends BaseController {
@Autowired
private ABodyPostureHandle aBodyPostureHandle;
@RequestMapping("/mask")
@CacheResult
public R recognize(BodyPostureReq request) {
List<BodyPostureResp> resp = new ArrayList<>();
ABodyPostureRequest bodyPostureRequest = new ABodyPostureRequest();
bodyPostureRequest.setImageBase64(request.getImageBase64());
bodyPostureRequest.setImageUrl(request.getImageUrl());
ApiR<BodyPostureResponse> apiR = aBodyPostureHandle.handle(bodyPostureRequest);
if (apiR.isSuccess() && isSuccessStatusCode(apiR.getData().getStatusCode())) {
BodyPostureResponseBody responseBody = apiR.getData().getBody();
BodyPostureResponseBody.BodyPostureResponseBodyData responseBodyData = responseBody.getData();
List<BodyPostureResponseBody.BodyPostureResponseBodyDataOutputs> responseBodyDataOutputsList = responseBodyData.getOutputs();
if (CollectionUtils.isNotEmpty(responseBodyDataOutputsList)) {
for (BodyPostureResponseBody.BodyPostureResponseBodyDataOutputs bodyPostureResponseBodyDataOutputs : responseBodyDataOutputsList) {
BodyPostureResp bodyPostureResp = new BodyPostureResp();
bodyPostureResp.setHumanCount(bodyPostureResponseBodyDataOutputs.getHumanCount());
List<BodyPostureResponseBody.BodyPostureResponseBodyDataOutputsResults> results = bodyPostureResponseBodyDataOutputs.getResults();
if (CollectionUtils.isNotEmpty(results)) {
List<BodyPostureBodiesResp> bodyPostureBodiesResps = new ArrayList<>();
for (BodyPostureResponseBody.BodyPostureResponseBodyDataOutputsResults result : results) {
if (CollectionUtils.isNotEmpty(result.getBodies())) {
for (BodyPostureResponseBody.BodyPostureResponseBodyDataOutputsResultsBodies body : result.getBodies()) {
BodyPostureBodiesResp bodyPostureBodiesResp = new BodyPostureBodiesResp();
bodyPostureBodiesResp.setConfident(body.getConfident());
bodyPostureBodiesResp.setLabel(body.getLabel());
bodyPostureBodiesResps.add(bodyPostureBodiesResp);
}
}
}
}
}
return R.ok().setData(resp);
}
}
return R.error(apiR.getErrorMsg());
}
}

View File

@ -0,0 +1,76 @@
package com.heyu.api.controller.face;
import com.aliyun.facebody20191230.models.CompareFaceResponse;
import com.aliyun.facebody20191230.models.CompareFaceResponseBody;
import com.heyu.api.alibaba.handle.facebody.ACompareFaceHandle;
import com.heyu.api.alibaba.request.facebody.ACompareFaceRequest;
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.CharacterRecognizeReq;
import com.heyu.api.request.face.CompareFaceReq;
import com.heyu.api.resp.face.CompareFaceResp;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.AbstractPropertyAccessor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.chrono.IsoChronology;
/****
* https://next.api.aliyun.com/api/facebody/2019-12-30/CompareFace?tab=DEMO&lang=JAVA
*
* 人脸比对
*
* CompareFace
*
* 功能描述
* 人脸比对 1:1 能力基于您输入的两张图片分别挑选两张图片中的最大人脸进行比较判断是否为同一人
*
* 两张人脸图片对比比对两张图片中人脸的相似度返回这两个人脸的矩形框坐标人脸五点关键点坐标比对的置信度以及不同误识率的置信度阈值
* 支持多种图片类型支持生活照证件照身份证芯片照带网纹照等类型的人脸对比
*/
@Slf4j
@RestController
@RequestMapping("/face")
@NotIntercept
public class CompareFaceController extends BaseController {
@Autowired
private ACompareFaceHandle aCompareFaceHandle;
@RequestMapping("/compare")
@CacheResult
public R recognize(CompareFaceReq req) {
CompareFaceResp resp = new CompareFaceResp();
ACompareFaceRequest aCompareFaceRequest = new ACompareFaceRequest();
aCompareFaceRequest.setUrlA(req.getImageUrlA());
aCompareFaceRequest.setUrlB(req.getImageUrlB());
aCompareFaceRequest.setBase64A(req.getImageBase64A());
aCompareFaceRequest.setBase64B(req.getImageBase64B());
ApiR<CompareFaceResponse> aR = aCompareFaceHandle.handle(aCompareFaceRequest);
if (aR.isSuccess() && isSuccessStatusCode(aR.getData().getStatusCode())) {
CompareFaceResponseBody responseBody = aR.getData().getBody();
CompareFaceResponseBody.CompareFaceResponseBodyData responseBodyData = responseBody.getData();
resp.setConfidence(responseBodyData.getConfidence());
resp.setQualityScoreA(responseBodyData.getQualityScoreA());
resp.setQualityScoreA(responseBodyData.getQualityScoreB());
resp.setMessageTips(responseBodyData.getMessageTips());
resp.setIsMaskA(responseBodyData.getIsMaskA());
resp.setIsMaskB(responseBodyData.getIsMaskB());
return R.ok().setData(resp);
}
return R.error(aR.getErrorMsg());
}
}

View File

@ -22,6 +22,7 @@ import java.io.IOException;
public class PostCodeQueueSimpleRabbitListener {
@Autowired
private ApiPostCodeDao apiPostCodeDao;

View File

@ -6,7 +6,7 @@ import lombok.Data;
@Data
public class CommonRequest extends BaseRequest {
public class CommonReq extends BaseRequest {
/**
* 图片的url
*/

View File

@ -0,0 +1,24 @@
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/BodyPosture?RegionId=cn-shanghai&tab=DEMO&lang=JAVA
*人体姿态关键点
*
* BodyPosture
*
*/
@Data
public class BodyPostureReq extends CommonReq {
}

View File

@ -0,0 +1,20 @@
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/BlurFace?tab=DOC&lang=JAVA&RegionId=cn-shanghai
*
*人脸信息脱敏
*
* BlurFace
*
*/
@Data
public class CharacterRecognizeReq extends CommonReq {
}

View File

@ -0,0 +1,40 @@
package com.heyu.api.request.face;
import com.heyu.api.data.dto.BaseRequest;
import lombok.Data;
/****
* https://next.api.aliyun.com/api/facebody/2019-12-30/CompareFace?tab=DOC&lang=JAVA
*
*人脸比对
*
* CompareFace
*
*/
@Data
public class CompareFaceReq extends BaseRequest {
/**
* 图片的url
*/
private String imageUrlA;
/**
* base 64 编码
*/
private String imageBase64A;
/**
* 图片的url
*/
private String imageUrlB;
/**
* base 64 编码
*/
private String imageBase64B;
}

View File

@ -1,7 +1,7 @@
package com.heyu.api.request.tax;
import com.heyu.api.request.CommonRequest;
import com.heyu.api.request.CommonReq;
import lombok.Data;
/***
@ -11,7 +11,7 @@ import lombok.Data;
*
*/
@Data
public class ARecognizeVATInvoiceReq extends CommonRequest {
public class ARecognizeVATInvoiceReq extends CommonReq {
}

View File

@ -1,7 +1,7 @@
package com.heyu.api.request.tax;
import com.heyu.api.request.CommonRequest;
import com.heyu.api.request.CommonReq;
/***
* https://next.api.aliyun.com/api/ocr/2019-12-30/RecognizeQuotaInvoice?tab=DEMO
@ -12,7 +12,7 @@ import com.heyu.api.request.CommonRequest;
* RecognizeQuotalnvoice
*
*/
public class RecognizeQuotaInvoiceReq extends CommonRequest {
public class RecognizeQuotaInvoiceReq extends CommonReq {

View File

@ -1,12 +1,12 @@
package com.heyu.api.request.tax;
import com.heyu.api.request.CommonRequest;
import com.heyu.api.request.CommonReq;
import lombok.Data;
/***
* https://next.api.aliyun.com/api/ocr/2019-12-30/RecognizeTicketInvoice
*/
@Data
public class RecognizeTicketInvoiceReq extends CommonRequest {
public class RecognizeTicketInvoiceReq extends CommonReq {
}

View File

@ -0,0 +1,30 @@
package com.heyu.api.resp.face;
import lombok.Data;
/***
* 检测到的人体关键点信息
*/
@Data
public class BodyPostureBodiesResp {
/**
* 关键点置信度
*
* 示例值:
* 0.91309475898742676
*/
private Float confident;
/***
* 关键点的标签包括如下类型noseneckright_shoulderright_elbowright_wristleft_shoulderleft_elbowleft_wristright_hipright_kneeright_ankleleft_hipleft_kneeleft_ankleright_eyeleft_eyeright_earleft_ear
*
* 示例值:
* nose
*/
private String label;
}

View File

@ -0,0 +1,33 @@
package com.heyu.api.resp.face;
import com.heyu.api.data.dto.BaseResp;
import lombok.Data;
import java.util.List;
/***
* https://next.api.aliyun.com/api/facebody/2019-12-30/BodyPosture?RegionId=cn-shanghai&tab=DOC&lang=JAVA
*
* 人体姿态关键点 BodyPosture
*/
@Data
public class BodyPostureResp extends BaseResp {
/***
* 人体的个数
*
* 示例值:
* 1
*/
private Integer humanCount;
/***
*
*/
private List<BodyPostureBodiesResp> bodiesRespList;
}

View File

@ -0,0 +1,37 @@
package com.heyu.api.resp.face;
import com.heyu.api.data.dto.BaseResp;
import lombok.Data;
@Data
public class CharacterRecognizeResp extends BaseResp {
/***
* 原来图片
*
* 脱敏后的图片 URL 地址展开详情
*
* 示例值:
* http://viapi-cn-shanghai-dha-segmenter.oss-cn-shanghai.aliyuncs.com/upload/result_FaceBlur/2020-8-5/invi_FaceBlur_015966077063461060948_IBdDsq.jpg?Expires=1596609506&OSSAccessKeyId=LTAI4FoLmvQ9urWXgSRp****&Signature=x8n3jq1X91Sq7BKWE4vRHSu6g9****
*
*
*/
private String originImageUrl;
/***
*
* 脱敏后的图片 Mask 地址展开详情
*
* 示例值:
* http://vibktprfx-prod-prod-aic-gd-cn-shanghai.oss-cn-shanghai.aliyuncs.com/person-image-cartoonizer/59697D68-2A6E-4553-89BD-0FADD07881E8_7ee5_20201027-070958.jpg?Expires=1603784400&OSSAccessKeyId=LTAI4FoLmvQ9urWXgSR****&Signature=ut2kn46Lz%2FRwqJ9jWJ0RBDut12****
*
*/
private String maskImageURL;
}

View File

@ -0,0 +1,85 @@
package com.heyu.api.resp.face;
import com.heyu.api.data.dto.BaseRequest;
import com.heyu.api.data.dto.BaseResp;
import lombok.Data;
/***
* https://next.api.aliyun.com/api/facebody/2019-12-30/CompareFace?tab=DEMO&lang=JAVA
*
* 人脸比对
*
* CompareFace
*/
@Data
public class CompareFaceResp extends BaseResp {
/***
* 两张图片中的最大人脸属于同一个人的置信度取值范围 0~100供参考的三个阈值是 6169 75分别对应千分之一万分之一和十万分之一误识率阈值设置越高误识率越低通过率也越低对安全性要求越高的场合可以设置更高的阈值如果某张图片中没有人脸则报错误信息
*
* 示例值:
* 88.4831771850586
*/
private Float confidence;
/****
* 输入图像 A 的质量分
*
* 示例值:
* 99.65772247314453
*
*/
private Float qualityScoreA;
/***
* 输入图像 B 的质量分
*
* 示例值:
* 98.01177978515625
*/
private Float qualityScoreB;
/***
* 提示信息纯文字描述以下提示信息单独出现或是几条提示信息的组合 质量相关提示某张人脸质量分小于请求参数质量分阈值时会出现
*
* imageA quality score less threshold图像 A 的质量分小于输入参数设置的阈值
* imageB quality score less threshold图像 B 的质量分小于输入参数设置的阈值
* 人脸尺寸相关提示检测到人脸且人脸宽或高小于 50 像素时会有该提示信息出现该提示信息时请尽可能输入像素数大于 64x64 的人脸并请酌情参考返回的对比置信度 Confidence
*
* face in imageA is too small图像 A 中的人脸太小
* face in imageB is too small图像 B 中的人脸太小
* 示例值:
* imageB quality score less threshold
*/
private String messageTips;
/***
*图片 A 中的人脸是否戴口罩
*
* 0不戴口罩
* 1戴口罩
* 注意 请注意该值为 Long 类型在某些语言中可能存在精度丢失的风险请小心使用
* 示例值:
* 0
*/
private Long isMaskA;
/***
* 图片 B 中的人脸是否戴口罩
*
* 0不戴口罩
* 1戴口罩
* 注意 请注意该值为 Long 类型在某些语言中可能存在精度丢失的风险请小心使用
* 示例值:
* 0
*/
private Long isMaskB;
}