hskwon7 commited on
Commit
c4d25fb
·
verified ·
1 Parent(s): 73aa9b5

Create app_backup.py

Browse files
Files changed (1) hide show
  1. app_backup.py +82 -0
app_backup.py ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # app.py
2
+
3
+ """
4
+ app.py
5
+
6
+ Streamlit application for Image-to-Story demo.
7
+ Allows demo/upload image, generates a caption, a trimmed story,
8
+ and plays back as MP3 via gTTS.
9
+ """
10
+ import streamlit as st
11
+ from PIL import Image
12
+ import warnings
13
+ from modules import (
14
+ load_captioner, load_story_gen,
15
+ generate_caption, generate_story_simple,
16
+ generate_audio
17
+ )
18
+
19
+ warnings.filterwarnings("ignore", category=DeprecationWarning)
20
+
21
+ def reset_state():
22
+ for key in ["caption", "story", "audio_bytes", "audio_mime"]:
23
+ if key in st.session_state:
24
+ del st.session_state[key]
25
+
26
+ def main():
27
+ st.title("🖼️ → 📖 Image-to-Story App for Kids")
28
+ st.write("Upload or demo an image to get a 50–100 word story and audio!")
29
+
30
+ source = st.radio("Image source:",
31
+ ("Upload my own image", "Use demo image"),
32
+ on_change=reset_state)
33
+
34
+ # Load pipelines once
35
+ if "models_loaded" not in st.session_state:
36
+ with st.spinner("Loading models…"):
37
+ st.session_state.captioner = load_captioner()
38
+ st.session_state.story_gen = load_story_gen()
39
+ st.session_state.models_loaded = True
40
+
41
+ captioner = st.session_state.captioner
42
+ story_gen = st.session_state.story_gen
43
+
44
+ # Acquire image
45
+ if source == "Use demo image":
46
+ img = Image.open("test_kids_playing.jpg").convert("RGB")
47
+ else:
48
+ uploaded = st.file_uploader("Upload an image",
49
+ type=["png", "jpg", "jpeg"])
50
+ if not uploaded:
51
+ return
52
+ img = Image.open(uploaded).convert("RGB")
53
+
54
+ st.image(img, use_container_width=True)
55
+
56
+ # Caption
57
+ if "caption" not in st.session_state:
58
+ with st.spinner("Captioning image…"):
59
+ st.session_state.caption = generate_caption(captioner, img)
60
+ st.markdown(f"**Caption:** {st.session_state.caption}")
61
+
62
+ # Story
63
+ if "story" not in st.session_state:
64
+ with st.spinner("Creating story…"):
65
+ st.session_state.story = generate_story_simple(
66
+ story_gen, st.session_state.caption, 50, 100
67
+ )
68
+ st.markdown(f"**Story:** {st.session_state.story}")
69
+
70
+ # Audio
71
+ if "audio_bytes" not in st.session_state:
72
+ with st.spinner("Generating audio…"):
73
+ audio_bytes, mime = generate_audio(st.session_state.story)
74
+ st.session_state.audio_bytes = audio_bytes
75
+ st.session_state.audio_mime = mime
76
+
77
+ if st.button("🔊 Play Story Audio"):
78
+ st.audio(data=st.session_state.audio_bytes,
79
+ format=st.session_state.audio_mime)
80
+
81
+ if __name__ == "__main__":
82
+ main()