File size: 1,434 Bytes
140212b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import streamlit as st
from PIL import Image
from transformers import pipeline

# Load models once
img_caption_model = pipeline("image-to-text", model="Salesforce/blip-image-captioning-base")
story_gen_model = pipeline(
    "text-generation",
    model="gpt2",
    device=-1,  # CPU
)

# Image-to-text function
def img2text(image):
    caption = img_caption_model(image)[0]["generated_text"]
    return caption

# Story generator function
def generator(topic):
    prompt = f"Once upon a time, {topic}..."
    response = story_gen_model(
        prompt,
        max_new_tokens=30,  # Short story
        num_return_sequences=1,
        do_sample=True,
        temperature=0.7,
    )
    story = response[0]["generated_text"].replace(prompt, "").strip()
    return story

# Streamlit App UI
st.title("Image-to-Story Generator 📸📖")
st.write("Upload an image to get a caption and a short story!")

uploaded_image = st.file_uploader("Choose an image...", type=["png", "jpg", "jpeg"])

if uploaded_image is not None:
    image = Image.open(uploaded_image)
    st.image(image, caption="Uploaded Image", use_column_width=True)

    # Process Image → Caption → Story
    with st.spinner('Generating Caption...'):
        caption = img2text(image)

    st.write(f"**Image Caption:** {caption}")

    with st.spinner('Generating Story...'):
        story = generator(caption)

    st.write("**Generated Story:**")
    st.write(story)