wedyanessam's picture
Update app.py
0d15788 verified
raw
history blame
2.93 kB
chmod +x setup.sh && ./setup.sh
import sys
import os
sys.path.append(os.path.abspath("."))
import gradio as gr
from pathlib import Path
import argparse
# استيراد بقية الأشياء
from STT.sst import speech_to_text
from LLM.llm import generate_reply
from TTS_X.tts import generate_voice
from FantasyTalking.infer import load_models, main
# ثابتات تحميل النموذج
args_template = argparse.Namespace(
wan_model_dir="./models/Wan2.1-I2V-14B-720P",
fantasytalking_model_path="./models/fantasytalking_model.ckpt",
wav2vec_model_dir="./models/wav2vec2-base-960h",
image_path="",
audio_path="",
prompt="",
output_dir="./output",
image_size=512,
audio_scale=1.0,
prompt_cfg_scale=5.0,
audio_cfg_scale=5.0,
max_num_frames=81,
inference_steps=20,
fps=23,
num_persistent_param_in_dit=None,
seed=1111
)
# تحميل النماذج مرة وحدة فقط
pipe, fantasytalking, wav2vec_processor, wav2vec = load_models(args_template)
def generate_video(image_path, audio_path, prompt, output_dir="./output"):
args = argparse.Namespace(
**vars(args_template),
image_path=image_path,
audio_path=audio_path,
prompt=prompt,
output_dir=output_dir
)
return main(args, pipe, fantasytalking, wav2vec_processor, wav2vec)
def full_pipeline(user_audio, user_image):
# 1. تحويل الصوت إلى نص
user_text = speech_to_text(user_audio)
# 2. توليد الرد من LLM
reply = generate_reply(user_text)
# 3. تحويل الرد إلى صوت
reply_audio_path = generate_voice(reply)
# 4. توليد فيديو من الصورة والصوت
Path("./output").mkdir(parents=True, exist_ok=True)
video_path = generate_video(
image_path=user_image,
audio_path=reply_audio_path,
prompt=reply
)
return user_text, reply, reply_audio_path, video_path
# واجهة Gradio
with gr.Blocks(title="🧠 صوتك يحرك صورة!") as demo:
gr.Markdown("## 🎤➡️💬➡️🔊➡️📽️ من صوتك إلى فيديو متكلم!")
with gr.Row():
with gr.Column():
audio_input = gr.Audio(label="🎙️ ارفع صوتك", type="filepath")
image_input = gr.Image(label="🖼️ صورة المتحدث", type="filepath")
btn = gr.Button("🎬 شغل")
with gr.Column():
user_text = gr.Textbox(label="📝 النص المسموع")
reply_text = gr.Textbox(label="🤖 رد المساعد")
reply_audio = gr.Audio(label="🔊 الرد المنطوق")
video_output = gr.Video(label="📽️ الفيديو الناتج")
btn.click(fn=full_pipeline,
inputs=[audio_input, image_input],
outputs=[user_text, reply_text, reply_audio, video_output])
demo.launch(inbrowser=True, share=True)