From 6a786199355e37427f2ac276a2f7433cb4b7d76a Mon Sep 17 00:00:00 2001 From: quyixiao <2621048238@qq.com> Date: Sat, 15 Mar 2025 17:52:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../facebody/ACompareFaceWithMaskHandle.java | 2 +- .../facebody/ACompareFaceWithMaskRequest.java | 3 + .../facebody/ADetectBodyCountRequest.java | 9 ++ .../face/CompareFaceController.java | 3 - .../face/DeepfakeFaceController.java | 102 ++++++++++++++++++ .../face/DetectBodyCountController.java | 63 +++++++++++ .../request/face/CompareFaceWithMaskReq.java | 21 ++++ .../api/request/face/DeepfakeFaceReq.java | 26 +++++ .../api/request/face/DetectBodyCountReq.java | 20 ++++ .../api/resp/face/DeepfakeFaceListResp.java | 51 +++++++++ .../heyu/api/resp/face/DeepfakeFaceResp.java | 35 ++++++ .../api/resp/face/DetectBodyCountResp.java | 25 +++++ 12 files changed, 356 insertions(+), 4 deletions(-) create mode 100644 api-web/api-interface/src/main/java/com/heyu/api/controller/face/DeepfakeFaceController.java create mode 100644 api-web/api-interface/src/main/java/com/heyu/api/controller/face/DetectBodyCountController.java create mode 100644 api-web/api-interface/src/main/java/com/heyu/api/request/face/CompareFaceWithMaskReq.java create mode 100644 api-web/api-interface/src/main/java/com/heyu/api/request/face/DeepfakeFaceReq.java create mode 100644 api-web/api-interface/src/main/java/com/heyu/api/request/face/DetectBodyCountReq.java create mode 100644 api-web/api-interface/src/main/java/com/heyu/api/resp/face/DeepfakeFaceListResp.java create mode 100644 api-web/api-interface/src/main/java/com/heyu/api/resp/face/DeepfakeFaceResp.java create mode 100644 api-web/api-interface/src/main/java/com/heyu/api/resp/face/DetectBodyCountResp.java diff --git a/api-third/src/main/java/com/heyu/api/alibaba/handle/facebody/ACompareFaceWithMaskHandle.java b/api-third/src/main/java/com/heyu/api/alibaba/handle/facebody/ACompareFaceWithMaskHandle.java index 55f8552..c439e14 100644 --- a/api-third/src/main/java/com/heyu/api/alibaba/handle/facebody/ACompareFaceWithMaskHandle.java +++ b/api-third/src/main/java/com/heyu/api/alibaba/handle/facebody/ACompareFaceWithMaskHandle.java @@ -15,7 +15,7 @@ import org.springframework.stereotype.Component; /** * https://next.api.aliyun.com/api/facebody/2019-12-30/DetectLivingFace - * 行人入侵检测 + * */ @Component @Slf4j diff --git a/api-third/src/main/java/com/heyu/api/alibaba/request/facebody/ACompareFaceWithMaskRequest.java b/api-third/src/main/java/com/heyu/api/alibaba/request/facebody/ACompareFaceWithMaskRequest.java index 152c5b1..b29900f 100644 --- a/api-third/src/main/java/com/heyu/api/alibaba/request/facebody/ACompareFaceWithMaskRequest.java +++ b/api-third/src/main/java/com/heyu/api/alibaba/request/facebody/ACompareFaceWithMaskRequest.java @@ -21,6 +21,9 @@ public class ACompareFaceWithMaskRequest { */ public String urlA; + /*** + * + */ private String base64A; /** diff --git a/api-third/src/main/java/com/heyu/api/alibaba/request/facebody/ADetectBodyCountRequest.java b/api-third/src/main/java/com/heyu/api/alibaba/request/facebody/ADetectBodyCountRequest.java index 6a1300e..02c30be 100644 --- a/api-third/src/main/java/com/heyu/api/alibaba/request/facebody/ADetectBodyCountRequest.java +++ b/api-third/src/main/java/com/heyu/api/alibaba/request/facebody/ADetectBodyCountRequest.java @@ -5,10 +5,19 @@ import lombok.Data; /** * https://next.api.aliyun.com/api/facebody/2019-12-30/DetectBodyCount + * + * 人体计数 + * + * DetectBodyCount + * + * */ @Data public class ADetectBodyCountRequest extends ACommonTextRequest { + + + } diff --git a/api-web/api-interface/src/main/java/com/heyu/api/controller/face/CompareFaceController.java b/api-web/api-interface/src/main/java/com/heyu/api/controller/face/CompareFaceController.java index 07c522c..7cf717e 100644 --- a/api-web/api-interface/src/main/java/com/heyu/api/controller/face/CompareFaceController.java +++ b/api-web/api-interface/src/main/java/com/heyu/api/controller/face/CompareFaceController.java @@ -10,16 +10,13 @@ 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 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 new file mode 100644 index 0000000..9d4bac3 --- /dev/null +++ b/api-web/api-interface/src/main/java/com/heyu/api/controller/face/DeepfakeFaceController.java @@ -0,0 +1,102 @@ +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.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.face.DeepfakeFaceReq; +import com.heyu.api.resp.face.DeepfakeFaceListResp; +import com.heyu.api.resp.face.DeepfakeFaceResp; +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/facebody/2019-12-30/DeepfakeFace?RegionId=cn-shanghai&tab=DEMO&lang=JAVA + * + *换脸鉴别 + * + * DeepfakeFace + * + * + * 换脸鉴别基于图像算法 AI 技术,实现对图片人脸的真伪进行灵敏检测和深度分析。能力范围支持: + * + * 鉴别图片中的人脸是否为 AI 换脸算法所深度合成的假脸。 + * 鉴别图片中的人脸是否为 AI 人脸属性编辑生成类算法所深度合成的假脸。深度伪造技术是指利用深度学习实现图片或视频换脸、人脸编辑生成的技术。 + * 关于该接口功能的示例图如下: + * + * 未经算法合成: + * + * + * 应用场景 + * 打击换脸视频网络传播:互联网娱乐性质换脸小程序、APP 应用爆火,换脸鉴别技术可以识别出网络短视频中的伪造视频人脸,杜绝视频换脸造假。 + * 打击互联网 ID 换脸诈骗:深度伪造技术高频使用,假视频与社交网络结合深深影响舆论走向和诱导诈骗。换脸鉴别可识别网上业务办理中的人脸伪造视频,减少网络诈骗。 + * 打击色情娱乐等黑灰产业:互联网的深度伪造合成的色情视频数量巨大,换脸鉴别可以识别此类伪造视频,减少伪造视频人脸色情内容传播,切断色情传播链路。 + * 人脸特征编辑鉴别:真人 ID 版权核验,通过换脸鉴别可以识别出版权素材库中人脸属性编辑生成算法所深度合成的假脸图片素材,杜绝换脸造假,杜绝人脸版权侵权行为。 + * + * + * 特色优势 + * 反制 AI 技术滥用:换脸鉴别基于达摩院人脸图像算法和 Deepfake 鉴别技术,提供对图像中的人脸特征进行全方位分析,利用 AI 技术反制换脸、合成脸、人脸特征编辑生成这类 AI 技术的滥用,保护用户合法权益、维护社会公共安全。 + * 领先鉴别技术:基于图片中人像目标的高维度全量特征,换脸鉴别服务涵盖依据视频图像的像素、纹理级别的低阶特征,到具有全局语义的高阶特征,对图像进行全方位、高语义、多层次组合分析,攻防一体式的训练,极大提升合成人脸图片检出率。 + * 准确率高:换脸鉴别结合阿里云多年人脸识别技术能力和大数据安全技术能力,能对视频图像中 AI 换脸、AI 人脸生成等技术进行准确识别判断,对 AI 换脸攻击识别准确率高。 + * 支持单个或多个人脸判断逻辑,可直接调用的 API 接口,服务简单易用,易被集成,兼容性强。 + * + * + */ +@Slf4j +@RestController +@RequestMapping("/face") +@NotIntercept +public class DeepfakeFaceController extends BaseController { + + @Autowired + private ADeepfakeFaceHandle aDeepfakeFaceHandle; + + @RequestMapping("/deepfake") + @CacheResult + public R deepfake(DeepfakeFaceReq req) { + ADeepfakeFaceRequest aDeepfakeFaceRequest = new ADeepfakeFaceRequest(); + + List faces = new ArrayList<>(); + + ApiR aR = aDeepfakeFaceHandle.handle(aDeepfakeFaceRequest); + if(aR.isSuccess() && isSuccessStatusCode(aR.getData().getStatusCode())){ + DeepfakeFaceResponseBody responseBody = aR.getData().getBody(); + DeepfakeFaceResponseBody.DeepfakeFaceResponseBodyData responseBodyData = responseBody.getData(); + List elements = responseBodyData.getElements(); + + for (DeepfakeFaceResponseBody.DeepfakeFaceResponseBodyDataElements element : elements) { + DeepfakeFaceResp faceResp = new DeepfakeFaceResp(); + faceResp.setFaceNumber(element.getFaceNumber()); + faceResp.setImageUrl(element.getImageURL()); + + List faceListResps = new ArrayList<>(); + + List results = element.getResults(); + if(CollectionUtils.isNotEmpty(results)){ + for (DeepfakeFaceResponseBody.DeepfakeFaceResponseBodyDataElementsResults result : results) { + + DeepfakeFaceListResp resp = new DeepfakeFaceListResp(); + resp.setConfidence(result.getConfidence()); + resp.setLabel(result.getLabel()); + faceListResps.add(resp); + } + } + faceResp.setDeepfakeFaceListResps(faceListResps); + } + return R.ok().setData(faces); + } + return R.error(); + } +} diff --git a/api-web/api-interface/src/main/java/com/heyu/api/controller/face/DetectBodyCountController.java b/api-web/api-interface/src/main/java/com/heyu/api/controller/face/DetectBodyCountController.java new file mode 100644 index 0000000..54879fa --- /dev/null +++ b/api-web/api-interface/src/main/java/com/heyu/api/controller/face/DetectBodyCountController.java @@ -0,0 +1,63 @@ +package com.heyu.api.controller.face; + + +import com.aliyun.facebody20191230.models.DetectBodyCountResponse; +import com.aliyun.facebody20191230.models.DetectBodyCountResponseBody; +import com.heyu.api.alibaba.handle.facebody.ADetectBodyCountHandle; +import com.heyu.api.alibaba.request.facebody.ADetectBodyCountRequest; +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.CompareFaceReq; +import com.heyu.api.request.face.DetectBodyCountReq; +import com.heyu.api.resp.face.DetectBodyCountResp; +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/DetectBodyCount?RegionId=cn-shanghai + * + * 人体计数 + * + * DetectBodyCount + * + * 功能描述 + * 人体计数能力可以检测输入图片中人体的个数。 + * + * + */ +@Slf4j +@RestController +@RequestMapping("/face") +@NotIntercept +public class DetectBodyCountController extends BaseController { + + @Autowired + private ADetectBodyCountHandle aDetectBodyCountHandle; + + @RequestMapping("/count") + @CacheResult + public R count(DetectBodyCountReq req) { + DetectBodyCountResp detectBodyCountResp = new DetectBodyCountResp(); + ADetectBodyCountRequest aDetectBodyCountRequest = new ADetectBodyCountRequest(); + aDetectBodyCountRequest.setImageBase64(req.getImageBase64()); + aDetectBodyCountRequest.setImageUrl(req.getImageUrl()); + + ApiR aR = aDetectBodyCountHandle.handle(aDetectBodyCountRequest); + if (aR.isSuccess() && isSuccessStatusCode(aR.getData().getStatusCode())) { + DetectBodyCountResponseBody responseBody = aR.getData().getBody(); + DetectBodyCountResponseBody.DetectBodyCountResponseBodyData responseBodyData = responseBody.getData(); + + detectBodyCountResp.setPersonNumber(responseBodyData.getPersonNumber()); + + return R.ok().setData(detectBodyCountResp); + } + + return R.error(aR.getErrorMsg()); + } +} diff --git a/api-web/api-interface/src/main/java/com/heyu/api/request/face/CompareFaceWithMaskReq.java b/api-web/api-interface/src/main/java/com/heyu/api/request/face/CompareFaceWithMaskReq.java new file mode 100644 index 0000000..95dafb2 --- /dev/null +++ b/api-web/api-interface/src/main/java/com/heyu/api/request/face/CompareFaceWithMaskReq.java @@ -0,0 +1,21 @@ +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/DetectPedestrianIntrusion + * + * 行人入侵检测 + * + * DetectPedestrianIntrusion + * + * + */ +@Data +public class CompareFaceWithMaskReq extends BaseRequest { + + + +} diff --git a/api-web/api-interface/src/main/java/com/heyu/api/request/face/DeepfakeFaceReq.java b/api-web/api-interface/src/main/java/com/heyu/api/request/face/DeepfakeFaceReq.java new file mode 100644 index 0000000..6015646 --- /dev/null +++ b/api-web/api-interface/src/main/java/com/heyu/api/request/face/DeepfakeFaceReq.java @@ -0,0 +1,26 @@ +package com.heyu.api.request.face; + +import com.heyu.api.controller.BaseController; +import com.heyu.api.request.CommonReq; +import lombok.Data; + +import java.util.List; + +/*** + * https://next.api.aliyun.com/api/facebody/2019-12-30/DeepfakeFace?RegionId=cn-shanghai&tab=DOC&lang=JAVA + *换脸鉴别 + * + * DeepfakeFace + * + */ +@Data +public class DeepfakeFaceReq extends BaseController { + + /*** + * 所有的图片 + */ + private List images; + + + +} diff --git a/api-web/api-interface/src/main/java/com/heyu/api/request/face/DetectBodyCountReq.java b/api-web/api-interface/src/main/java/com/heyu/api/request/face/DetectBodyCountReq.java new file mode 100644 index 0000000..a3ffdc8 --- /dev/null +++ b/api-web/api-interface/src/main/java/com/heyu/api/request/face/DetectBodyCountReq.java @@ -0,0 +1,20 @@ +package com.heyu.api.request.face; + + +import com.heyu.api.data.dto.BaseRequest; +import com.heyu.api.request.CommonReq; +import lombok.Data; + +/*** + * https://next.api.aliyun.com/api/facebody/2019-12-30/DetectBodyCount?RegionId=cn-shanghai + */ +@Data +public class DetectBodyCountReq extends CommonReq { + + + + + + + +} diff --git a/api-web/api-interface/src/main/java/com/heyu/api/resp/face/DeepfakeFaceListResp.java b/api-web/api-interface/src/main/java/com/heyu/api/resp/face/DeepfakeFaceListResp.java new file mode 100644 index 0000000..092cea5 --- /dev/null +++ b/api-web/api-interface/src/main/java/com/heyu/api/resp/face/DeepfakeFaceListResp.java @@ -0,0 +1,51 @@ +package com.heyu.api.resp.face; + + +import com.heyu.api.data.dto.BaseResp; +import lombok.Data; + + +/*** + * https://next.api.aliyun.com/api/facebody/2019-12-30/DeepfakeFace?RegionId=cn-shanghai&tab=DOC&lang=JAVA + * + *换脸鉴别 + * + * DeepfakeFace + * + */ +@Data +public class DeepfakeFaceListResp extends BaseResp { + + + /*** + * https://next.api.aliyun.com/api/facebody/2019-12-30/DeepfakeFace?RegionId=cn-shanghai&tab=DOC&lang=JAVA + * + * + * 检测结果的分类,取值包括: + * + * • normalface:真脸照片 + * + * • deepfakeface:换脸照片 + * + * 如果未检测到人脸,则Label 返回为 deepfake。 + * + * 示例值: + * + * normalface + */ + private String label; + + + /*** + * + * 取值范围为[0.00,100.00]。数值越低表示属于真脸的概率越大。 + * + * 示例值: + * 36.6455 + * + * + */ + private Float confidence; + + +} diff --git a/api-web/api-interface/src/main/java/com/heyu/api/resp/face/DeepfakeFaceResp.java b/api-web/api-interface/src/main/java/com/heyu/api/resp/face/DeepfakeFaceResp.java new file mode 100644 index 0000000..98975f9 --- /dev/null +++ b/api-web/api-interface/src/main/java/com/heyu/api/resp/face/DeepfakeFaceResp.java @@ -0,0 +1,35 @@ +package com.heyu.api.resp.face; + + +import com.heyu.api.data.dto.BaseResp; +import lombok.Data; + +import java.util.List; + +@Data +public class DeepfakeFaceResp extends BaseResp { + + /** + * 对应请求中的图像 URL 地址。 + * + * 示例值: + * http://viapi-test.oss-cn-shanghai.aliyuncs.com/viapi-3.0domepic/facebody/DeepfakeFace/DeepfakeFace1.jpg + */ + private String imageUrl; + + /*** + *单张图片检测到的人脸数量。展开详情 + * + * 注意 请注意,该值为 Long 类型,在某些语言中可能存在精度丢失的风险,请小心使用。 + * 示例值: + * 1 + */ + private Long faceNumber; + + + /*** + */ + private List deepfakeFaceListResps; + + +} diff --git a/api-web/api-interface/src/main/java/com/heyu/api/resp/face/DetectBodyCountResp.java b/api-web/api-interface/src/main/java/com/heyu/api/resp/face/DetectBodyCountResp.java new file mode 100644 index 0000000..c2b9f34 --- /dev/null +++ b/api-web/api-interface/src/main/java/com/heyu/api/resp/face/DetectBodyCountResp.java @@ -0,0 +1,25 @@ +package com.heyu.api.resp.face; + +import com.heyu.api.data.dto.BaseResp; +import lombok.Data; + +/*** + * https://next.api.aliyun.com/api/facebody/2019-12-30/DetectBodyCount?RegionId=cn-shanghai + *人体计数 + * + * DetectBodyCount + * + */ + +@Data +public class DetectBodyCountResp extends BaseResp { + + + /*** + * 人体的个数。 + * + * 示例值: + * 6 + */ + private Integer personNumber; +}