Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
T
text2video-frontend
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
周成波
text2video-frontend
Commits
2db83afd
Commit
2db83afd
authored
Feb 24, 2024
by
周成波
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
拆分成简单任务
parent
f6a8833c
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
625 additions
and
85 deletions
+625
-85
useManyValues.ts
src/views/home/compositions/useManyValues.ts
+3
-14
index-bak20240224.vue
src/views/home/index-bak20240224.vue
+540
-0
index.vue
src/views/home/index.vue
+82
-71
No files found.
src/views/home/compositions/useManyValues.ts
View file @
2db83afd
...
...
@@ -173,20 +173,9 @@ export const useManyValues = () => {
const
vertical_data
=
{
task_id
:
"20240220181602687"
,
chatgpt_prompt
:
``
,
chatgpt_answer
:
`从前,有一个叫花果王的猴王,身手敏捷,机智过人。他生活在一片美丽的猴子园里,那里有无数的猴子,它们和谐相处,过着无忧无虑的生活。花果王是这片猴子园的领袖,他深受猴子的尊敬和喜爱。 有一天,花果王听说附近的人类村庄正在遭受一场大灾难。原来,是一只凶猛的妖邪之作正在祸害人类。花果王决定带领猴群去解救人类,拯救村子。他组织了一支强大的猴军,他们勇敢地踏上了征程。 经过艰苦的跋涉,猴军终于来到了人类村庄。他们看到村民们惊恐失措,生活在水深火热之中。于是,花果王毫不犹豫地挥舞金箍棒,击败了妖邪之作。人类村民们见状,纷纷拜谢猴王,将他们视为救世主。 从此,花果王和猴军的名声远扬,他们继续在人类与猴子之间传播友谊与和谐,成为了永恒的传说。`
,
chatgpt_answer_roles
:
[{
"角色"
:
"花果王"
,
"角色关键词"
:
"性别:雄性, 年龄:成年, 肤色:棕色(猴毛颜色), 衣服:无(自然皮毛), 发型:蓬松猴鬃, 发色:金色(象征其力量与地位的金箍棒颜色), 脸色:生动活泼的猴脸, 五官特点:炯炯有神的眼睛,机敏狡黠的表情, 领导力强, 勇敢且富有智慧"
},
{
"角色"
:
"猴群"
,
"角色关键词"
:
"性别各异, 年龄各异, 肤色:多种(根据自然猴种不同), 衣服:无(自然皮毛), 发型:自然猴毛发型各异, 发色:各自品种特征色, 脸色:生动活泼的猴脸, 五官特点:机灵好奇, 忠诚团结"
},
{
"角色"
:
"人类村民"
,
"角色关键词"
:
"性别各异, 年龄各异, 肤色:黄种人肤色, 衣服:传统农耕服饰, 发型:古代农夫、妇女常见发型, 发色:黑发, 脸色:因灾难而显得苍白恐慌, 五官特点:感激涕零, 对救星充满敬仰"
},
{
"角色"
:
"妖邪之作"
,
"角色关键词"
:
"性别:不明, 年龄:不明, 肤色:暗黑或异色, 衣服:可能为神秘或恐怖风格的装饰, 发型:怪异扭曲, 发色:可能是深红、墨黑或其他邪恶象征的颜色, 脸色:阴森可怖, 五官特点:狰狞可怕, 充满恶意和破坏力"
}]
,
chatgpt_prompt
:
`生成一个100字的科幻小故事,阿凡达系列`
,
chatgpt_answer
:
``
,
chatgpt_answer_roles
:
[],
adapt_result_json
:
[
],
final_video
:
``
,
...
...
src/views/home/index-bak20240224.vue
0 → 100644
View file @
2db83afd
This diff is collapsed.
Click to expand it.
src/views/home/index.vue
View file @
2db83afd
...
...
@@ -27,14 +27,20 @@ const form = reactive({
const
sd_prompt_prefix
=
default_data
.
sd_prompt_prefix
;
const
sd_negative_prompt_prefix
=
default_data
.
sd_negative_prompt_prefix
;
const
wenan_llm
=
"langchain"
const
wenan_llm_name
=
"baichuan2-7b"
const
role_llm
=
"langchain"
const
role_llm_name
=
"baichuan2-7b"
const
tuili_llm
=
"langchain"
const
tuili_llm_name
=
"baichuan2-7b"
const
fanyi_llm
=
"langchain"
const
fanyi_llm_name
=
"baichuan2-7b"
const
tyqw
=
{
'api'
:
'tyqw'
,
'name'
:
'通义千问'
};
const
baichuan
=
{
'api'
:
'langchain'
,
'name'
:
'baichuan2-7b'
};
const
qwen
=
{
'api'
:
'langchain'
,
'name'
:
'Qwen-7B-Chat'
};
const
wenan_llm
=
qwen
.
api
const
wenan_llm_name
=
qwen
.
name
const
role_llm
=
tyqw
.
api
const
role_llm_name
=
tyqw
.
name
const
role_keywords_llm
=
qwen
.
api
const
role_keywords_llm_name
=
qwen
.
name
const
tuili_llm
=
qwen
.
api
const
tuili_llm_name
=
qwen
.
name
const
fanyi_llm
=
qwen
.
api
const
fanyi_llm_name
=
qwen
.
name
onMounted
(()
=>
{
...
...
@@ -42,6 +48,8 @@ onMounted(() => {
onChangeScreen
(
form
.
screen
);
});
const
delay
=
(
ms
:
any
)
=>
new
Promise
(
res
=>
setTimeout
(
res
,
ms
));
const
onSubmitGpt
=
()
=>
{
text2videoService
.
submitGpt
(
form
.
chatgpt_prompt
,
wenan_llm
)
...
...
@@ -69,34 +77,46 @@ const onAdaptRoles = async () => {
}
loading
.
value
=
true
;
// 推理角色
form
.
chatgpt_answer_roles
=
[];
try
{
const
adapt_restrict
=
`
指令:
请理解这个故事,给出这个故事的所有角色、角色关键词(性别(可以发挥想象进行补充,但一定要明确),年龄(可以发挥想象进行补充,但一定要明确),
肤色(可以发挥想象进行补充,但一定要明确),衣服(可以发挥想象进行补充,但一定要明确),发型(可以发挥想象进行补充,但一定要明确),发色(可以发挥想象进行补充,但一定要明确),
脸色(可以发挥想象进行补充,但一定要明确),五官特点(可以发挥想象进行补充,但一定要明确))。\n
请理解这个故事,给出这个故事中的所有角色,多个角色以逗号分隔`
;
let
roles
=
await
text2videoService
.
submitGpt
(
"故事:
\n
"
+
form
.
chatgpt_answer
+
"
\n
"
+
adapt_restrict
,
role_llm
);
roles
=
roles
.
replace
(
/。/g
,
''
).
replace
(
/、/g
,
','
)
console
.
log
(
roles
)
const
roles_arr
=
roles
.
split
(
/
[
,,
]
/
);
console
.
log
(
roles_arr
)
async
function
processRoles
()
{
for
(
const
one_role
of
roles_arr
)
{
await
delay
(
100
);
const
adapt_keyword_restrict
=
`
指令:
请理解这个故事,给出这个角色“
${
one_role
.
trim
()}
”的关键词(性别(可以发挥想象进行补充,但一定要有),年龄(可以发挥想象进行补充,但一定要有),
肤色(可以发挥想象进行补充,但一定要有),衣服(可以发挥想象进行补充,但一定要有),发型(可以发挥想象进行补充,但一定要有),
发色(可以发挥想象进行补充,但一定要有),脸色(可以发挥想象进行补充,但一定要有),五官特点(可以发挥想象进行补充,但一定要有))。
要求:
角色和角色关键词要对应。
严格以如下格式返回:[{"角色":"","角色关键词":""}]`
;
const
keywords
=
await
text2videoService
.
submitGpt
(
form
.
chatgpt_answer
+
"
\n
"
+
adapt_restrict
,
role_llm
);
console
.
log
(
keywords
)
const
keywords_obj
=
utils
.
formatJsonObj
(
keywords
.
replace
(
/```json/g
,
''
).
replace
(
/```/g
,
''
))
console
.
log
(
keywords_obj
)
form
.
chatgpt_answer_roles
=
[]
if
(
'error'
in
keywords_obj
)
{
ElMessage
({
message
:
"未解析到角色"
,
type
:
"error"
,
关键词以逗号分隔。
只要返回关键词,不需要其他的说明文字。`
;
let
keywords
=
await
text2videoService
.
submitGpt
(
form
.
chatgpt_answer
+
"
\n
"
+
adapt_keyword_restrict
,
role_keywords_llm
);
keywords
=
keywords
.
replace
(
/。/g
,
''
).
replace
(
/、/g
,
','
)
form
.
chatgpt_answer_roles
.
push
({
"角色"
:
one_role
.
trim
(),
"角色关键词"
:
keywords
.
trim
()
});
}
else
{
for
(
let
item
of
keywords_obj
)
{
let
newObjItem
=
{
"角色"
:
JSON
.
stringify
(
item
[
"角色"
]).
replace
(
/"/g
,
''
),
"角色关键词"
:
JSON
.
stringify
(
item
[
"角色关键词"
]).
replace
(
/"/g
,
''
)
};
form
.
chatgpt_answer_roles
.
push
(
newObjItem
);
}
}
try
{
await
processRoles
();
console
.
log
(
form
.
chatgpt_answer_roles
)
}
catch
(
error
)
{
ElMessage
({
message
:
String
(
error
),
type
:
"error"
});
}
finally
{
loading
.
value
=
false
;
// 最终关闭loading(无论成功或失败)
}
}
catch
(
error
)
{
ElMessage
({
...
...
@@ -139,8 +159,6 @@ const onAdapt = async () => {
}
console
.
log
(
form
.
adapt_result_json
)
const
delay
=
(
ms
:
any
)
=>
new
Promise
(
res
=>
setTimeout
(
res
,
ms
));
async
function
processScenes
()
{
for
(
const
item
of
form
.
adapt_result_json
)
{
await
onAdaptOne
(
item
);
...
...
@@ -179,33 +197,27 @@ const onAdaptOne = async (item: any) => {
try
{
const
adapt_restrict
=
`
指令:
请理解这个故事,
针对其中的这个场景:“
${
item
.
场景描述
}
”,给出这个场景的:
场景关键词(年代,空间,时间段,地理环境,天气,物品,人物,镜头角度)、
角色(从所有角色中选择本场景的角色)
。
请理解这个故事,
给出这个场景“
${
item
.
场景描述
}
”的关键词(年代(可以发挥想象进行补充,但一定要有),空间(可以发挥想象进行补充,但一定要有),
时间段(可以发挥想象进行补充,但一定要有),地理环境(可以发挥想象进行补充,但一定要有),天气(可以发挥想象进行补充,但一定要有),
物品(可以发挥想象进行补充,但一定要有),人物(可以发挥想象进行补充,但一定要有),镜头角度(可以发挥想象进行补充,但一定要有))
。
要求:
角色和角色关键词要对应。
严格以如下格式返回:[{"场景关键词":"(多个词以逗号分隔)","角色":"(角色以逗号分隔)"}]
除了按格式返回的内容之外,不要添加其他的任何说明。`
;
const
keywords
=
await
text2videoService
.
submitGpt
(
"故事:
\n
"
+
form
.
chatgpt_answer
+
"
\n
所有角色:
\n
"
+
JSON
.
stringify
(
form
.
chatgpt_answer_roles
)
+
"
\n
"
+
adapt_restrict
,
tuili_llm
);
关键词以逗号分隔。
只要返回关键词,不需要其他的说明文字。`
;
const
keywords
=
await
text2videoService
.
submitGpt
(
"故事:
\n
"
+
form
.
chatgpt_answer
+
"
\n
"
+
adapt_restrict
,
tuili_llm
);
// console.log(keywords)
const
keywords_obj
=
utils
.
formatJsonObj
(
keywords
.
replace
(
/```json/g
,
''
).
replace
(
/```/g
,
''
))
// console.log(keywords_obj)
if
(
'error'
in
keywords_obj
)
{
ElMessage
({
message
:
`分镜
${
item
.
编号
}
推理关键词失败,请重试`
,
type
:
"error"
,
});
}
else
{
item
.
场景关键词
=
JSON
.
stringify
(
keywords_obj
[
0
].
场景关键词
).
replace
(
/"/g
,
''
);
item
.
场景关键词
=
keywords
;
const
adapt_role_restrict
=
`
指令:
请理解这个故事,针对其中的这个场景:“
${
item
.
场景描述
}
”,从所有角色中选择本场景的角色,多个角色以逗号分隔。`
;
const
item_roles
=
await
text2videoService
.
submitGpt
(
"故事:
\n
"
+
form
.
chatgpt_answer
+
"
\n
所有角色:
\n
"
+
JSON
.
stringify
(
form
.
chatgpt_answer_roles
)
+
"
\n
"
+
adapt_role_restrict
,
tuili_llm
);
// console.log(role_keywords)
if
(
form
.
chatgpt_answer_roles
.
length
===
0
)
{
// 总角色为空
item
.
角色
=
''
;
item
.
角色关键词
=
''
;
}
else
{
// 总角色不为空
// item.角色 = JSON.stringify(keywords_obj[0].角色).replace(/"/g, '');
// item.角色关键词 = JSON.stringify(keywords_obj[0].角色关键词).replace(/"/g, '');
const
item_roles
=
JSON
.
stringify
(
keywords_obj
[
0
].
角色
).
replace
(
/"/g
,
''
);
item
.
角色
=
item_roles
;
let
role_kws
=
""
const
item_roles_arr
=
item_roles
.
split
(
/
[
,,
]
/
);
...
...
@@ -219,7 +231,6 @@ const onAdaptOne = async (item: any) => {
})
item
.
角色关键词
=
role_kws
;
}
}
}
catch
(
error
)
{
ElMessage
({
message
:
String
(
error
),
...
...
@@ -423,7 +434,7 @@ const handleExceed: UploadProps['onExceed'] = (files) => {
</el-form-item>
<!-- 角色 -->
<el-form-item>
<el-button
type=
"primary"
@
click=
"onAdaptRoles"
>
推理
所有角色(
{{
role
_llm_name
}}
)
</el-button>
<el-button
type=
"primary"
@
click=
"onAdaptRoles"
>
推理
角色(
{{
role_llm_name
}}
)、推理角色关键词(
{{
role_keywords
_llm_name
}}
)
</el-button>
<el-button
plain
@
click=
"clean_roles"
>
清空总角色列表
</el-button>
</el-form-item>
<el-form-item
label=
"角色"
>
...
...
@@ -442,7 +453,7 @@ const handleExceed: UploadProps['onExceed'] = (files) => {
</el-form-item>
<!-- 分镜 -->
<el-form-item>
<el-button
type=
"primary"
@
click=
"onAdapt"
>
分镜、推理
关键词({{tuili_llm_name}})、翻译
({{fanyi_llm_name}})、绘图
</el-button>
<el-button
type=
"primary"
@
click=
"onAdapt"
>
分镜、推理
场景关键词({{tuili_llm_name}})、英文描述
({{fanyi_llm_name}})、绘图
</el-button>
</el-form-item>
<el-form-item
label=
"分镜"
>
<el-table
:data=
"form.adapt_result_json"
border
style=
"width: 100%; z-index: calc(var(--el-table-index) -1)"
>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment