Spaces:
Runtime error
Runtime error
import streamlit as st | |
import os | |
import subprocess | |
import time | |
from PIL import Image | |
from io import BytesIO | |
from persona import Persona | |
url = 'https://iiitaphyd-my.sharepoint.com/personal/radrabha_m_research_iiit_ac_in/_layouts/15/download.aspx?share=EdjI7bZlgApMqsVoEUUXpLsBxqXbn5z8VTmoxp55YNDcIA' | |
output_path = 'wav2lip/wav2lip_gan.pth' | |
# Check if the file does not exist | |
if not os.path.exists(output_path): | |
try: | |
# Using subprocess to call wget | |
subprocess.run(['wget', '-c', '--read-timeout=5', '-O', output_path, url], check=True) | |
except subprocess.CalledProcessError as e: | |
print(f"An error occurred: {e}") | |
else: | |
print(f"The file '{output_path}' already exists.") | |
# Initialize a session state variable that tracks the sidebar state (either 'expanded' or 'collapsed'). | |
if 'sidebar_state' not in st.session_state: | |
st.session_state.sidebar_state = 'expanded' | |
# Streamlit page configuration | |
# st.set_page_config(page_title="Talking Head Generator", layout="wide") | |
st.set_page_config(initial_sidebar_state=st.session_state.sidebar_state, page_title="Talking Head Generator", layout="wide") | |
def generate_talking_head(text_prompt, voice, speed, image_file, driver_video): | |
video_file = Persona(text_prompt, voice, speed, image_file, driver_video) | |
time.sleep(5) # Simulating processing time | |
return video_file | |
def save_uploaded_file(uploaded_file, destination_dir="temp"): | |
file_path = os.path.join(destination_dir, uploaded_file.name) | |
# Create the destination directory if it doesn't exist | |
os.makedirs(destination_dir, exist_ok=True) | |
# Check if the source and destination are the same | |
if os.path.abspath(uploaded_file.name) != os.path.abspath(file_path): | |
try: | |
with open(file_path, "wb") as f: | |
f.write(uploaded_file.getbuffer()) | |
return file_path | |
except Exception as e: | |
st.error(f"Error saving file: {e}") | |
return None | |
else: | |
# If the file already exists in the destination, return its path | |
return file_path | |
# UI Layout | |
col1, col2, col3 = st.columns([0.5, 4, 1]) | |
# Column 1: Input Prompt and Image Upload | |
with col1: | |
# st.header("Your Inputs") | |
# st.sidebar.markdown('Your Inputs') | |
text_prompt = st.sidebar.text_area("Enter your text prompt:", height = 200) | |
voice = st.sidebar.selectbox( | |
'Choose Voices?',('alloy', 'echo', 'fable', 'onyx', 'nova', 'shimmer')) | |
speed = st.sidebar.slider('Talking speed?', 1, 10, 1) | |
uploaded_image = st.sidebar.file_uploader("Upload an image", type=["png", "jpg", "jpeg"]) | |
uploaded_driver_video = st.sidebar.file_uploader("Upload a driver video", type=["mp4"]) | |
# Column 2: Display Logo, Title, Description and Trigger Button | |
with col2: | |
st.image("images/logo1.jpg", width=650) | |
#st.title("Talking Head Generator") | |
# st.write("Generate realistic talking heads from **text prompts** and **images**.") | |
generate_button = st.button("Generate Talking Head") | |
st.write('β’αα||α|α||||αβββββα| β’ Voice Selected :', voice) | |
# Column 3: Download Button | |
with col3: | |
st.subheader("##π₯") | |
display_video = st.empty() | |
download_button = st.empty() | |
# Handling Button Click | |
if generate_button and text_prompt and voice and speed and uploaded_image and uploaded_driver_video: | |
with st.spinner('Generating Talking Head...'): | |
image_path = save_uploaded_file(uploaded_image) | |
driver_video_path = save_uploaded_file(uploaded_driver_video) | |
video_path = generate_talking_head(text_prompt, voice, speed, image_path, driver_video_path) | |
# Display progress bar | |
progress_bar = st.progress(0) | |
for percent_complete in range(100): | |
time.sleep(0.1) | |
progress_bar.progress(percent_complete + 1) | |
progress_bar.empty() | |
# display video | |
with display_video: | |
if os.path.exists(video_path): | |
video_file = open(video_path, 'rb') | |
video_bytes = video_file.read() | |
st.video(video_bytes) | |
else: | |
st.error("Video file not found. Please ensure the video generation process completes successfully.") | |
# Show download button | |
with download_button: | |
if os.path.exists(video_path): | |
with open(video_path, "rb") as file: | |
btn = st.download_button( | |
label="Download Video", | |
data=file, | |
file_name="talking_head.mp4", | |
mime="video/mp4") | |
else: | |
st.error("Video file not found. Please ensure the video generation process completes successfully.") | |
# Placeholder for external Python script integration | |
# This part should include the actual calls to the scripts provided. | |