Spaces:
Running
Running
import streamlit as st | |
import os | |
import subprocess | |
from PIL import Image | |
from io import BytesIO | |
# Function to run the provided script and return the path of the generated video | |
def run_script(image_path, video_path): | |
output_video_path = "/content/roop/swapped.mp4" | |
script = """ | |
cd /content/roop | |
!git clone https://github.com/s0md3v/roop.git | |
%cd roop | |
!wget https://huggingface.co/ezioruan/inswapper_128.onnx/resolve/main/inswapper_128.onnx -O inswapper_128.onnx | |
!mkdir models | |
!mv inswapper_128.onnx ./models | |
!python run.py --target {} --output-video-quality 80 --source {} -o {} --execution-provider cuda --frame-processor face_swapper face_enhancer | |
""".format(video_path, image_path, output_video_path) | |
subprocess.run(script, shell=True, cwd="/content") | |
# Return the path of the generated video | |
return output_video_path | |
# Streamlit app | |
def main(): | |
st.title("Face Swapper App") | |
# File upload | |
st.sidebar.header("Upload Files") | |
image_file = st.sidebar.file_uploader("Upload Image", type=["jpg", "png", "jpeg"]) | |
video_file = st.sidebar.file_uploader("Upload Video", type=["mp4"]) | |
if st.sidebar.button("Swap Faces"): | |
if image_file is not None and video_file is not None: | |
# Save uploaded files | |
image_path = image_file | |
video_path = video_file | |
with open(image_path, "wb") as f: | |
f.write(image_file.read()) | |
with open(video_path, "wb") as f: | |
f.write(video_file.read()) | |
# Run the script and get the path of the generated video | |
generated_video_path = run_script(image_path, video_path) | |
# Display the swapped video | |
video_bytes = open(generated_video_path, "rb").read() | |
st.video(video_bytes) | |
if __name__ == "__main__": | |
main() | |