Spaces:
Running
Running
| import os | |
| import subprocess | |
| from pathlib import Path | |
| from PIL import Image | |
| import streamlit as st | |
| # ---- CONFIG ---- | |
| st.set_page_config( | |
| page_title="Streamlit iCodeIdoia", | |
| page_icon="images/ilpicon1.png", | |
| layout="wide", | |
| initial_sidebar_state="expanded" | |
| ) | |
| st.image("images/banner.jpg") | |
| # ---- PATHS ---- | |
| FRAME1 = Path("demo/frame1.png") | |
| FRAME2 = Path("demo/frame2.png") | |
| TARGET_DIR = Path("/home/user/app/output/") | |
| PALETTE_PNG = TARGET_DIR / "palette.png" | |
| OUTPUT_GIF = TARGET_DIR / "output.gif" | |
| os.makedirs(TARGET_DIR, exist_ok=True) | |
| # ---- FUNCTION ---- | |
| def interpolate_image(img_a_path: str, img_b_path: str) -> str: | |
| subprocess.run([ | |
| "python3", "inference_img.py", | |
| "--img", str(img_a_path), str(img_b_path), | |
| "--exp", "4" | |
| ], check=True) | |
| subprocess.run([ | |
| "ffmpeg", "-y", "-r", "14", "-f", "image2", | |
| "-i", f"{TARGET_DIR}/img%d.png", | |
| "-vf", "palettegen=stats_mode=single", | |
| "-frames:v", "1", | |
| str(PALETTE_PNG) | |
| ], check=True) | |
| subprocess.run([ | |
| "ffmpeg", "-y", "-r", "14", "-f", "image2", | |
| "-i", f"{TARGET_DIR}/img%d.png", | |
| "-i", str(PALETTE_PNG), | |
| "-lavfi", "paletteuse", | |
| str(OUTPUT_GIF) | |
| ], check=True) | |
| return str(OUTPUT_GIF) | |
| # ---- TABS ---- | |
| tab1, tab2 = st.tabs(["Demo", "Upload your images"]) | |
| with tab1: | |
| st.subheader("Demo: Preloaded images") | |
| st.image(str(FRAME1), caption="Image A") | |
| st.image(str(FRAME2), caption="Image B") | |
| if st.button("Run Interpolation Demo"): | |
| gif_path = interpolate_image(FRAME1, FRAME2) | |
| st.image(gif_path, caption="Interpolated GIF") | |
| st.text(f"Output path: {gif_path}") | |
| with tab2: | |
| st.subheader("Upload any two images") | |
| uploaded_a = st.file_uploader("Upload Image A", type=["png", "jpg", "jpeg"]) | |
| uploaded_b = st.file_uploader("Upload Image B", type=["png", "jpg", "jpeg"]) | |
| if uploaded_a and uploaded_b: | |
| temp_a = TARGET_DIR / "user_a.png" | |
| temp_b = TARGET_DIR / "user_b.png" | |
| Image.open(uploaded_a).save(temp_a) | |
| Image.open(uploaded_b).save(temp_b) | |
| if st.button("Run Interpolation"): | |
| gif_path = interpolate_image(temp_a, temp_b) | |
| st.image(gif_path, caption="Interpolated GIF") | |
| st.text(f"Output path: {gif_path}") | |