File size: 2,088 Bytes
cfb477a e83bae4 cfb477a e83bae4 cfb477a |
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 53 54 55 56 57 58 59 60 61 62 |
import streamlit as st
from PIL import Image
from transformers import pipeline
from gtts import gTTS
import os
# ๅ ่ฝฝ Hugging Face ๆจกๅ
image_to_text_model = pipeline("image-to-text", model="Salesforce/blip-image-captioning-base")
story_generator = pipeline("text-generation", model="facebook/opt-1.3b")
# ๅพ็ โ ๆๅญ๏ผ็ๆๆ่ฟฐ๏ผ
def img2text(image_path):
text = image_to_text_model(image_path)[0]["generated_text"]
return text
# ๆๅญ โ ๆ
ไบ๏ผ็ๆๅฎๆดๆ
ไบ๏ผ
def text2story(text):
prompt = f"Write a fun and magical children's story based on this idea: {text}.\n\nOnce upon a time..."
story = story_generator(prompt, max_length=250, do_sample=True, temperature=0.8, top_p=0.9, repetition_penalty=1.2, truncation=True)[0]['generated_text']
return story
# ๆ
ไบ โ ่ฏญ้ณ๏ผTTS๏ผ
def text2audio_gtts(story_text, filename="story.mp3"):
if os.path.exists(filename):
os.remove(filename)
story_text = story_text[:500] # ้ๅถ TTS ๆๆฌ้ฟๅบฆ
tts = gTTS(text=story_text, lang="en")
tts.save(filename)
return filename
# Streamlit Web UI
st.set_page_config(page_title="AI Storyteller", page_icon="๐")
st.header("๐ AI Storyteller: Turn Your Image into a Story with Audio")
uploaded_file = st.file_uploader("Upload an Image...", type=["jpg", "png"])
if uploaded_file:
image_path = "uploaded_image.jpg"
with open(image_path, "wb") as f:
f.write(uploaded_file.getbuffer())
image = Image.open(image_path)
st.image(image, caption="Uploaded Image", use_column_width=True)
st.text("๐ Generating image caption...")
caption = img2text(image_path)
st.write("**Image Description:**", caption)
st.text("๐ Generating story...")
story = text2story(caption)
st.write("**Generated Story:**")
st.write(story)
st.text("๐ Generating audio...")
audio_file = text2audio_gtts(story)
st.audio(audio_file, format="audio/mp3")
with open(audio_file, "rb") as file:
st.download_button("๐ฅ Download Audio", file, file_name="story.mp3")
|