From ecdc51057ba5d0e16ea2b27d32d24540b6bbcf48 Mon Sep 17 00:00:00 2001
From: Flex <q1406482700@163.com>
Date: 星期四, 27 三月 2025 14:10:57 +0800
Subject: [PATCH] 修改模型人物视频上传

---
 easegen-front/package.json                                                |    4 
 easegen-front/src/views/digitalcourse/digitalhumans/CES2.vue              |  189 ++++++++++++++
 easegen-front/vite.config.ts                                              |   15 +
 easegen-front/src/views/digitalcourse/digitalhumans/DigitalHumansForm.vue |   57 ++++
 easegen-front/package-lock.json                                           |  499 +++++++++++++++++++++++++++++++++++++-
 5 files changed, 744 insertions(+), 20 deletions(-)

diff --git a/easegen-front/package-lock.json b/easegen-front/package-lock.json
index dea2474..06e5ba6 100644
--- a/easegen-front/package-lock.json
+++ b/easegen-front/package-lock.json
@@ -10,10 +10,13 @@
       "license": "MIT",
       "dependencies": {
         "@element-plus/icons-vue": "^2.1.0",
+        "@ffmpeg/ffmpeg": "^0.9.8",
         "@form-create/designer": "^3.2.6",
         "@form-create/element-ui": "^3.2.11",
         "@iconify/iconify": "^3.1.1",
         "@microsoft/fetch-event-source": "^2.0.1",
+        "@tensorflow-models/body-pix": "^2.2.1",
+        "@tensorflow/tfjs": "^3.21.0",
         "@videojs-player/vue": "^1.0.0",
         "@vueuse/core": "^10.9.0",
         "@wangeditor/editor": "^5.1.23",
@@ -70,6 +73,7 @@
       "devDependencies": {
         "@commitlint/cli": "^19.0.1",
         "@commitlint/config-conventional": "^19.0.0",
+        "@ffmpeg/core": "^0.10.0",
         "@iconify/json": "^2.2.187",
         "@intlify/unplugin-vue-i18n": "^2.0.0",
         "@purge-icons/generated": "^0.9.0",
@@ -3070,6 +3074,34 @@
         "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
       }
     },
+    "node_modules/@ffmpeg/core": {
+      "version": "0.10.0",
+      "resolved": "https://registry.npmmirror.com/@ffmpeg/core/-/core-0.10.0.tgz",
+      "integrity": "sha512-qunWJl5PezpXEm31tb8Qu5z37B5KVA1VYZCpXchMhuAb3X9T7PuE3SlhOwphEoRhzaOa3lpofDfzihAUMFaVPQ==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@ffmpeg/ffmpeg": {
+      "version": "0.9.8",
+      "resolved": "https://registry.npmmirror.com/@ffmpeg/ffmpeg/-/ffmpeg-0.9.8.tgz",
+      "integrity": "sha512-QradleJx78hHJBtI1wRsus1L1jxQB3v4h6k8c3CERI9fssm+NSSppuofmsOei7uq7iQEYq3oK9tJNAyEsRoNng==",
+      "license": "MIT",
+      "dependencies": {
+        "is-url": "^1.2.4",
+        "node-fetch": "^2.6.1",
+        "regenerator-runtime": "^0.13.7",
+        "resolve-url": "^0.2.1"
+      },
+      "engines": {
+        "node": ">=12.16.1"
+      }
+    },
+    "node_modules/@ffmpeg/ffmpeg/node_modules/regenerator-runtime": {
+      "version": "0.13.11",
+      "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
+      "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==",
+      "license": "MIT"
+    },
     "node_modules/@floating-ui/core": {
       "version": "1.6.9",
       "resolved": "https://registry.npmmirror.com/@floating-ui/core/-/core-1.6.9.tgz",
@@ -4182,6 +4214,394 @@
         "@swc/counter": "^0.1.3"
       }
     },
