# import streamlit as st # from PIL import Image # from transformers import pipeline # import random # # --- Use st.cache_resource to cache the models --- # @st.cache_resource # def load_caption_generator(): # return pipeline("image-to-text", model="Salesforce/blip-image-captioning-base") # @st.cache_resource # def load_poem_generator(): # return pipeline("text2text-generation", model="google/flan-t5-base") # # Load the models once and store them in memory # caption_generator = load_caption_generator() # poem_generator = load_poem_generator() # # --- Your original app code follows --- # st.set_page_config(...) # # ... rest of your code ... import streamlit as st from PIL import Image from transformers import pipeline import random # -------------------- PAGE CONFIG -------------------- st.set_page_config( page_title="Whispers of Images", page_icon="https://img.icons8.com/?size=100&id=UeTjKUNmOxts&format=png&color=000000", layout="centered", initial_sidebar_state="expanded" ) # -------------------- CUSTOM DARK THEME CSS -------------------- st.markdown( """ """, unsafe_allow_html=True ) # -------------------- APP TITLE -------------------- if "title" not in st.session_state: st.session_state.title = "Image to Poetry Generator" st.markdown(f"
Turn your pictures into soulful, rhyming verses ✍️✨
", unsafe_allow_html=True ) # -------------------- SURPRISE ME BUTTON -------------------- if st.button("✨ Surprise Me ✨"): st.session_state.title = random.choice([ "Pixels to Poetry 🌿", "When Images Whisper 🎭", "Canvas of Words ✍️", "Visual Rhymes 🎨", "Poetry in Pixels 🪄" ]) st.experimental_rerun() # -------------------- FILE UPLOAD -------------------- uploaded_file = st.file_uploader( "Choose an image...", type=["jpg", "jpeg", "png"] ) # -------------------- POEM GENERATION -------------------- if uploaded_file is not None: image = Image.open(uploaded_file) st.image(image, caption="Uploaded Image", use_column_width=True) st.markdown("---") with st.spinner("Generating poetry... ✍️✨"): # Image captioning caption_generator = pipeline( "image-to-text", model="Salesforce/blip-image-captioning-base" ) caption_result = caption_generator(image) image_caption = caption_result[0]['generated_text'] # Poem generation poem_prompt = f"Describe this scene in the form of a short, rhyming, emotional poem. Be artistic and creative, avoid repeating words.:\n\n{image_caption}\n\nPoem:" poem_generator = pipeline( "text2text-generation", model="google/flan-t5-base" ) poem_result = poem_generator( poem_prompt, max_length=150, num_return_sequences=1 ) generated_poem = poem_result[0]['generated_text'] final_poem = generated_poem.replace(poem_prompt, "").strip() # -------------------- DISPLAY RESULTS -------------------- st.subheader("Image Description") st.info(image_caption) st.markdown( f"""{final_poem}