Spaces:
Running
Running
import gradio as gr | |
import subprocess | |
import os | |
import requests | |
from datetime import datetime | |
# 🔽 Dosya yoksa Hugging Face'ten indir | |
def download_if_missing(url, local_path): | |
if not os.path.exists(local_path): | |
print(f"⬇️ İndiriliyor: {url}") | |
r = requests.get(url) | |
r.raise_for_status() | |
with open(local_path, "wb") as f: | |
f.write(r.content) | |
else: | |
print(f"✅ Zaten var: {local_path}") | |
# 📦 Tüm model dosyalarını indir | |
def fetch_all_checkpoints(): | |
os.makedirs("checkpoints", exist_ok=True) | |
base_url = "https://huggingface.co/akin23/SadTalker-Checkpoints/resolve/main" | |
files = [ | |
"facevid2vid_00189-model_aa", | |
"facevid2vid_00189-model_bb", | |
"facevid2vid_00189-model_cc", | |
"facevid2vid_00189-model_dd", | |
"facevid2vid_00189-model_ee", | |
"epoch_20.pth", | |
"mapping_00109-model.pth.tar", | |
"mapping_00229-model.pth.tar", | |
"auido2exp_00300-model.pth", | |
"auido2pose_00140-model.pth", | |
"shape_predictor_68_face_landmarks.dat" | |
] | |
for filename in files: | |
url = f"{base_url}/{filename}" | |
local_path = f"checkpoints/{filename}" | |
download_if_missing(url, local_path) | |
# 🔧 facevid2vid parçalarını birleştir | |
def merge_model_parts(): | |
parts = [ | |
"checkpoints/facevid2vid_00189-model_aa", | |
"checkpoints/facevid2vid_00189-model_bb", | |
"checkpoints/facevid2vid_00189-model_cc", | |
"checkpoints/facevid2vid_00189-model_dd", | |
"checkpoints/facevid2vid_00189-model_ee" | |
] | |
output_file = "checkpoints/facevid2vid_00189-model.pth.tar" | |
if not os.path.exists(output_file): | |
with open(output_file, "wb") as out: | |
for part in parts: | |
with open(part, "rb") as p: | |
out.write(p.read()) | |
print("✅ Model parçaları birleştirildi.") | |
else: | |
print("🟡 Birleştirilmiş dosya zaten var.") | |
# 🧩 Dosyaları indir ve birleştir | |
fetch_all_checkpoints() | |
merge_model_parts() | |
# 🔁 Ana video üretim fonksiyonu | |
def generate_video(source_image, driven_audio): | |
output_dir = "results" | |
os.makedirs(output_dir, exist_ok=True) | |
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") | |
result_path = f"{output_dir}/video_{timestamp}.mp4" | |
cmd = f"python inference.py --driven_audio {driven_audio} --source_image {source_image} --result_dir {output_dir} --enhancer gfpgan --pose_style 45 --still --preprocess full" | |
subprocess.run(cmd, shell=True) | |
return result_path | |
# 🎛️ Gradio arayüzü | |
demo = gr.Interface( | |
fn=generate_video, | |
inputs=[ | |
gr.Image(type="filepath", label="Source Image"), | |
gr.Audio(type="filepath", label="Driven Audio") | |
], | |
outputs=gr.Video(label="Generated Video") | |
) | |
# 🚀 Başlat | |
demo.launch() | |