+    "node_modules/@tensorflow-models/body-pix": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmmirror.com/@tensorflow-models/body-pix/-/body-pix-2.2.1.tgz",
+      "integrity": "sha512-JeZHcpVMR0mW2znmF0FpZ0f7zpSY7c6+A7FBOmcIyZupTkXmG3MwGGqFPsVjRBwfqaKa4qYCJd7Svqo6rMzJYw==",
+      "license": "Apache-2.0",
+      "peerDependencies": {
+        "@tensorflow/tfjs-backend-webgl": "^4.10.0",
+        "@tensorflow/tfjs-converter": "^4.10.0",
+        "@tensorflow/tfjs-core": "^4.10.0"
+      }
+    },
+    "node_modules/@tensorflow/tfjs": {
+      "version": "3.21.0",
+      "resolved": "https://registry.npmmirror.com/@tensorflow/tfjs/-/tfjs-3.21.0.tgz",
+      "integrity": "sha512-khcARd3/872llL/oF4ouR40qlT71mylU66PGT8kHP/GJ5YKj44sv8lDRjU7lOVlJK7jsJFWEsNVHI3eMc/GWNQ==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@tensorflow/tfjs-backend-cpu": "3.21.0",
+        "@tensorflow/tfjs-backend-webgl": "3.21.0",
+        "@tensorflow/tfjs-converter": "3.21.0",
+        "@tensorflow/tfjs-core": "3.21.0",
+        "@tensorflow/tfjs-data": "3.21.0",
+        "@tensorflow/tfjs-layers": "3.21.0",
+        "argparse": "^1.0.10",
+        "chalk": "^4.1.0",
+        "core-js": "3",
+        "regenerator-runtime": "^0.13.5",
+        "yargs": "^16.0.3"
+      },
+      "bin": {
+        "tfjs-custom-module": "dist/tools/custom_module/cli.js"
+      }
+    },
+    "node_modules/@tensorflow/tfjs-backend-cpu": {
+      "version": "4.22.0",
+      "resolved": "https://registry.npmmirror.com/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-4.22.0.tgz",
+      "integrity": "sha512-1u0FmuLGuRAi8D2c3cocHTASGXOmHc/4OvoVDENJayjYkS119fcTcQf4iHrtLthWyDIPy3JiPhRrZQC9EwnhLw==",
+      "license": "Apache-2.0",
+      "peer": true,
+      "dependencies": {
+        "@types/seedrandom": "^2.4.28",
+        "seedrandom": "^3.0.5"
+      },
+      "engines": {
+        "yarn": ">= 1.3.2"
+      },
+      "peerDependencies": {
+        "@tensorflow/tfjs-core": "4.22.0"
+      }
+    },
+    "node_modules/@tensorflow/tfjs-backend-webgl": {
+      "version": "4.22.0",
+      "resolved": "https://registry.npmmirror.com/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-4.22.0.tgz",
+      "integrity": "sha512-H535XtZWnWgNwSzv538czjVlbJebDl5QTMOth4RXr2p/kJ1qSIXE0vZvEtO+5EC9b00SvhplECny2yDewQb/Yg==",
+      "license": "Apache-2.0",
+      "peer": true,
+      "dependencies": {
+        "@tensorflow/tfjs-backend-cpu": "4.22.0",
+        "@types/offscreencanvas": "~2019.3.0",
+        "@types/seedrandom": "^2.4.28",
+        "seedrandom": "^3.0.5"
+      },
+      "engines": {
+        "yarn": ">= 1.3.2"
+      },
+      "peerDependencies": {
+        "@tensorflow/tfjs-core": "4.22.0"
+      }
+    },
+    "node_modules/@tensorflow/tfjs-converter": {
+      "version": "4.22.0",
+      "resolved": "https://registry.npmmirror.com/@tensorflow/tfjs-converter/-/tfjs-converter-4.22.0.tgz",
+      "integrity": "sha512-PT43MGlnzIo+YfbsjM79Lxk9lOq6uUwZuCc8rrp0hfpLjF6Jv8jS84u2jFb+WpUeuF4K33ZDNx8CjiYrGQ2trQ==",
+      "license": "Apache-2.0",
+      "peer": true,
+      "peerDependencies": {
+        "@tensorflow/tfjs-core": "4.22.0"
+      }
+    },
+    "node_modules/@tensorflow/tfjs-core": {
+      "version": "4.22.0",
+      "resolved": "https://registry.npmmirror.com/@tensorflow/tfjs-core/-/tfjs-core-4.22.0.tgz",
+      "integrity": "sha512-LEkOyzbknKFoWUwfkr59vSB68DMJ4cjwwHgicXN0DUi3a0Vh1Er3JQqCI1Hl86GGZQvY8ezVrtDIvqR1ZFW55A==",
+      "license": "Apache-2.0",
+      "peer": true,
+      "dependencies": {
+        "@types/long": "^4.0.1",
+        "@types/offscreencanvas": "~2019.7.0",
+        "@types/seedrandom": "^2.4.28",
+        "@webgpu/types": "0.1.38",
+        "long": "4.0.0",
+        "node-fetch": "~2.6.1",
+        "seedrandom": "^3.0.5"
+      },
+      "engines": {
+        "yarn": ">= 1.3.2"
+      }
+    },
+    "node_modules/@tensorflow/tfjs-core/node_modules/@types/offscreencanvas": {
+      "version": "2019.7.3",
+      "resolved": "https://registry.npmmirror.com/@types/offscreencanvas/-/offscreencanvas-2019.7.3.tgz",
+      "integrity": "sha512-ieXiYmgSRXUDeOntE1InxjWyvEelZGP63M+cGuquuRLuIKKT1osnkXjxev9B7d1nXSug5vpunx+gNlbVxMlC9A==",
+      "license": "MIT",
+      "peer": true
+    },
+    "node_modules/@tensorflow/tfjs-core/node_modules/node-fetch": {
+      "version": "2.6.13",
+      "resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.6.13.tgz",
+      "integrity": "sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA==",
+      "license": "MIT",
+      "peer": true,
+      "dependencies": {
+        "whatwg-url": "^5.0.0"
+      },
+      "engines": {
+        "node": "4.x || >=6.0.0"
+      },
+      "peerDependencies": {
+        "encoding": "^0.1.0"
+      },
+      "peerDependenciesMeta": {
+        "encoding": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@tensorflow/tfjs/node_modules/@tensorflow/tfjs-backend-cpu": {
+      "version": "3.21.0",
+      "resolved": "https://registry.npmmirror.com/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-3.21.0.tgz",
+      "integrity": "sha512-88S21UAdzyK0CsLUrH17GPTD+26E85OP9CqmLZslaWjWUmBkeTQ5Zqyp6iK+gELnLxPx6q7JsNEeFuPv4254lQ==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@types/seedrandom": "^2.4.28",
+        "seedrandom": "^3.0.5"
+      },
+      "engines": {
+        "yarn": ">= 1.3.2"
+      },
+      "peerDependencies": {
+        "@tensorflow/tfjs-core": "3.21.0"
+      }
+    },
+    "node_modules/@tensorflow/tfjs/node_modules/@tensorflow/tfjs-backend-webgl": {
+      "version": "3.21.0",
+      "resolved": "https://registry.npmmirror.com/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-3.21.0.tgz",
+      "integrity": "sha512-N4zitIAT9IX8B8oe489qM3f3VcESxGZIZvHmVP8varOQakTvTX859aaPo1s8hK1qCy4BjSGbweooZe4U8D4kTQ==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@tensorflow/tfjs-backend-cpu": "3.21.0",
+        "@types/offscreencanvas": "~2019.3.0",
+        "@types/seedrandom": "^2.4.28",
+        "@types/webgl-ext": "0.0.30",
+        "@types/webgl2": "0.0.6",
+        "seedrandom": "^3.0.5"
+      },
+      "engines": {
+        "yarn": ">= 1.3.2"
+      },
+      "peerDependencies": {
+        "@tensorflow/tfjs-core": "3.21.0"
+      }
+    },
+    "node_modules/@tensorflow/tfjs/node_modules/@tensorflow/tfjs-converter": {
+      "version": "3.21.0",
+      "resolved": "https://registry.npmmirror.com/@tensorflow/tfjs-converter/-/tfjs-converter-3.21.0.tgz",
+      "integrity": "sha512-12Y4zVDq3yW+wSjSDpSv4HnpL2sDZrNiGSg8XNiDE4HQBdjdA+a+Q3sZF/8NV9y2yoBhL5L7V4mMLDdbZBd9/Q==",
+      "license": "Apache-2.0",
+      "peerDependencies": {
+        "@tensorflow/tfjs-core": "3.21.0"
+      }
+    },
+    "node_modules/@tensorflow/tfjs/node_modules/@tensorflow/tfjs-core": {
+      "version": "3.21.0",
+      "resolved": "https://registry.npmmirror.com/@tensorflow/tfjs-core/-/tfjs-core-3.21.0.tgz",
+      "integrity": "sha512-YSfsswOqWfd+M4bXIhT3hwtAb+IV8+ODwIxwdFR/7jTAPZP1wMVnSlpKnXHAN64HFOiP+Tm3HmKusEZ0+09A0w==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@types/long": "^4.0.1",
+        "@types/offscreencanvas": "~2019.3.0",
+        "@types/seedrandom": "^2.4.28",
+        "@types/webgl-ext": "0.0.30",
+        "@webgpu/types": "0.1.16",
+        "long": "4.0.0",
+        "node-fetch": "~2.6.1",
+        "seedrandom": "^3.0.5"
+      },
+      "engines": {
+        "yarn": ">= 1.3.2"
+      }
+    },
+    "node_modules/@tensorflow/tfjs/node_modules/@tensorflow/tfjs-data": {
+      "version": "3.21.0",
+      "resolved": "https://registry.npmmirror.com/@tensorflow/tfjs-data/-/tfjs-data-3.21.0.tgz",
+      "integrity": "sha512-eFLfw2wIcFNxnP2Iv/SnVlihehzKMumk1b5Prcx1ixk/SbkCo5u0Lt7OVOWaEOKVqvB2sT+dJcTjAh6lrCC/QA==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@types/node-fetch": "^2.1.2",
+        "node-fetch": "~2.6.1",
+        "string_decoder": "^1.3.0"
+      },
+      "peerDependencies": {
+        "@tensorflow/tfjs-core": "3.21.0",
+        "seedrandom": "^3.0.5"
+      }
+    },
+    "node_modules/@tensorflow/tfjs/node_modules/@tensorflow/tfjs-layers": {
+      "version": "3.21.0",
+      "resolved": "https://registry.npmmirror.com/@tensorflow/tfjs-layers/-/tfjs-layers-3.21.0.tgz",
+      "integrity": "sha512-CMVXsraakXgnXEnqD9QbtResA7nvV7Jz20pGmjFIodcQkClgmFFhdCG5N+zlVRHEz7VKG2OyfhltZ0dBq/OAhA==",
+      "license": "Apache-2.0 AND MIT",
+      "peerDependencies": {
+        "@tensorflow/tfjs-core": "3.21.0"
+      }
+    },
+    "node_modules/@tensorflow/tfjs/node_modules/@webgpu/types": {
+      "version": "0.1.16",
+      "resolved": "https://registry.npmmirror.com/@webgpu/types/-/types-0.1.16.tgz",
+      "integrity": "sha512-9E61voMP4+Rze02jlTXud++Htpjyyk8vw5Hyw9FGRrmhHQg2GqbuOfwf5Klrb8vTxc2XWI3EfO7RUHMpxTj26A==",
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/@tensorflow/tfjs/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "license": "MIT",
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/@tensorflow/tfjs/node_modules/argparse": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmmirror.com/argparse/-/argparse-1.0.10.tgz",
+      "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+      "license": "MIT",
+      "dependencies": {
+        "sprintf-js": "~1.0.2"
+      }
+    },
+    "node_modules/@tensorflow/tfjs/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/@tensorflow/tfjs/node_modules/cliui": {
+      "version": "7.0.4",
+      "resolved": "https://registry.npmmirror.com/cliui/-/cliui-7.0.4.tgz",
+      "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+      "license": "ISC",
+      "dependencies": {
+        "string-width": "^4.2.0",
+        "strip-ansi": "^6.0.0",
+        "wrap-ansi": "^7.0.0"
+      }
+    },
+    "node_modules/@tensorflow/tfjs/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "license": "MIT",
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/@tensorflow/tfjs/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "license": "MIT"
+    },
+    "node_modules/@tensorflow/tfjs/node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+      "license": "MIT"
+    },
+    "node_modules/@tensorflow/tfjs/node_modules/is-fullwidth-code-point": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+      "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@tensorflow/tfjs/node_modules/node-fetch": {
+      "version": "2.6.13",
+      "resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.6.13.tgz",
+      "integrity": "sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA==",
+      "license": "MIT",
+      "dependencies": {
+        "whatwg-url": "^5.0.0"
+      },
+      "engines": {
+        "node": "4.x || >=6.0.0"
+      },
+      "peerDependencies": {
+        "encoding": "^0.1.0"
+      },
+      "peerDependenciesMeta": {
+        "encoding": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@tensorflow/tfjs/node_modules/regenerator-runtime": {
+      "version": "0.13.11",
+      "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
+      "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==",
+      "license": "MIT"
+    },
+    "node_modules/@tensorflow/tfjs/node_modules/string-width": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "license": "MIT",
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@tensorflow/tfjs/node_modules/wrap-ansi": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+      "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.0.0",
+        "string-width": "^4.1.0",
+        "strip-ansi": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+      }
+    },
+    "node_modules/@tensorflow/tfjs/node_modules/yargs": {
+      "version": "16.2.0",
+      "resolved": "https://registry.npmmirror.com/yargs/-/yargs-16.2.0.tgz",
+      "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+      "license": "MIT",
+      "dependencies": {
+        "cliui": "^7.0.2",
+        "escalade": "^3.1.1",
+        "get-caller-file": "^2.0.5",
+        "require-directory": "^2.1.1",
+        "string-width": "^4.2.0",
+        "y18n": "^5.0.5",
+        "yargs-parser": "^20.2.2"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/@tensorflow/tfjs/node_modules/yargs-parser": {
+      "version": "20.2.9",
+      "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.9.tgz",
+      "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+      "license": "ISC",
+      "engines": {
+        "node": ">=10"
+      }
+    },
     "node_modules/@transloadit/prettier-bytes": {
       "version": "0.0.7",
       "resolved": "https://registry.npmmirror.com/@transloadit/prettier-bytes/-/prettier-bytes-0.0.7.tgz",
@@ -4479,13 +4899,28 @@
         "@types/lodash": "*"
       }
     },
