CoolFace
Apppublic

firstkillday/SadTalker-API

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes
app.py91 linesDownload Raw Back to root
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