Update app.py
Browse files
app.py
CHANGED
@@ -31,12 +31,10 @@ from einops import rearrange
|
|
31 |
from scipy.io import wavfile
|
32 |
from transformers import pipeline
|
33 |
|
34 |
-
# ๋น๋์ค ๋ฐฐ๊ฒฝ์ ๊ฑฐ ๊ด๋ จ import
|
35 |
# ๋น๋์ค ๋ฐฐ๊ฒฝ์ ๊ฑฐ ๊ด๋ จ import
|
36 |
from transformers import AutoModelForImageSegmentation
|
37 |
from torchvision import transforms
|
38 |
|
39 |
-
|
40 |
# โโ moviepy import โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
41 |
try:
|
42 |
from moviepy.editor import (
|
@@ -151,7 +149,6 @@ from concurrent.futures import ThreadPoolExecutor
|
|
151 |
import httpx
|
152 |
from datetime import datetime
|
153 |
|
154 |
-
|
155 |
# ํ๊ฒฝ ๋ณ์ ์ค์ ์ผ๋ก torch.load ์ฒดํฌ ์ฐํ (์์ ํด๊ฒฐ์ฑ
)
|
156 |
os.environ["TRANSFORMERS_ALLOW_UNSAFE_DESERIALIZATION"] = "1"
|
157 |
|
@@ -207,11 +204,10 @@ TRANSLATOR = None
|
|
207 |
# API URLs
|
208 |
TEXT2IMG_API_URL = "http://211.233.58.201:7896"
|
209 |
VIDEO_API_URL = "http://211.233.58.201:7875"
|
210 |
-
|
211 |
ANIM_API_URL = os.getenv("ANIM_API_URL", "http://211.233.58.201:7862/")
|
212 |
|
213 |
-
# HTTP ํ์์์ ์ค์
|
214 |
-
ANIM_TIMEOUT = httpx.Timeout(connect=30.0, read=120.0, write=120.0, pool=30.0
|
215 |
|
216 |
# Image size presets
|
217 |
IMAGE_PRESETS = {
|
@@ -993,7 +989,6 @@ def merge_videos_with_audio(video_files, audio_file, audio_mode, audio_volume, o
|
|
993 |
traceback.print_exc()
|
994 |
return None, f"โ ์ค๋ฅ ๋ฐ์: {str(e)}"
|
995 |
|
996 |
-
|
997 |
def test_anim_api_connection():
|
998 |
"""์ ๋๋ฉ์ด์
์๋ฒ ์ฐ๊ฒฐ ํ
์คํธ"""
|
999 |
now = datetime.now().strftime("%H:%M:%S")
|
@@ -1296,8 +1291,7 @@ with demo:
|
|
1296 |
interactive=False
|
1297 |
)
|
1298 |
|
1299 |
-
|
1300 |
-
# ๋ค ๋ฒ์งธ ํญ: ๋น๋์ค ํธ์ง ๋ถ๋ถ์ ๋ค์๊ณผ ๊ฐ์ด ์์
|
1301 |
with gr.Tab("๋น๋์ค ํธ์ง", elem_classes="tabitem"):
|
1302 |
with gr.Row(equal_height=True):
|
1303 |
# ์
๋ ฅ ์ปฌ๋ผ
|
@@ -1331,7 +1325,6 @@ with demo:
|
|
1331 |
- ์ต์์ ๊ฒฐ๊ณผ๋ฅผ ์ํด ๊ฐ์ ํฌ๊ธฐ์ ๋น๋์ค๋ฅผ ์ฌ์ฉํ์ธ์
|
1332 |
""")
|
1333 |
|
1334 |
-
|
1335 |
with gr.Group(elem_classes="panel-box"):
|
1336 |
gr.Markdown("### ๐ต ์ค๋์ค ์ค์ (์ ํ)")
|
1337 |
|
@@ -1505,9 +1498,7 @@ with demo:
|
|
1505 |
๊ธด ๋น๋์ค๋ ์์ ์กฐ๊ฐ์ผ๋ก ๋๋์ด ์ฒ๋ฆฌํ์ธ์.
|
1506 |
""")
|
1507 |
|
1508 |
-
|
1509 |
-
|
1510 |
-
# ์ฌ์ฏ ๋ฒ์งธ ํญ: ์ด๋ฏธ์งto์๋ฐํ
|
1511 |
with gr.Tab("์ด๋ฏธ์งto์๋ฐํ", elem_classes="tabitem"):
|
1512 |
with gr.Row(equal_height=True):
|
1513 |
# ์
๋ ฅ ์ปฌ๋ผ
|
@@ -1615,118 +1606,6 @@ with demo:
|
|
1615 |
- ๋ฐฐ๊ฒฝ์ด ๋จ์ํ ์ด๋ฏธ์ง๊ฐ ๋ ์ข์ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํฉ๋๋ค
|
1616 |
- ์ค๋์ค์ ์์ฑ์ด ๋ช
ํํ ์๋ก ๋ฆฝ์ฑํฌ๊ฐ ์ ํํฉ๋๋ค
|
1617 |
""")
|
1618 |
-
|
1619 |
-
# ์ฌ์ฏ ๋ฒ์งธ ํญ: ์ด๋ฏธ์งto์๋ฐํ
|
1620 |
-
with gr.Tab("์ด๋ฏธ์งto์๋ฐํ", elem_classes="tabitem"):
|
1621 |
-
with gr.Row(equal_height=True):
|
1622 |
-
# ์
๋ ฅ ์ปฌ๋ผ
|
1623 |
-
with gr.Column(scale=1):
|
1624 |
-
with gr.Group(elem_classes="panel-box"):
|
1625 |
-
gr.Markdown("### ๐ญ ์๋ฐํ ์ ๋๋ฉ์ด์
์์ฑ")
|
1626 |
-
gr.Markdown("""
|
1627 |
-
ํฌํธ๋ ์ดํธ ์ด๋ฏธ์ง์ ์ค๋์ค๋ฅผ ์
๋ก๋ํ๋ฉด ๋งํ๋ ์๋ฐํ ์ ๋๋ฉ์ด์
์ ์์ฑํฉ๋๋ค.
|
1628 |
-
|
1629 |
-
**๊ถ์ฅ ์ฌํญ**:
|
1630 |
-
- ์ด๋ฏธ์ง: ์ ๋ฉด์ ๋ณด๊ณ ์๋ ์ผ๊ตด ์ฌ์ง
|
1631 |
-
- ์ค๋์ค: ๋ช
ํํ ์์ฑ์ด ๋ด๊ธด ์ค๋์ค ํ์ผ
|
1632 |
-
""")
|
1633 |
-
|
1634 |
-
avatar_image = gr.Image(
|
1635 |
-
label="ํฌํธ๋ ์ดํธ ์ด๋ฏธ์ง",
|
1636 |
-
type="filepath",
|
1637 |
-
elem_classes="panel-box"
|
1638 |
-
)
|
1639 |
-
|
1640 |
-
avatar_audio = gr.Audio(
|
1641 |
-
label="๋๋ผ์ด๋น ์ค๋์ค",
|
1642 |
-
type="filepath",
|
1643 |
-
elem_classes="panel-box"
|
1644 |
-
)
|
1645 |
-
|
1646 |
-
with gr.Group(elem_classes="panel-box"):
|
1647 |
-
gr.Markdown("### โ๏ธ ์์ฑ ์ค์ ")
|
1648 |
-
|
1649 |
-
guidance_scale = gr.Slider(
|
1650 |
-
minimum=1.0,
|
1651 |
-
maximum=10.0,
|
1652 |
-
value=3.0,
|
1653 |
-
step=0.1,
|
1654 |
-
label="๊ฐ์ด๋์ค ์ค์ผ์ผ",
|
1655 |
-
info="๋์์๋ก ์ค๋์ค์ ๋ ์ถฉ์คํ ์์ง์ ์์ฑ"
|
1656 |
-
)
|
1657 |
-
|
1658 |
-
inference_steps = gr.Slider(
|
1659 |
-
minimum=5,
|
1660 |
-
maximum=30,
|
1661 |
-
value=10,
|
1662 |
-
step=1,
|
1663 |
-
label="์ถ๋ก ์คํ
",
|
1664 |
-
info="๋์์๋ก ํ์ง์ด ์ข์์ง์ง๋ง ์์ฑ ์๊ฐ์ด ์ฆ๊ฐ"
|
1665 |
-
)
|
1666 |
-
|
1667 |
-
# ์๋ฒ ์ํ ์ฒดํฌ
|
1668 |
-
with gr.Row():
|
1669 |
-
test_connection_btn = gr.Button(
|
1670 |
-
"๐ ์๋ฒ ์ฐ๊ฒฐ ํ
์คํธ",
|
1671 |
-
elem_id="test-connection-btn",
|
1672 |
-
scale=1
|
1673 |
-
)
|
1674 |
-
|
1675 |
-
anim_status = gr.Textbox(
|
1676 |
-
label="์๋ฒ ์ํ",
|
1677 |
-
interactive=False,
|
1678 |
-
elem_classes="panel-box"
|
1679 |
-
)
|
1680 |
-
|
1681 |
-
generate_avatar_btn = gr.Button(
|
1682 |
-
"๐ฌ ์๋ฐํ ์์ฑ",
|
1683 |
-
variant="primary",
|
1684 |
-
elem_id="avatar-btn"
|
1685 |
-
)
|
1686 |
-
|
1687 |
-
# ์ถ๋ ฅ ์ปฌ๋ผ
|
1688 |
-
with gr.Column(scale=1):
|
1689 |
-
with gr.Group(elem_classes="panel-box"):
|
1690 |
-
gr.Markdown("### ๐ญ ์์ฑ ๊ฒฐ๊ณผ")
|
1691 |
-
|
1692 |
-
avatar_result = gr.Video(
|
1693 |
-
label="์ ๋๋ฉ์ด์
๊ฒฐ๊ณผ",
|
1694 |
-
elem_classes="panel-box"
|
1695 |
-
)
|
1696 |
-
|
1697 |
-
avatar_comparison = gr.Video(
|
1698 |
-
label="์๋ณธ ๋๋น ๊ฒฐ๊ณผ (Side-by-Side)",
|
1699 |
-
elem_classes="panel-box"
|
1700 |
-
)
|
1701 |
-
|
1702 |
-
with gr.Accordion("์คํ ๋ก๊ทธ", open=False):
|
1703 |
-
avatar_logs = gr.Textbox(
|
1704 |
-
label="๋ก๊ทธ",
|
1705 |
-
lines=10,
|
1706 |
-
max_lines=20,
|
1707 |
-
interactive=False,
|
1708 |
-
elem_classes="panel-box"
|
1709 |
-
)
|
1710 |
-
|
1711 |
-
gr.Markdown("""
|
1712 |
-
### โน๏ธ ์ฌ์ฉ ์๋ด
|
1713 |
-
|
1714 |
-
1. **ํฌํธ๋ ์ดํธ ์ด๋ฏธ์ง ์
๋ก๋**: ์ ๋ฉด์ ๋ณด๊ณ ์๋ ์ ๋ช
ํ ์ผ๊ตด ์ฌ์ง
|
1715 |
-
2. **์ค๋์ค ์
๋ก๋**: ์ ๋๋ฉ์ด์
์ ์ฌ์ฉํ ์์ฑ ํ์ผ
|
1716 |
-
3. **์ค์ ์กฐ์ **: ๊ฐ์ด๋์ค ์ค์ผ์ผ๊ณผ ์ถ๋ก ์คํ
์กฐ์
|
1717 |
-
4. **์์ฑ ์์**: '์๋ฐํ ์์ฑ' ๋ฒํผ ํด๋ฆญ
|
1718 |
-
|
1719 |
-
**์ฒ๋ฆฌ ์๊ฐ**:
|
1720 |
-
- ์ผ๋ฐ์ ์ผ๋ก 2-5๋ถ ์์
|
1721 |
-
- ๊ธด ์ค๋์ค์ผ์๋ก ์ฒ๋ฆฌ ์๊ฐ ์ฆ๊ฐ
|
1722 |
-
|
1723 |
-
**ํ**:
|
1724 |
-
- ๋ฐฐ๊ฒฝ์ด ๋จ์ํ ์ด๋ฏธ์ง๊ฐ ๋ ์ข์ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํฉ๋๋ค
|
1725 |
-
- ์ค๋์ค์ ์์ฑ์ด ๋ช
ํํ ์๋ก ๋ฆฝ์ฑํฌ๊ฐ ์ ํํฉ๋๋ค
|
1726 |
-
""")
|
1727 |
-
|
1728 |
-
|
1729 |
-
|
1730 |
|
1731 |
# ๋ชจ๋ธ ๋ก๋ ํจ์ ์คํ
|
1732 |
def on_demo_load():
|
@@ -1777,7 +1656,6 @@ with demo:
|
|
1777 |
)
|
1778 |
|
1779 |
# ์ด๋ฒคํธ ์ฐ๊ฒฐ - ๋ค ๋ฒ์งธ ํญ (๋น๋์ค ํธ์ง)
|
1780 |
-
|
1781 |
def toggle_original_volume(mode):
|
1782 |
return gr.update(visible=(mode == "๋ฐฑ๊ทธ๋ผ์ด๋ ๋ฎค์ง"))
|
1783 |
|
@@ -1787,12 +1665,12 @@ with demo:
|
|
1787 |
outputs=[original_audio_volume]
|
1788 |
)
|
1789 |
|
1790 |
-
|
1791 |
merge_videos_btn.click(
|
1792 |
merge_videos_with_audio,
|
1793 |
inputs=[video_files, audio_file, audio_mode, audio_volume, original_audio_volume, output_fps],
|
1794 |
outputs=[merged_video, merge_status]
|
1795 |
-
)
|
|
|
1796 |
# ์ด๋ฒคํธ ์ฐ๊ฒฐ - ๋ค์ฏ ๋ฒ์งธ ํญ (๋น๋์ค ๋ฐฐ๊ฒฝ์ ๊ฑฐ/ํฉ์ฑ)
|
1797 |
def update_bg_visibility(bg_type):
|
1798 |
if bg_type == "์์":
|
@@ -1817,6 +1695,7 @@ with demo:
|
|
1817 |
outputs=[stream_image, output_bg_video, time_textbox]
|
1818 |
)
|
1819 |
|
|
|
1820 |
test_connection_btn.click(
|
1821 |
test_anim_api_connection,
|
1822 |
outputs=[anim_status, anim_status]
|
@@ -1827,7 +1706,6 @@ with demo:
|
|
1827 |
inputs=[avatar_image, avatar_audio, guidance_scale, inference_steps],
|
1828 |
outputs=[avatar_result, avatar_comparison, avatar_logs]
|
1829 |
)
|
1830 |
-
|
1831 |
|
1832 |
# ๋ฐ๋ชจ ๋ก๋ ์ ์คํ
|
1833 |
demo.load(on_demo_load, outputs=model_status)
|
@@ -1840,4 +1718,4 @@ if __name__ == "__main__":
|
|
1840 |
except:
|
1841 |
pass
|
1842 |
|
1843 |
-
demo.launch()
|
|
|
31 |
from scipy.io import wavfile
|
32 |
from transformers import pipeline
|
33 |
|
|
|
34 |
# ๋น๋์ค ๋ฐฐ๊ฒฝ์ ๊ฑฐ ๊ด๋ จ import
|
35 |
from transformers import AutoModelForImageSegmentation
|
36 |
from torchvision import transforms
|
37 |
|
|
|
38 |
# โโ moviepy import โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
39 |
try:
|
40 |
from moviepy.editor import (
|
|
|
149 |
import httpx
|
150 |
from datetime import datetime
|
151 |
|
|
|
152 |
# ํ๊ฒฝ ๋ณ์ ์ค์ ์ผ๋ก torch.load ์ฒดํฌ ์ฐํ (์์ ํด๊ฒฐ์ฑ
)
|
153 |
os.environ["TRANSFORMERS_ALLOW_UNSAFE_DESERIALIZATION"] = "1"
|
154 |
|
|
|
204 |
# API URLs
|
205 |
TEXT2IMG_API_URL = "http://211.233.58.201:7896"
|
206 |
VIDEO_API_URL = "http://211.233.58.201:7875"
|
|
|
207 |
ANIM_API_URL = os.getenv("ANIM_API_URL", "http://211.233.58.201:7862/")
|
208 |
|
209 |
+
# HTTP ํ์์์ ์ค์ - ๊ดํธ ์์
|
210 |
+
ANIM_TIMEOUT = httpx.Timeout(connect=30.0, read=120.0, write=120.0, pool=30.0)
|
211 |
|
212 |
# Image size presets
|
213 |
IMAGE_PRESETS = {
|
|
|
989 |
traceback.print_exc()
|
990 |
return None, f"โ ์ค๋ฅ ๋ฐ์: {str(e)}"
|
991 |
|
|
|
992 |
def test_anim_api_connection():
|
993 |
"""์ ๋๋ฉ์ด์
์๋ฒ ์ฐ๊ฒฐ ํ
์คํธ"""
|
994 |
now = datetime.now().strftime("%H:%M:%S")
|
|
|
1291 |
interactive=False
|
1292 |
)
|
1293 |
|
1294 |
+
# ๋ค ๋ฒ์งธ ํญ: ๋น๋์ค ํธ์ง
|
|
|
1295 |
with gr.Tab("๋น๋์ค ํธ์ง", elem_classes="tabitem"):
|
1296 |
with gr.Row(equal_height=True):
|
1297 |
# ์
๋ ฅ ์ปฌ๋ผ
|
|
|
1325 |
- ์ต์์ ๊ฒฐ๊ณผ๋ฅผ ์ํด ๊ฐ์ ํฌ๊ธฐ์ ๋น๋์ค๋ฅผ ์ฌ์ฉํ์ธ์
|
1326 |
""")
|
1327 |
|
|
|
1328 |
with gr.Group(elem_classes="panel-box"):
|
1329 |
gr.Markdown("### ๐ต ์ค๋์ค ์ค์ (์ ํ)")
|
1330 |
|
|
|
1498 |
๊ธด ๋น๋์ค๋ ์์ ์กฐ๊ฐ์ผ๋ก ๋๋์ด ์ฒ๋ฆฌํ์ธ์.
|
1499 |
""")
|
1500 |
|
1501 |
+
# ์ฌ์ฏ ๋ฒ์งธ ํญ: ์ด๋ฏธ์งto์๋ฐํ (์ค๋ณต ์ ๊ฑฐํ๊ณ ํ๋๋ง ์ ์ง)
|
|
|
|
|
1502 |
with gr.Tab("์ด๋ฏธ์งto์๋ฐํ", elem_classes="tabitem"):
|
1503 |
with gr.Row(equal_height=True):
|
1504 |
# ์
๋ ฅ ์ปฌ๋ผ
|
|
|
1606 |
- ๋ฐฐ๊ฒฝ์ด ๋จ์ํ ์ด๋ฏธ์ง๊ฐ ๋ ์ข์ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํฉ๋๋ค
|
1607 |
- ์ค๋์ค์ ์์ฑ์ด ๋ช
ํํ ์๋ก ๋ฆฝ์ฑํฌ๊ฐ ์ ํํฉ๋๋ค
|
1608 |
""")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1609 |
|
1610 |
# ๋ชจ๋ธ ๋ก๋ ํจ์ ์คํ
|
1611 |
def on_demo_load():
|
|
|
1656 |
)
|
1657 |
|
1658 |
# ์ด๋ฒคํธ ์ฐ๊ฒฐ - ๋ค ๋ฒ์งธ ํญ (๋น๋์ค ํธ์ง)
|
|
|
1659 |
def toggle_original_volume(mode):
|
1660 |
return gr.update(visible=(mode == "๋ฐฑ๊ทธ๋ผ์ด๋ ๋ฎค์ง"))
|
1661 |
|
|
|
1665 |
outputs=[original_audio_volume]
|
1666 |
)
|
1667 |
|
|
|
1668 |
merge_videos_btn.click(
|
1669 |
merge_videos_with_audio,
|
1670 |
inputs=[video_files, audio_file, audio_mode, audio_volume, original_audio_volume, output_fps],
|
1671 |
outputs=[merged_video, merge_status]
|
1672 |
+
)
|
1673 |
+
|
1674 |
# ์ด๋ฒคํธ ์ฐ๊ฒฐ - ๋ค์ฏ ๋ฒ์งธ ํญ (๋น๋์ค ๋ฐฐ๊ฒฝ์ ๊ฑฐ/ํฉ์ฑ)
|
1675 |
def update_bg_visibility(bg_type):
|
1676 |
if bg_type == "์์":
|
|
|
1695 |
outputs=[stream_image, output_bg_video, time_textbox]
|
1696 |
)
|
1697 |
|
1698 |
+
# ์ด๋ฒคํธ ์ฐ๊ฒฐ - ์ฌ์ฏ ๋ฒ์งธ ํญ (์ด๋ฏธ์งto์๋ฐํ)
|
1699 |
test_connection_btn.click(
|
1700 |
test_anim_api_connection,
|
1701 |
outputs=[anim_status, anim_status]
|
|
|
1706 |
inputs=[avatar_image, avatar_audio, guidance_scale, inference_steps],
|
1707 |
outputs=[avatar_result, avatar_comparison, avatar_logs]
|
1708 |
)
|
|
|
1709 |
|
1710 |
# ๋ฐ๋ชจ ๋ก๋ ์ ์คํ
|
1711 |
demo.load(on_demo_load, outputs=model_status)
|
|
|
1718 |
except:
|
1719 |
pass
|
1720 |
|
1721 |
+
demo.launch()
|