+    "node_modules/@types/long": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmmirror.com/@types/long/-/long-4.0.2.tgz",
+      "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==",
+      "license": "MIT"
+    },
     "node_modules/@types/node": {
       "version": "20.14.11",
       "resolved": "https://registry.npmmirror.com/@types/node/-/node-20.14.11.tgz",
       "integrity": "sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA==",
-      "devOptional": true,
       "dependencies": {
         "undici-types": "~5.26.4"
+      }
+    },
+    "node_modules/@types/node-fetch": {
+      "version": "2.6.12",
+      "resolved": "https://registry.npmmirror.com/@types/node-fetch/-/node-fetch-2.6.12.tgz",
+      "integrity": "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/node": "*",
+        "form-data": "^4.0.0"
       }
     },
     "node_modules/@types/nprogress": {
@@ -4493,6 +4928,12 @@
       "resolved": "https://registry.npmmirror.com/@types/nprogress/-/nprogress-0.2.3.tgz",
       "integrity": "sha512-k7kRA033QNtC+gLc4VPlfnue58CM1iQLgn1IMAU8VPHGOj7oIHPp9UlhedEnD/Gl8evoCjwkZjlBORtZ3JByUA==",
       "dev": true
+    },
+    "node_modules/@types/offscreencanvas": {
+      "version": "2019.3.0",
+      "resolved": "https://registry.npmmirror.com/@types/offscreencanvas/-/offscreencanvas-2019.3.0.tgz",
+      "integrity": "sha512-esIJx9bQg+QYF0ra8GnvfianIY8qWB0GBx54PK5Eps6m+xTj86KLavHv6qDhzKcu5UUOgNfJ2pWaIIV7TRUd9Q==",
+      "license": "MIT"
     },
     "node_modules/@types/qrcode": {
       "version": "1.5.5",
@@ -4508,6 +4949,12 @@
       "resolved": "https://registry.npmmirror.com/@types/qs/-/qs-6.9.15.tgz",
       "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==",
       "dev": true
+    },
+    "node_modules/@types/seedrandom": {
+      "version": "2.4.34",
+      "resolved": "https://registry.npmmirror.com/@types/seedrandom/-/seedrandom-2.4.34.tgz",
+      "integrity": "sha512-ytDiArvrn/3Xk6/vtylys5tlY6eo7Ane0hvcx++TKo6RxQXuVfW0AF/oeWqAj9dN29SyhtawuXstgmPlwNcv/A==",
+      "license": "MIT"
     },
     "node_modules/@types/semver": {
       "version": "7.5.8",
@@ -4539,6 +4986,18 @@
       "version": "0.0.20",
       "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz",
       "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow=="
+    },
+    "node_modules/@types/webgl-ext": {
+      "version": "0.0.30",
+      "resolved": "https://registry.npmmirror.com/@types/webgl-ext/-/webgl-ext-0.0.30.tgz",
+      "integrity": "sha512-LKVgNmBxN0BbljJrVUwkxwRYqzsAEPcZOe6S2T6ZaBDIrFp0qu4FNlpc5sM1tGbXUYFgdVQIoeLk1Y1UoblyEg==",
+      "license": "MIT"
+    },
+    "node_modules/@types/webgl2": {
+      "version": "0.0.6",
+      "resolved": "https://registry.npmmirror.com/@types/webgl2/-/webgl2-0.0.6.tgz",
+      "integrity": "sha512-50GQhDVTq/herLMiqSQkdtRu+d5q/cWHn4VvKJtrj4DJAjo1MNkWYa2MA41BaBO1q1HgsUjuQvEOk0QHvlnAaQ==",
+      "license": "MIT"
     },
     "node_modules/@typescript-eslint/eslint-plugin": {
       "version": "7.17.0",
@@ -6075,6 +6534,13 @@
         "snabbdom": "^3.1.0"
       }
     },
