|
import numpy as np |
|
import gradio as gr |
|
import os |
|
import base64 |
|
|
|
|
|
def get_base64(bin_file): |
|
with open(bin_file, "rb") as f: |
|
data = f.read() |
|
return base64.b64encode(data).decode() |
|
|
|
|
|
def conr_fn(character_sheets, pose_zip): |
|
os.system("rm character_sheet/*") |
|
os.system("rm result/*") |
|
os.system("rm poses/*") |
|
os.makedirs("character_sheet", exist_ok=True) |
|
for i, e in enumerate(character_sheets): |
|
with open(f"character_sheet/{i}.png", "wb") as f: |
|
e.seek(0) |
|
f.write(e.read()) |
|
e.seek(0) |
|
os.makedirs("poses", exist_ok=True) |
|
pose_zip.seek(0) |
|
open("poses.zip", "wb").write(pose_zip.read()) |
|
os.system(f"unzip -d poses poses.zip") |
|
os.system("sh infer.sh") |
|
return "output.mp4" |
|
|
|
|
|
with gr.Blocks() as ui: |
|
gr.Markdown("CoNR demo") |
|
gr.Markdown("<a target='_blank' href='https://colab.research.google.com/github/megvii-research/CoNR/blob/main/notebooks/conr.ipynb'> <img src='https://colab.research.google.com/assets/colab-badge.svg' alt='Open In Colab'/></a> [GitHub](https://github.com/megvii-research/CoNR/)") |
|
gr.Markdown("Unofficial demo for [CoNR](https://transpchan.github.io/live3d/).") |
|
|
|
with gr.Row(): |
|
|
|
|
|
|
|
with gr.Column(): |
|
gr.Markdown("## Animate character") |
|
gr.Markdown("Character sheet") |
|
character_sheets = gr.File(file_count="multiple") |
|
gr.Markdown("Pose zip") |
|
pose_video = gr.File(file_count="single") |
|
|
|
|
|
run = gr.Button("Run") |
|
video = gr.Video() |
|
run.click(fn=conr_fn, inputs=[character_sheets, pose_video], outputs=video) |
|
|
|
gr.Markdown("## Examples") |
|
sheets = "character_sheet_ponytail_example" |
|
gr.Examples(fn=conr_fn, inputs=[character_sheets, pose_video], outputs=video, |
|
examples=[[[os.path.join(sheets, x) for x in os.listdir(sheets)], "poses_template.zip"]], cache_examples=True, examples_per_page=1) |
|
|
|
|
|
demo = ui |
|
demo.launch() |
|
|