import os import cv2 import glob import json import datetime import requests import gradio as gr from tool_for_end2end import * os.environ["GRADIO_ANALYTICS_ENABLED"] = "False" DATADIR = './temp' _HEADER_ = '''

Tencent HunyuanVideo-Avatar Demo

''' # flask url URL = "http://127.0.0.1:80/predict2" def post_and_get(audio_input, id_image, prompt): now = datetime.datetime.now().isoformat() imgdir = os.path.join(DATADIR, 'reference') videodir = os.path.join(DATADIR, 'video') imgfile = os.path.join(imgdir, now + '.png') output_video_path = os.path.join(videodir, now + '.mp4') os.makedirs(imgdir, exist_ok=True) os.makedirs(videodir, exist_ok=True) cv2.imwrite(imgfile, id_image[:,:,::-1]) proxies = { "http": None, "https": None, } files = { "image_buffer": encode_image_to_base64(imgfile), "audio_buffer": encode_wav_to_base64(audio_input), "text": prompt, "save_fps": 25, } r = requests.get(URL, data = json.dumps(files), proxies=proxies) ret_dict = json.loads(r.text) print(ret_dict["info"]) save_video_base64_to_local( video_path=None, base64_buffer=ret_dict["content"][0]["buffer"], output_video_path=output_video_path) return output_video_path def create_demo(): with gr.Blocks() as demo: gr.Markdown(_HEADER_) with gr.Tab('语音数字人驱动'): with gr.Row(): with gr.Column(scale=1): with gr.Group(): prompt = gr.Textbox(label="Prompt", value="a man is speaking.") audio_input = gr.Audio(sources=["upload"], type="filepath", label="Upload Audio", elem_classes="media-upload", scale=1) id_image = gr.Image(label="Input reference image", height=480) with gr.Column(scale=2): with gr.Group(): output_image = gr.Video(label="Generated Video") with gr.Column(scale=1): generate_btn = gr.Button("Generate") generate_btn.click(fn=post_and_get, inputs=[audio_input, id_image, prompt], outputs=[output_image], ) # quick_prompts = [[x] for x in glob.glob('./assets/images/*.png')] # example_quick_prompts = gr.Dataset(samples=quick_prompts, label='Other object', samples_per_page=1000, components=[id_image]) # example_quick_prompts.click(lambda x: x[0], inputs=example_quick_prompts, outputs=id_image, show_progress=False, queue=False) # with gr.Row(), gr.Column(): # gr.Markdown("## Examples") # example_inps = [ # [ # 'A woman is drinking coffee at a café.', # './assets/images/seg_woman_01.png', # 1280, 720, 30, 129, 7.5, 13, 1024, # "assets/videos/seg_woman_01.mp4" # ], # [ # 'In a cubicle of an office building, a woman focuses intently on the computer screen, typing rapidly on the keyboard, surrounded by piles of documents.', # './assets/images/seg_woman_03.png', # 1280, 720, 30, 129, 7.5, 13, 1025, # "./assets/videos/seg_woman_03.mp4" # ], # [ # 'A man walks across an ancient stone bridge holding an umbrella, raindrops tapping against it.', # './assets/images/seg_man_01.png', # 1280, 720, 30, 129, 7.5, 13, 1025, # "./assets/videos/seg_man_01.mp4" # ], # [ # 'During a train journey, a man admires the changing scenery through the window.', # './assets/images/seg_man_02.png', # 1280, 720, 30, 129, 7.5, 13, 1026, # "./assets/videos/seg_man_02.mp4" # ] # ] # gr.Examples(examples=example_inps, inputs=[prompt, id_image, width, height, num_steps, num_frames, guidance, flow_shift, seed, output_image],) return demo if __name__ == "__main__": allowed_paths = ['/'] demo = create_demo() demo.launch(server_name='0.0.0.0', server_port=8080, share=True, allowed_paths=allowed_paths)