+    "node_modules/@webgpu/types": {
+      "version": "0.1.38",
+      "resolved": "https://registry.npmmirror.com/@webgpu/types/-/types-0.1.38.tgz",
+      "integrity": "sha512-7LrhVKz2PRh+DD7+S+PVaFd5HxaWQvoMqBbsV9fNJO1pjUs1P8bM2vQVNfk+3URTqbuTI7gkXi0rfsN0IadoBA==",
+      "license": "BSD-3-Clause",
+      "peer": true
+    },
     "node_modules/@xmldom/xmldom": {
       "version": "0.8.10",
       "resolved": "https://registry.npmmirror.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz",
@@ -7370,7 +7836,6 @@
       "version": "3.37.1",
       "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.37.1.tgz",
       "integrity": "sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==",
-      "dev": true,
       "hasInstallScript": true,
       "funding": {
         "type": "opencollective",
@@ -10290,7 +10755,6 @@
       "version": "4.0.0",
       "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
       "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-      "dev": true,
       "engines": {
         "node": ">=8"
       }
@@ -11873,6 +12337,12 @@
         "node": ">=0.8.0"
       }
     },
+    "node_modules/long": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/long/-/long-4.0.0.tgz",
+      "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==",
+      "license": "Apache-2.0"
+    },
     "node_modules/lru-cache": {
       "version": "5.1.1",
       "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz",
@@ -12467,7 +12937,6 @@
       "version": "2.7.0",
       "resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.7.0.tgz",
       "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
-      "dev": true,
       "dependencies": {
         "whatwg-url": "^5.0.0"
       },
@@ -14187,8 +14656,7 @@
       "version": "0.2.1",
       "resolved": "https://registry.npmmirror.com/resolve-url/-/resolve-url-0.2.1.tgz",
       "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==",
-      "deprecated": "https://github.com/lydell/resolve-url#deprecated",
-      "dev": true
+      "deprecated": "https://github.com/lydell/resolve-url#deprecated"
     },
     "node_modules/restore-cursor": {
       "version": "4.0.0",
@@ -14402,7 +14870,6 @@
       "version": "5.2.1",
       "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz",
       "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
-      "dev": true,
       "funding": [
         {
           "type": "github",
@@ -14521,6 +14988,12 @@
       "resolved": "https://registry.npmmirror.com/scule/-/scule-1.3.0.tgz",
       "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==",
       "dev": true
+    },
+    "node_modules/seedrandom": {
+      "version": "3.0.5",
+      "resolved": "https://registry.npmmirror.com/seedrandom/-/seedrandom-3.0.5.tgz",
+      "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==",
+      "license": "MIT"
     },
     "node_modules/selection-update": {
       "version": "0.1.2",
@@ -15048,7 +15521,6 @@
       "version": "1.3.0",
       "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz",
       "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
-      "dev": true,
       "dependencies": {
         "safe-buffer": "~5.2.0"
       }
@@ -15520,7 +15992,6 @@
       "version": "7.2.0",
       "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
       "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-      "dev": true,
       "dependencies": {
         "has-flag": "^4.0.0"
       },
@@ -16161,8 +16632,7 @@
     "node_modules/tr46": {
       "version": "0.0.3",
       "resolved": "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz",
-      "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
-      "dev": true
+      "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
     },
     "node_modules/traverse": {
       "version": "0.6.9",
@@ -16376,8 +16846,7 @@
     "node_modules/undici-types": {
       "version": "5.26.5",
       "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-5.26.5.tgz",
-      "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
-      "devOptional": true
+      "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="
     },
     "node_modules/unicode-canonical-property-names-ecmascript": {
       "version": "2.0.0",
@@ -17408,8 +17877,7 @@
     "node_modules/webidl-conversions": {
       "version": "3.0.1",
       "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
-      "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
-      "dev": true
+      "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
     },
     "node_modules/webpack-sources": {
       "version": "3.2.3",
@@ -17430,7 +17898,6 @@
       "version": "5.0.0",
       "resolved": "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz",
       "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
-      "dev": true,
       "dependencies": {
         "tr46": "~0.0.3",
         "webidl-conversions": "^3.0.0"
diff --git a/easegen-front/package.json b/easegen-front/package.json
index 5b71831..a1621e5 100644
--- a/easegen-front/package.json
+++ b/easegen-front/package.json
@@ -25,6 +25,9 @@
     "lint:lint-staged": "lint-staged -c "
   },
   "dependencies": {
+    "@ffmpeg/ffmpeg": "^0.9.8",
+    "@tensorflow-models/body-pix": "^2.2.1",
+    "@tensorflow/tfjs": "^3.21.0",
     "@element-plus/icons-vue": "^2.1.0",
     "@form-create/designer": "^3.2.6",
     "@form-create/element-ui": "^3.2.11",
@@ -101,6 +104,7 @@
     "@vitejs/plugin-legacy": "^5.3.1",
     "@vitejs/plugin-vue": "^5.0.4",
     "@vitejs/plugin-vue-jsx": "^3.1.0",
+    "@ffmpeg/core": "^0.10.0",
     "autoprefixer": "^10.4.17",
     "bpmn-js": "8.9.0",
     "bpmn-js-properties-panel": "0.46.0",
diff --git a/easegen-front/src/views/digitalcourse/digitalhumans/CES2.vue b/easegen-front/src/views/digitalcourse/digitalhumans/CES2.vue
new file mode 100644
index 0000000..ad8c1e0
--- /dev/null
+++ b/easegen-front/src/views/digitalcourse/digitalhumans/CES2.vue
@@ -0,0 +1,189 @@
+<template>
+    <div>
+        <input type="file" @change="handleFileChange" accept="video/*" />
+        <div> 璇蜂笂浼� <span style="color: red;" >mp4</span> 鏍煎紡鏂囦欢 </div>
+    </div>
+</template>
+
+<script setup>
+import { onMounted, ref } from 'vue';
+import * as bodyPix from '@tensorflow-models/body-pix';
+import '@tensorflow/tfjs-backend-webgl';
+import { createFFmpeg, fetchFile } from '@ffmpeg/ffmpeg';
+import * as FileApi from '@/api/infra/file'
+import CryptoJS from 'crypto-js'
+// import { UploadRawFile, UploadRequestOptions } from 'element-plus/es/components/upload/src/upload'
+import axios from 'axios'
+
+// 瀹氫箟鍝嶅簲寮忓彉閲�
+const net = ref(null);
+const downloadUrl = ref(null);
+const ffmpeg = ref(null);
+const videoElement = ref(null);
+const canvas = ref(null);
+const ctx = ref(null);
+const frameRate = ref(30);
+const frameDuration = ref(1000 / 30);
+const segments = ref([]);
+const getUploadUrl= ref("")
+// 鏂囦欢鍚嶇О
+const fileName = ref("")
+// 鏂囦欢绫诲瀷
+const fileType = ref("")
+const emit = defineEmits(['Thnd','start'])
+onMounted(async () => {
+    /**
+ * 鑾峰緱涓婁紶 URL
+ */
+    getUploadUrl.value = import.meta.env.VITE_BASE_URL + import.meta.env.VITE_API_URL + '/infra/file/upload';
+    ffmpeg.value = createFFmpeg({ log: true });
+    await ffmpeg.value.load();
+    net.value = await bodyPix.load({
+        architecture: 'MobileNetV1',
+        outputStride: 16,
+        multiplier: 0.5,
+        quantizationBytes: 2
+    });
+});
+
+const handleFileChange = (e) => {
+    const file = e.target.files[0];
+    if (file) {
+        emit('start')
+        fileName.value = file.name
+        fileType.value = file.type
+        handleVideoProcessing(file);
+    }
+};
+
+const handleVideoProcessing = async (file) => {
+    videoElement.value = document.createElement('video');
+    videoElement.value.muted = true;
+    videoElement.value.src = URL.createObjectURL(file);
+    await new Promise((resolve, reject) => {
+        videoElement.value.onloadedmetadata = () => {
+            videoElement.value.play();
+            resolve();
+        };
+        videoElement.value.onerror = () => {
+            reject(new Error('瑙嗛鍔犺浇澶辫触'));
+        };
+    });
+    canvas.value = document.createElement('canvas');
+    canvas.value.width = 640;
+    canvas.value.height = 480;
+    ctx.value = canvas.value.getContext('2d');
+    segments.value = [];
+    processFrame();
+};
+
+const processFrame = async () => {
+    if (videoElement.value.currentTime < videoElement.value.duration) {
+        ctx.value.clearRect(0, 0, canvas.value.width, canvas.value.height);
+        ctx.value.drawImage(videoElement.value, 0, 0, canvas.value.width, canvas.value.height);
+
+        const imageData = ctx.value.getImageData(0, 0, canvas.value.width, canvas.value.height);
+        const data = imageData.data;
+        for (let i = 0; i < data.length; i += 4) {
+            const r = data[i];
+            const g = data[i + 1];
+            const b = data[i + 2];
+            if (g > r + 30 && g > b + 30) {
+                data[i + 3] = 0;
+            }
+        }
+        ctx.value.putImageData(imageData, 0, 0);
+
+        const segment = canvas.value.toDataURL('image/png');
+        segments.value.push(segment);
+        await new Promise((resolve) => setTimeout(resolve, frameDuration.value));
+        processFrame();
+    } else {
+        processSegments(segments.value, frameRate.value);
+    }
+};
+const processSegments = async (segments, frameRate) => {
+    const blobUrls = [];
+    for (let i = 0; i < segments.length; i++) {
+        const data = segments[i].split(',')[1];
+        const byteCharacters = atob(data);
+        const byteNumbers = new Array(byteCharacters.length);
+        for (let j = 0; j < byteCharacters.length; j++) {
+            byteNumbers[j] = byteCharacters.charCodeAt(j);
+        }
+        const byteArray = new Uint8Array(byteNumbers);
+        const blob = new Blob([byteArray], { type: 'image/png' });
+        const blobUrl = URL.createObjectURL(blob);
+        blobUrls.push(blobUrl);
+        await ffmpeg.value.FS('writeFile', `frame${i.toString().padStart(3, '0')}.png`, await fetchFile(blobUrl));
+    }
+    const originalVideoBlob = await fetch(videoElement.value.src).then(response => response.blob());
+    await ffmpeg.value.FS('writeFile', 'original_video.mp4', await fetchFile(originalVideoBlob));
+    await ffmpeg.value.run('-i', 'original_video.mp4', '-vn', '-acodec', 'copy', 'audio.aac');
+    await ffmpeg.value.run('-framerate', frameRate.toString(), '-i', 'frame%03d.png', '-i', 'audio.aac', '-c:v', 'prores_ks', '-pix_fmt', 'yuva444p10le', '-profile:v', '4444', '-c:a', 'copy', 'output.mov');
+    const data = ffmpeg.value.FS('readFile', 'output.mov');
+    const processedBlob = new Blob([data.buffer], { type: 'video/quicktime' });
+    transToFile( processedBlob, fileName.value, fileType.value ).then( res => {
+        emit( 'Thnd', res )
+    } )
+    
+};
+
+
+const transToFile = async(blob, fileName, fileType) => {
+    return new window.File([blob], fileName, {type: fileType})
+}
+
+
+
+</script>
+
+<style>
+
+input[type="file"] {
+
+  /* 鍩烘湰鏍峰紡 */
+  border: none;
+  background-color: #007bff;
+  border-radius: 5px;
+  cursor: pointer;
+  width: 76px;
+  /* 闅愯棌鏂囦欢鍚� */
+  color: transparent;
+  /* 鏀寔鎵�鏈夋祻瑙堝櫒璁剧疆瀛椾綋棰滆壊閫忔槑 */
+  &::file-selector-button { color: white }       /* 鏍囧噯璇硶 */
+  &::-webkit-file-upload-button { color: white } /* Chrome/Safari */
+  &::-moz-file-upload-button { color: white }    /* Firefox */
+}
+
+/* 缁熶竴鎸夐挳鏍峰紡 */
+input[type="file"]::file-selector-button {
+  background: transparent;
+  border: none;
+  padding: 8px 12px;
+  margin: -8px -12px; /* 鎶垫秷瀹瑰櫒鐨刾adding */
+  font: inherit;
+}
+
+/* 娴忚鍣ㄥ吋瀹规�у鐞� */
+input[type="file"]::-webkit-file-upload-button {
+  background: transparent;
+  border: none;
+  padding: 8px 12px;
+  margin: -8px -12px;
+  font: inherit;
+}
+
+input[type="file"]::-moz-file-upload-button {
+  background: transparent;
+  border: none;
+  padding: 8px 12px;
+  margin: -8px -12px;
+  font: inherit;
+}
+
+input{
+    padding: 8px 12px;
+}
+
+</style>
\ No newline at end of file
diff --git a/easegen-front/src/views/digitalcourse/digitalhumans/DigitalHumansForm.vue b/easegen-front/src/views/digitalcourse/digitalhumans/DigitalHumansForm.vue
index 278db5a..366bb20 100644
--- a/easegen-front/src/views/digitalcourse/digitalhumans/DigitalHumansForm.vue
+++ b/easegen-front/src/views/digitalcourse/digitalhumans/DigitalHumansForm.vue
@@ -10,7 +10,7 @@
       <el-form-item :label="t('digitalhumans.name')" prop="name">
         <el-input v-model="formData.name" :placeholder="t('common.inputText') + t('digitalhumans.name')" />
       </el-form-item>
-      <el-form-item :label="t('digitalhumans.code')" prop="code">
+      <el-form-item :label="t('digitalhumans.code')" prop="code" v-if="false" > // 褰撳墠鏁板瓧浜鸿棰戠殑缂栫爜绫诲瀷
         <el-input v-model="formData.code" :placeholder="t('common.inputText') + t('digitalhumans.code')" />
       </el-form-item>
       <el-form-item :label="t('digitalhumans.gender')" prop="gender">
@@ -23,7 +23,7 @@
           />
         </el-select>
       </el-form-item>
-      <el-form-item :label="t('digitalhumans.useModel')" prop="useModel">
+      <el-form-item :label="t('digitalhumans.useModel')" prop="useModel" v-if="false" > //鏁板瓧浜烘ā寮忛�夋嫨妗�
         <el-select v-model="formData.useModel" :placeholder="t('common.selectText')+t('digitalhumans.useModel')">
           <el-option
             v-for="dict in getIntDictOptions(DICT_TYPE.USE_MODEL)"
@@ -38,7 +38,15 @@
         <UploadImg v-else v-model="formData.pictureUrl" />
       </el-form-item>
       <el-form-item v-if="formData.useModel == 2" :label="t('digitalhumans.video')" prop="videoUrl">
-        <UploadFile v-if="!(formData.videoUrl || formData.fixVideoUrl)" v-model="formData.videoUrl" :fileType="['mp4']" :limit="1" @on-success="handleFileSuccess('videoUrl', $event)"/>
+        <!-- 鍘熸湰鑷甫鐨勮棰戜笂浼� -->
+        <!-- <UploadFile v-if="!(formData.videoUrl || formData.fixVideoUrl)" v-model="formData.videoUrl" :fileType="['mp4']" :limit="1" @on-success="handleFileSuccess('videoUrl', $event)"/> -->
+        <!-- 鍚庢湡娣诲姞鐨勫幓闄ょ豢骞曠殑 -->
+        <div v-if="!(formData.videoUrl || formData.fixVideoUrl)" >
+          <CES2 @start="StartCes" @Thnd="End" />
+          <div style="color: red;" v-show="isUploading"  >
+              褰撳墠姝e湪澶勭悊骞朵笂浼犱腑锛岃鑰愬績绛夊緟...
+          </div>
+        </div>
         <video-player v-if="formData.videoUrl || formData.fixVideoUrl" :property="videoProperty"/>
       </el-form-item>
 <!--      <el-form-item :label="鎶犲浘鏍囪瘑" prop="matting">
@@ -73,7 +81,7 @@
       </el-form-item>
     </el-form>
     <template #footer>
-      <el-button @click="submitForm" type="primary" :disabled="formLoading">{{t('common.ok')}}</el-button>
+      <el-button @click="submitForm" type="primary" :disabled="formLoading" :loading="isUploading" >{{t('common.ok')}}</el-button>
       <el-button @click="dialogVisible = false">{{t('common.cancel')}}</el-button>
     </template>
   </Dialog>
@@ -84,10 +92,15 @@
 import VideoPlayer from "@/components/DiyEditor/components/mobile/VideoPlayer/index.vue";
 import {DiyComponent} from "@/components/DiyEditor/util";
 import {VideoPlayerProperty} from "@/components/DiyEditor/components/mobile/VideoPlayer/config";
+import { useUpload } from '@/components/UploadFile/src/useUpload'
+import { el } from 'element-plus/es/locale';
+import CES2 from './CES2.vue'
+import { any } from 'vue-types';
 
 const { t } = useI18n() // 鍥介檯鍖�
 const message = useMessage() // 娑堟伅寮圭獥
 
+const { uploadUrl, httpRequest } = useUpload() //涓婁紶鏂规硶
 const dialogVisible = ref(false) // 寮圭獥鐨勬槸鍚﹀睍绀�
 const dialogTitle = ref('') // 寮圭獥鐨勬爣棰�
 const formLoading = ref(false) // 琛ㄥ崟鐨勫姞杞戒腑锛�1锛変慨鏀规椂鐨勬暟鎹姞杞斤紱2锛夋彁浜ょ殑鎸夐挳绂佺敤
@@ -110,6 +123,9 @@
   useModel: undefined,
   status: undefined,
 })
+
+// 褰撳墠鏄惁姝e湪涓婁紶瑙嗛
+const isUploading = ref(false)
 
 const videoProperty = {
   videoUrl: '',
@@ -142,6 +158,24 @@
 })
 const formRef = ref() // 琛ㄥ崟 Ref
 
+const StartCes = () => {
+  console.log( " ----- 寮�濮� ----- " )
+  isUploading.value = true
+}
+
+const End = (res)=>{
+  const FileObject = {
+    file:res
+  }
+  httpRequest( FileObject ).then( response =>{
+    console.log(response)
+    formData.value.videoUrl = response.data;
+  } ).finally( res => {
+    isUploading.value = false
+  } )
+
+}
+
 /** 鎵撳紑寮圭獥 */
 const open = async (type: string, id?: number) => {
   dialogVisible.value = true
@@ -156,6 +190,8 @@
     } finally {
       formLoading.value = false
     }
+  }else{
+    InitHumMODEL()
   }
 }
 defineExpose({ open }) // 鎻愪緵 open 鏂规硶锛岀敤浜庢墦寮�寮圭獥
@@ -211,4 +247,17 @@
     formData.value.videoUrl = response.data;
   }
 };
