ginipick commited on
Commit
9a28049
ยท
verified ยท
1 Parent(s): 8db4315

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +8 -130
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()