File size: 3,660 Bytes
9bf3376 5d58ce5 9bf3376 5d58ce5 9bf3376 5d58ce5 9bf3376 5d58ce5 9bf3376 5d58ce5 9bf3376 5d58ce5 9bf3376 5d58ce5 9bf3376 5d58ce5 9bf3376 5d58ce5 9bf3376 5d58ce5 9bf3376 5d58ce5 9bf3376 |
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 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
import streamlit as st
from transformers import pipeline
from PIL import Image
import numpy as np
import tempfile
import os
from modelscope.pipelines import pipeline as modelscope_pipeline
from modelscope.outputs import OutputKeys
def generate_video_from_image(image, duration_seconds=10, progress_bar=None):
"""
Generate a video from an image using ModelScope's video generation.
"""
try:
if progress_bar:
progress_bar.progress(0.1, "Generating image caption...")
# Setup image captioning
caption_pipe = pipeline("image-to-text", model="Salesforce/blip-image-captioning-base")
# Generate caption
caption = caption_pipe(image)[0]['generated_text']
st.write(f"Generated caption: *{caption}*")
if progress_bar:
progress_bar.progress(0.3, "Loading Video Generation model...")
# Initialize video generation
video_pipe = modelscope_pipeline(
'text-to-video-synthesis',
model='damo/text-to-video-synthesis'
)
if progress_bar:
progress_bar.progress(0.5, "Generating video...")
# Generate video
output = video_pipe(caption)
video_path = output[OutputKeys.OUTPUT_VIDEO]
if progress_bar:
progress_bar.progress(1.0, "Video generation complete!")
return video_path, caption
except Exception as e:
st.error(f"Error generating video: {str(e)}")
raise
def main():
st.set_page_config(page_title="AI Video Generator", page_icon="🎥")
st.title("🎥 AI Video Generator")
st.write("""
Upload an image to generate a video with AI-powered motion and transitions.
The app will automatically generate a caption for your image and use it as inspiration for the video.
""")
st.info("Note: Video generation may take several minutes.")
# File uploader
uploaded_file = st.file_uploader("Choose an image", type=['png', 'jpg', 'jpeg'])
if uploaded_file is not None:
# Display uploaded image
image = Image.open(uploaded_file)
st.image(image, caption="Uploaded Image", use_column_width=True)
# Generate button
if st.button("Generate Video"):
try:
# Create a progress bar
progress_text = "Operation in progress. Please wait..."
my_bar = st.progress(0, text=progress_text)
# Generate video
video_path, caption = generate_video_from_image(image, my_bar)
if video_path and os.path.exists(video_path):
# Read the video file
with open(video_path, 'rb') as video_file:
video_bytes = video_file.read()
# Create download button
st.download_button(
label="Download Video",
data=video_bytes,
file_name="generated_video.mp4",
mime="video/mp4"
)
# Display video
st.video(video_bytes)
else:
st.error("Failed to generate video. Please try again.")
except Exception as e:
st.error(f"An error occurred: {str(e)}")
st.error("Full error message for debugging:")
st.error(e)
if __name__ == "__main__":
main() |