+
+// 淇敼榛樿鐨勬暟瀛椾汉瑙嗛妯″紡涓鸿棰�
+
+const InitHumMODEL = ()=>{
+  let ModelList = getIntDictOptions( DICT_TYPE.USE_MODEL )
+  for (let index = 0; index < ModelList.length; index++) {
+    const element = ModelList[index];
+    if( element.label === "瑙嗛" ){
+      formData.value.useModel = Number( element.value )
+    }
+  }
+}
+
 </script>
diff --git a/easegen-front/vite.config.ts b/easegen-front/vite.config.ts
index 3ef21f2..c2f3210 100644
--- a/easegen-front/vite.config.ts
+++ b/easegen-front/vite.config.ts
@@ -3,6 +3,11 @@
 import {loadEnv} from 'vite'
 import {createVitePlugins} from './build/vite'
 import {exclude, include} from "./build/vite/optimize"
+
+
+import vue from '@vitejs/plugin-vue';
+import { defineConfig } from 'vite';
+
 // 褰撳墠鎵цnode鍛戒护鏃舵枃浠跺す鐨勫湴鍧�(宸ヤ綔鐩綍)
 const root = process.cwd()
 
@@ -12,6 +17,7 @@
 }
 
 // https://vitejs.dev/config/
+// defineConfig涓哄悗缁坊鍔�
 export default ({command, mode}: ConfigEnv): UserConfig => {
     let env = {} as any
     const isBuild = command === 'build'
@@ -28,6 +34,11 @@
             port: env.VITE_PORT, // 绔彛鍙�
             host: "0.0.0.0",
             open: env.VITE_OPEN === 'true',
+
+            headers: {
+                "Cross-Origin-Opener-Policy": "same-origin", // 淇濇姢浣犵殑婧愮珯鐐瑰厤鍙楁敾鍑�
+                "Cross-Origin-Embedder-Policy": "require-corp", // 淇濇姢鍙楀鑰呭厤鍙椾綘鐨勬簮绔欑偣鐨勫奖鍝�
+            },
             // 鏈湴璺ㄥ煙浠g悊. 鐩墠娉ㄩ噴鐨勫師鍥狅細鏆傛椂娌℃湁鐢ㄩ�旓紝server 绔凡缁忔敮鎸佽法鍩�
             // proxy: {
             //   ['/admin-api']: {
@@ -40,6 +51,9 @@
         },
         // 椤圭洰浣跨敤鐨剉ite鎻掍欢銆� 鍗曠嫭鎻愬彇鍒癰uild/vite/plugin涓鐞�
         plugins: createVitePlugins(),
+
+        // plugins: [vue(), ...createVitePlugins()],
+
         css: {
             preprocessorOptions: {
                 scss: {
@@ -81,5 +95,6 @@
             },
         },
         optimizeDeps: {include, exclude}
+
     }
 }

--
Gitblit v1.9.3