Jessiesj commited on
Commit
c514fd1
·
verified ·
1 Parent(s): 9e40f8f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +80 -47
app.py CHANGED
@@ -1,78 +1,111 @@
1
  import streamlit as st
2
  from transformers import pipeline
3
  from diffusers import StableDiffusionPipeline
4
- import torch
5
  from pydub import AudioSegment
6
- import base64
7
- import json
8
  import zipfile
9
  from io import BytesIO
 
10
 
11
- # 初始化模型Pipeline(使用修正后的模型名称)
12
  @st.cache_resource
13
- def load_models():
14
- # 剧本生成(T5模型)
15
- script_pipe = pipeline("text2text-generation", model="mrm8488/t5-base-finetuned-common_gen")
16
-
17
- # 分镜生成(BART模型)
18
- storyboard_pipe = pipeline("text-generation", model="philschmid/bart-large-cnn-samsum")
19
-
20
- # 配乐生成(MusicGen)
21
- music_pipe = pipeline("text-to-audio", model="facebook/musicgen-small")
22
-
23
- # 分镜图片生成(Stable Diffusion)
24
- image_pipe = StableDiffusionPipeline.from_pretrained("prompthero/openjourney-v4")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
 
26
- return script_pipe, storyboard_pipe, music_pipe, image_pipe
 
 
27
 
28
- # 加载模型
29
- script_pipe, storyboard_pipe, music_pipe, image_pipe = load_models()
30
 
31
  # Streamlit界面
32
- st.title("🎬 微电影创作助手(基础版)")
33
- user_input = st.text_input("输入电影主题或关键词如:浪漫的咖啡馆相遇)")
34
 
35
  if user_input:
36
- # 生成剧本
37
- with st.spinner("正在生成剧本..."):
38
  script = script_pipe(
39
- f"Generate a movie script about: {user_input}",
40
- max_length=300
 
41
  )[0]["generated_text"]
42
 
43
- st.subheader("📜 生成的剧本")
44
- st.markdown(f"```\n{script}\n```")
45
-
46
- # 生成分镜
47
- with st.spinner("正在生成分镜脚本..."):
48
  storyboard = storyboard_pipe(
49
- f"Convert this script to storyboard JSON: {script}",
50
- max_length=500
51
  )[0]["generated_text"]
52
 
53
- st.subheader("🎥 分镜脚本")
54
  try:
55
- st.json(json.loads(storyboard))
56
  except:
57
- st.error("分镜生成格式错误请重试!")
58
-
59
- # 生成配乐
60
- with st.spinner("正在生成背景音..."):
61
- audio = music_pipe("Calm background music for a romantic scene", max_new_tokens=200)
 
 
 
 
62
  audio_buffer = BytesIO()
63
  audio["audio"].export(audio_buffer, format="wav")
64
- st.audio(audio_buffer, format="audio/wav")
65
 
66
- # 生成分镜图片(可选)
67
- if st.checkbox("生成分镜预览图"):
68
- with st.spinner("正在生成图片..."):
69
- image = image_pipe("cinematic scene, 4k film still, " + user_input).images[0]
 
 
 
 
 
 
70
  st.image(image)
71
-
72
- # 打包下载功能
73
  zip_buffer = BytesIO()
74
  with zipfile.ZipFile(zip_buffer, "w") as zf:
75
  zf.writestr("script.txt", script)
76
  zf.writestr("storyboard.json", storyboard)
77
  zf.writestr("bgm.wav", audio_buffer.getvalue())
78
- st.download_button("📥 下载完整包", data=zip_buffer.getvalue(), file_name="film_package.zip")
 
 
 
 
 
 
 
1
  import streamlit as st
2
  from transformers import pipeline
3
  from diffusers import StableDiffusionPipeline
 
4
  from pydub import AudioSegment
 
 
5
  import zipfile
6
  from io import BytesIO
7
+ import json
8
 
9
+ # 初始化模型 (全部使用原始pipeline)
10
  @st.cache_resource
