From 9cbbd2531ed5e950fe51a652c1994eb17da8cc45 Mon Sep 17 00:00:00 2001
From: 康鲁杰 <60095866+KangLujie@users.noreply.github.com>
Date: 星期一, 31 三月 2025 16:03:48 +0800
Subject: [PATCH] 抠图

---
 yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/digitalhumans/DigitalHumansServiceImpl.java |   20 +++++++++
 yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/digitalhumans/DigitalHumansServiceUtil.java |   50 +++++++++++++++++++++++--
 2 files changed, 65 insertions(+), 5 deletions(-)

diff --git a/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/digitalhumans/DigitalHumansServiceImpl.java b/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/digitalhumans/DigitalHumansServiceImpl.java
index 44f12c7..ab1358c 100644
--- a/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/digitalhumans/DigitalHumansServiceImpl.java
+++ b/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/digitalhumans/DigitalHumansServiceImpl.java
@@ -61,8 +61,26 @@
         digitalHumansMapper.updateById(updateObj);
 
         if (updateObj.getStatus() == 2){
+            DigitalHumansTrailVO digitalHumansTrailVO = transferVO(updateObj.getId());
+            if (digitalHumansTrailVO.getIsTransparent() == 1) {
+                digitalHumansMapper.update(
+                        new UpdateWrapper<DigitalHumansDO>()
+                                .lambda()
+                                .eq(DigitalHumansDO::getCode, digitalHumansTrailVO.getCode())  // 鏉′欢锛歝ode 绛変簬浼犲叆鐨勫��
+                                .set(DigitalHumansDO::getFixVideoUrl,digitalHumansTrailVO.getVideoUrl())
+                );
+            }
+            if (digitalHumansTrailVO.getIsTransparent() == 2) {
+                digitalHumansMapper.update(
+                        new UpdateWrapper<DigitalHumansDO>()
+                                .lambda()
+                                .eq(DigitalHumansDO::getCode, digitalHumansTrailVO.getCode())  // 鏉′欢锛歝ode 绛変簬浼犲叆鐨勫��
+                                .set(DigitalHumansDO::getStatus,6)
+                );
+                digitalHumansServiceUtil.remoteHeyGemMatting(digitalHumansTrailVO);
+
+            }
             //鍙楃悊鎵h棰�
-            digitalHumansServiceUtil.remoteHeyGemMatting(transferVO(updateObj.getId()));
         }
         //寮傛璁粌妯″瀷
         if (updateObj.getStatus() == 3){
diff --git a/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/digitalhumans/DigitalHumansServiceUtil.java b/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/digitalhumans/DigitalHumansServiceUtil.java
index 0e3b4ce..2763b98 100644
--- a/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/digitalhumans/DigitalHumansServiceUtil.java
+++ b/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/digitalhumans/DigitalHumansServiceUtil.java
@@ -1,5 +1,6 @@
 package cn.iocoder.yudao.module.digitalcourse.service.digitalhumans;
 
+import cn.hutool.http.HttpException;
 import cn.hutool.http.HttpRequest;
 import cn.hutool.http.HttpResponse;
 import cn.iocoder.yudao.module.digitalcourse.controller.admin.digitalhumans.vo.DigitalHumansTrailVO;
@@ -41,6 +42,8 @@
 public class DigitalHumansServiceUtil {
 
     private static final String HEYGEM_CORE_URL = "heygem.core.url";
+    private static final String VIDEO2MOV = "video2mov";
+    private static final String VIDEO2MOV_URL = "video2mov.url";
     private static final String HEYGEM_VOICE_DATA = "heygem.voice.data";
     private static final String HEYGEM_FACE2FACE = "heygem.face2face";
     private static final String EASEGEN_URL = "easegen.url";
@@ -62,7 +65,47 @@
     private FileApi fileApi;
 
     public void remoteHeyGemMatting(DigitalHumansTrailVO digitalHumansTrailVO) {
-        System.out.println(digitalHumansTrailVO);
+        String video2movUrl = configApi.getConfigValueByKey(VIDEO2MOV);
+        String extname = digitalHumansTrailVO.getVideoUrl().substring(digitalHumansTrailVO.getVideoUrl().lastIndexOf("."));
+        String modelFileName = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()) + extname;
+        String modelFilePath = Paths.get(video2movUrl, modelFileName).toString();
+
+        String substring = configApi.getConfigValueByKey(EASEGEN_URL) + digitalHumansTrailVO.getVideoUrl().substring(digitalHumansTrailVO.getVideoUrl().lastIndexOf("/"));
+
+        try {
+            Files.copy(Path.of(substring), Path.of(modelFilePath), StandardCopyOption.REPLACE_EXISTING);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        //modelFileName
+        try {
+            // 鍙戦�丳OST璇锋眰
+            HttpResponse execute = HttpRequest.get(configApi.getConfigValueByKey(VIDEO2MOV_URL) + "?file=" + modelFileName).execute();
+            String body = execute.body();
+            // 妫�鏌ュ搷搴旂姸鎬佺爜鏄惁鎴愬姛
+            if (execute.getStatus() != 200) {
+                digitalHumansMapper.update(new UpdateWrapper<DigitalHumansDO>().lambda().eq(DigitalHumansDO::getCode, digitalHumansTrailVO.getCode()).set(DigitalHumansDO::getStatus, 7));
+                return;
+            }
+            // 瑙f瀽鍝嶅簲锛屾鏌ユ槸鍚︽湁閿欒淇℃伅
+            JSONObject responseJson = JSON.parseObject(body);
+            String final_video_path = responseJson.getString("final_video_path");
+            byte[] content = Files.readAllBytes(Paths.get(final_video_path));
+            String fileUrl = fileApi.createFile(content);
+            digitalHumansMapper.update(
+                    new UpdateWrapper<DigitalHumansDO>()
+                            .lambda()
+                            .eq(DigitalHumansDO::getCode, digitalHumansTrailVO.getCode())  // 鏉′欢锛歝ode 绛変簬浼犲叆鐨勫��
+                            .set(DigitalHumansDO::getFixVideoUrl, fileUrl)
+                            .set(DigitalHumansDO::getStatus,2)
+            );
+            System.out.println(responseJson);
+            // 澶勭悊涓氬姟閫昏緫閿欒锛屾洿鏂扮姸鎬佸拰閿欒淇℃伅
+        } catch (HttpException e) {
+            throw new RuntimeException(e);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
     }
     @Async
     public void remoteHeyGemTrain(DigitalHumansTrailVO digitalHumansTrailVo){
@@ -75,12 +118,11 @@
         } catch (IOException e) {
             throw new RuntimeException(e);
         }
-        //todo 瑙嗛鎶犲浘
-        String extname = digitalHumansTrailVo.getVideoUrl().substring(digitalHumansTrailVo.getVideoUrl().lastIndexOf("."));
+        String extname = digitalHumansTrailVo.getFixVideoUrl().substring(digitalHumansTrailVo.getFixVideoUrl().lastIndexOf("."));
         String modelFileName = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()) + extname;
         String modelFilePath = Paths.get(temp, modelFileName).toString();
 
-        String substring = configApi.getConfigValueByKey(EASEGEN_URL)+digitalHumansTrailVo.getVideoUrl().substring(digitalHumansTrailVo.getVideoUrl().lastIndexOf("/"));
+        String substring = configApi.getConfigValueByKey(EASEGEN_URL)+digitalHumansTrailVo.getFixVideoUrl().substring(digitalHumansTrailVo.getFixVideoUrl().lastIndexOf("/"));
 
         try {
             Files.copy(Path.of(substring), Path.of(modelFilePath), StandardCopyOption.REPLACE_EXISTING);

--
Gitblit v1.9.3