firstkillday/SadTalker-API
0
1import gradio as gr2import subprocess3import os4import requests5from datetime import datetime6 7# 🔽 Dosya yoksa Hugging Face'ten indir8def download_if_missing(url, local_path):9 if not os.path.exists(local_path):10 print(f"⬇️ İndiriliyor: {url}")11 r = requests.get(url)12 r.raise_for_status()13 with open(local_path, "wb") as f:14 f.write(r.content)15 else:16 print(f"✅ Zaten var: {local_path}")17 18# 📦 Tüm model dosyalarını indir19def fetch_all_checkpoints():20 os.makedirs("checkpoints", exist_ok=True)21 base_url = "https://huggingface.co/akin23/SadTalker-Checkpoints/resolve/main"22 23 files = [24 "facevid2vid_00189-model_aa",25 "facevid2vid_00189-model_bb",26 "facevid2vid_00189-model_cc",27 "facevid2vid_00189-model_dd",28 "facevid2vid_00189-model_ee",29 "epoch_20.pth",30 "mapping_00109-model.pth.tar",31 "mapping_00229-model.pth.tar",32 "auido2exp_00300-model.pth",33 "auido2pose_00140-model.pth",34 "shape_predictor_68_face_landmarks.dat"35 ]36 37 for filename in files:38 url = f"{base_url}/{filename}"39 local_path = f"checkpoints/{filename}"40 download_if_missing(url, local_path)41 42# 🔧 facevid2vid parçalarını birleştir43def merge_model_parts():44 parts = [45 "checkpoints/facevid2vid_00189-model_aa",46 "checkpoints/facevid2vid_00189-model_bb",47 "checkpoints/facevid2vid_00189-model_cc",48 "checkpoints/facevid2vid_00189-model_dd",49 "checkpoints/facevid2vid_00189-model_ee"50 ]51 output_file = "checkpoints/facevid2vid_00189-model.pth.tar"52 53 if not os.path.exists(output_file):54 with open(output_file, "wb") as out:55 for part in parts:56 with open(part, "rb") as p:57 out.write(p.read())58 print("✅ Model parçaları birleştirildi.")59 else:60 print("🟡 Birleştirilmiş dosya zaten var.")61 62# 🧩 Dosyaları indir ve birleştir63fetch_all_checkpoints()64merge_model_parts()65 66# 🔁 Ana video üretim fonksiyonu67def generate_video(source_image, driven_audio):68 output_dir = "results"69 os.makedirs(output_dir, exist_ok=True)70 71 timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")72 result_path = f"{output_dir}/video_{timestamp}.mp4"73 74 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"75 subprocess.run(cmd, shell=True)76 77 return result_path78 79# 🎛️ Gradio arayüzü80demo = gr.Interface(81 fn=generate_video,82 inputs=[83 gr.Image(type="filepath", label="Source Image"),84 gr.Audio(type="filepath", label="Driven Audio")85 ],86 outputs=gr.Video(label="Generated Video")87)88 89# 🚀 Başlat90demo.launch()91 