Ver Fonte

测试Ai换脸

tsurumure há 1 ano atrás
pai
commit
6c9d892a1a

+ 133 - 0
src/main/java/com/backendsys/controller/api/TestController.java

@@ -1,5 +1,6 @@
 package com.backendsys.controller.api;
 
+import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 
@@ -8,12 +9,14 @@ import com.backendsys.aspect.QueuingPoll;
 //import com.backendsys.service.SDKService.SDKTinypng.SDKTinypngService;
 import com.backendsys.service.TestService;
 import com.backendsys.utils.ResourceUtil;
+import com.backendsys.utils.response.Result;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
 import cn.afterturn.easypoi.word.WordExportUtil;
 import com.backendsys.utils.MD5Util;
 
+import com.tencentcloudapi.common.Credential;
 import org.apache.poi.xwpf.usermodel.XWPFDocument;
 import org.redisson.api.*;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -34,11 +37,141 @@ import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
 
+//import com.tencentcloudapi.facefusion.v20181201.FacefusionClient;
+//import com.tencentcloudapi.facefusion.v20181201.models.*;
+
+//import com.tencentcloudapi.facefusion.v20220927.FacefusionClient;
+//import com.tencentcloudapi.facefusion.v20220927.models.*;
+
+//import com.tencentcloudapi.common.Credential;
+//import com.tencentcloudapi.common.profile.ClientProfile;
+//import com.tencentcloudapi.common.profile.HttpProfile;
+//import com.tencentcloudapi.common.exception.TencentCloudSDKException;
+//import com.tencentcloudapi.facefusion.v20181201.FacefusionClient;
+//import com.tencentcloudapi.facefusion.v20181201.models.*;
+
+
+import com.tencentcloudapi.common.CommonClient;
+import com.tencentcloudapi.common.Credential;
+import com.tencentcloudapi.common.exception.TencentCloudSDKException;
+
+
 
 @RestController
 @RequestMapping("/api/test")
 public class TestController {
 
+
+    @Value("${tencent.facefusion.secret-id}")
+    private String SECRET_ID;
+    @Value("${tencent.facefusion.secret-key}")
+    private String SECRET_KEY;
+
+
+
+    /*
+        // SubmitMediaModeration 提交审核任务
+        // DescribeMediaModeration 查询审核结果
+        // SubmitLongVideoFaceFusionJobPro 视频人脸融合异步处理任务,成功提交任务后返回任务的Job id 、预计完成时间以及目前队列长度。
+        // QueryVideoFaceFusionJob 通过Job Id查询视频人脸融合任务的进度和状态
+    */
+
+    /**
+     * [腾讯云-人脸融合] 提交审核任务 (视频)
+     */
+    @PostMapping("SubmitMediaModeration")
+    public String SubmitMediaModeration(@RequestBody Map<String, Object> requestBody) throws TencentCloudSDKException {
+
+        String videoUrl = (String) requestBody.get("videoUrl");
+//        String videoUrl = "https://guangzhou-1320301544.cos-website.ap-guangzhou.myqcloud.com/test/ai-face/video/3.mp4";
+
+        Credential cred = new Credential(SECRET_ID, SECRET_KEY);
+        CommonClient client = new CommonClient("facefusion", "2022-09-27", cred, "ap-guangzhou");
+
+        String param = "{\"VideoUrl\":\"" + videoUrl + "\"}";
+        String resp = client.call("SubmitMediaModeration", param);
+        System.out.println(resp);
+        return resp;
+    }
+
+    /**
+     * [腾讯云-人脸融合] 查询审核结果
+     */
+    @GetMapping("DescribeMediaModeration")
+    public String DescribeMediaModeration(String JobId) throws TencentCloudSDKException {
+        Credential cred = new Credential(SECRET_ID, SECRET_KEY);
+        CommonClient client = new CommonClient("facefusion", "2022-09-27", cred, "ap-guangzhou");
+
+        String param = "{\"JobId\":\"" + JobId + "\"}";
+        String resp = client.call("DescribeMediaModeration", param);
+        System.out.println(resp);
+        return resp;
+    }
+
+    /**
+     * 视频人脸融合异步处理任务,成功提交任务后返回任务的Job id 、预计完成时间以及目前队列长度。
+     */
+    @PostMapping("/SubmitLongVideoFaceFusionJobPro")
+    public String SubmitLongVideoFaceFusionJobPro(@RequestBody Map<String, Object> requestBody) {
+        try {
+            // 从Map中获取参数
+            List<Map<String, Object>> TemplateInfos = (List<Map<String, Object>>) requestBody.get("TemplateInfos");
+            List<Map<String, Object>> MergeInfos = (List<Map<String, Object>>) requestBody.get("MergeInfos");
+            String VideoUrl = (String) requestBody.get("VideoUrl");
+            /*
+            https://guangzhou-1320301544.cos-website.ap-guangzhou.myqcloud.com/test/ai-face/face/fe-1.png
+            https://guangzhou-1320301544.cos-website.ap-guangzhou.myqcloud.com/test/ai-face/face/fe-2.jpg
+            https://guangzhou-1320301544.cos-website.ap-guangzhou.myqcloud.com/test/ai-face/face/m-1.png
+            https://guangzhou-1320301544.cos-website.ap-guangzhou.myqcloud.com/test/ai-face/face/m-2.png
+             */
+            //        String imgUrl = "https://guangzhou-1320301544.cos-website.ap-guangzhou.myqcloud.com/test/ai-face/face/fe-2.jpg";
+            //        String videoUrl = "https://guangzhou-1320301544.cos-website.ap-guangzhou.myqcloud.com/test/ai-face/video/3.mp4";
+
+            Credential cred = new Credential(SECRET_ID, SECRET_KEY);
+            //        FacefusionClient client = new FacefusionClient(cred, "ap-guangzhou");
+            CommonClient client = new CommonClient("facefusion", "2022-09-27", cred, "ap-guangzhou");
+
+            JSONObject param = new JSONObject();
+            JSONArray paramMergeInfos = JSONUtil.parseArray(MergeInfos);
+            JSONArray paramTemplateInfos = JSONUtil.parseArray(TemplateInfos);
+
+            System.out.println("paramMergeInfos:");
+            System.out.println(paramMergeInfos);
+            System.out.println("paramTemplateInfos:");
+            System.out.println(paramTemplateInfos);
+
+            param.set("VideoUrl", VideoUrl);
+            param.set("MergeInfos", MergeInfos);
+            param.set("TemplateInfos", TemplateInfos);
+
+            System.out.println("param:");
+            System.out.println(param);
+
+            String resp = client.call("SubmitLongVideoFaceFusionJobPro", JSONUtil.toJsonStr(param));
+            System.out.println(resp);
+            return resp;
+        } catch (TencentCloudSDKException e) {
+            System.out.println(e);
+            System.out.println(e.getMessage());
+            return e.getMessage();
+        }
+    }
+
+    /**
+     *  通过Job Id查询视频人脸融合任务的进度和状态
+     */
+    @GetMapping("QueryVideoFaceFusionJob")
+    public String QueryVideoFaceFusionJob(String JobId) throws TencentCloudSDKException {
+        Credential cred = new Credential(SECRET_ID, SECRET_KEY);
+        CommonClient client = new CommonClient("facefusion", "2022-09-27", cred, "ap-guangzhou");
+
+        String param = "{\"JobId\":\"" + JobId + "\"}";
+        String resp = client.call("QueryVideoFaceFusionJob", param);
+        System.out.println(resp);
+        return resp;
+    }
+
+
     @Value("${file.upload.directory}") // 配置保存文件的目录
     private String uploadDirectory;
 

+ 3 - 0
src/main/resources/application-dev.yml

@@ -74,6 +74,9 @@ aliyun:
 
 # 腾讯云
 tencent:
+  facefusion:
+    secret-id: AKIDlNn7F9tRlCWsIe7d3IOM9mAIRhsIfxAV
+    secret-key: c9Zt0sa5UzQf4HNOURAetFYfehqwpolc
   sms:
     debug: false
     secret-id: AKIDITiApJZjt27AEOhzA92467Nbilw4RyRp

+ 3 - 0
src/main/resources/application-local.yml

@@ -72,6 +72,9 @@ aliyun:
 
 # 腾讯云
 tencent:
+  facefusion:
+    secret-id: AKIDlNn7F9tRlCWsIe7d3IOM9mAIRhsIfxAV
+    secret-key: c9Zt0sa5UzQf4HNOURAetFYfehqwpolc
   sms:
     debug: false
     secret-id: AKIDITiApJZjt27AEOhzA92467Nbilw4RyRp