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