11
+ def load_pipelines():
12
+ try:
13
+ # 1. 剧本生成(T5模型)
14
+ script_pipe = pipeline(
15
+ "text2text-generation",
16
+ model="mrm8488/t5-base-finetuned-common_gen",
17
+ tokenizer="t5-base" # 显式指定tokenizer
18
+ )
19
+
20
+ # 2. 分镜生成(BART模型)
21
+ storyboard_pipe = pipeline(
22
+ "text2text-generation", # 使用text2text而非summarization
23
+ model="philschmid/bart-large-cnn-samsum"
24
+ )
25
+
26
+ # 3. 配乐生成(MusicGen)
27
+ music_pipe = pipeline(
28
+ "text-to-audio",
29
+ model="facebook/musicgen-small",
30
+ device_map="auto"
31
+ )
32
+
33
+ # 4. 分镜图片生成(Stable Diffusion)
34
+ image_pipe = StableDiffusionPipeline.from_pretrained(
35
+ "prompthero/openjourney-v4",
36
+ safety_checker=None # 禁用安全检查以加速
37
+ )
38
+
39
+ return script_pipe, storyboard_pipe, music_pipe, image_pipe
40
 
41
+ except Exception as e:
42
+ st.error(f"模型加载失败: {str(e)}")
43
+ raise
44
 
45
+ # 加载pipeline
46
+ script_pipe, storyboard_pipe, music_pipe, image_pipe = load_pipelines()
47
 
48
  # Streamlit界面
49
+ st.title("🎥 微电影智能创作系统")
50
+ user_input = st.text_input("输入电影主题(如:科幻太空冒险)")
51
 
52
  if user_input:
53
+ # 1. 生成剧本
54
+ with st.spinner("🤖 正在生成剧本..."):
55
  script = script_pipe(
56
+ f"generate movie script: {user_input}",
57
+ max_length=500,
58
+ num_return_sequences=1
59
  )[0]["generated_text"]
60
 
61
+ st.subheader("📜 电影剧本")
62
+ st.code(script, language="markdown")
63
+
64
+ # 2. 生成分镜
65
+ with st.spinner("🎬 正在生成分镜..."):
66
  storyboard = storyboard_pipe(
67
+ f"convert to storyboard JSON: {script}",
68
+ max_length=1000
69
  )[0]["generated_text"]
70
 
71
+ st.subheader("📋 分镜脚本")
72
  try:
73
+ st.json(json.loads(storyboard)) # 验证JSON格式
74
  except:
75
+ st.warning("分镜格式异常原始输出:")
76
+ st.text(storyboard)
77
+
78
+ # 3. 生成
79
+ with st.spinner("🎵 正在生成配乐..."):
80
+ audio = music_pipe(
81
+ "epic sci-fi background music",
82
+ max_new_tokens=256
83
+ )
84
  audio_buffer = BytesIO()
85
  audio["audio"].export(audio_buffer, format="wav")
 
86
 
87
+ st.subheader("🎧 背景音乐")
88
+ st.audio(audio_buffer, format="audio/wav")
89
+
90
+ # 4. 生成分镜图(可选)
91
+ if st.toggle("生成分镜预览图"):
92
+ with st.spinner("🖼️ 正在生成图片..."):
93
+ image = image_pipe(
94
+ f"cinematic still from a {user_input} movie, 4k",
95
+ num_inference_steps=25 # 减少步数以加速
96
+ ).images[0]
97
  st.image(image)
98
+
99
+ # 打包下载
100
  zip_buffer = BytesIO()
101
  with zipfile.ZipFile(zip_buffer, "w") as zf:
102
  zf.writestr("script.txt", script)
103
  zf.writestr("storyboard.json", storyboard)
104
  zf.writestr("bgm.wav", audio_buffer.getvalue())
105
+
106
+ st.download_button(
107
+ "📦 下载创作包",
108
+ data=zip_buffer.getvalue(),
109
+ file_name="movie_kit.zip",
110
+ mime="application/zip"
111
+ )