seawolf2357 commited on
Commit
993c6c8
ยท
1 Parent(s): 01d4338

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +27 -67
app.py CHANGED
@@ -1,84 +1,44 @@
1
  import gradio as gr
2
  import requests
3
 
4
- def generate_audio(text, voice_name):
5
-
6
- # ๊ฐ ์Œ์„ฑ ์˜ต์…˜์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ํ…์ŠคํŠธ ์˜ˆ์‹œ
7
- default_examples = {
8
- "๋‚จ์„ฑAI": "์•ˆ๋…•ํ•˜์„ธ์š”, ๋‚จ์„ฑ AI ํ‘œ์ค€ ์Œ์„ฑ์ž…๋‹ˆ๋‹ค.",
9
- "์—ฌ์„ฑAI": "์•ˆ๋…•ํ•˜์„ธ์š”, ์—ฌ์„ฑ AI ํ‘œ์ค€ ์Œ์„ฑ์ž…๋‹ˆ๋‹ค.",
10
- "ํŠธ๋Ÿผํ”„": "Make, America, Great, Again! , ๋‹ค์‹œ, ์œ„๋Œ€ํ•œ, ๋ฏธ๊ตญ์„, ๋งŒ๋“ญ์‹œ๋‹ค!",
11
- "์ฐจ์Šน์›": "์•ˆ๋…•ํ•˜์„ธ์š”, ์ƒˆํ•ด ๋ณต ๋งŽ์ด ๋ฐ›์œผ์‹œ๊ธธ ๊ธฐ์›ํ•ฉ๋‹ˆ๋‹ค.",
12
- "๊น€์ •์€": "์•ˆ๋…•ํ•˜์„ธ์š”, ์ƒˆํ•ด ๋ณต ๋งŽ์ด ๋ฐ›์œผ์‹œ๊ธธ ๊ธฐ์›ํ•ฉ๋‹ˆ๋‹ค.",
13
- "๋…ธ๋ฌดํ˜„": "์•ˆ๋…•ํ•˜์„ธ์š”, ์ƒˆํ•ด ๋ณต ๋งŽ์ด ๋ฐ›์œผ์‹œ๊ธธ ๊ธฐ์›ํ•ฉ๋‹ˆ๋‹ค.",
14
- "๊ถ์˜ˆ": "์•ˆ๋…•ํ•˜์„ธ์š”, ๋ฏธ๋ฅต์˜ ๊ฐ€๋ฅด์นจ์€, ์˜ด๋งˆ๋‹ˆ ๋ฐ˜๋ฉ”ํ™ˆ์ด๋‹ˆ๋ผ.",
15
- "์œค์„์—ด": "์•ˆ๋…•ํ•˜์„ธ์š”, ์ƒˆํ•ด ๋ณต ๋งŽ์ด ๋ฐ›์œผ์‹œ๊ธธ ๊ธฐ์›ํ•ฉ๋‹ˆ๋‹ค."
16
- }
17
-
18
- MAX_CHARS = 100
19
- if not text:
20
- text = default_examples[voice_name] # ์‚ฌ์šฉ์ž ์ž…๋ ฅ์ด ์—†์œผ๋ฉด ๊ธฐ๋ณธ ์˜ˆ์‹œ ์‚ฌ์šฉ
21
- elif len(text) > MAX_CHARS:
22
- text = text[:MAX_CHARS] # ์ตœ๋Œ€ ๊ธ€์ž์ˆ˜๋กœ ํ…์ŠคํŠธ ์ž๋ฅด๊ธฐ
23
-
24
- voices = {
25
- "๋‚จ์„ฑAI": "6uQD2RqeSgIey9LVBafG",
26
- "์—ฌ์„ฑAI": "jeuEgCxtyEYkC3zsQODy",
27
- "ํŠธ๋Ÿผํ”„": "nP4xQZkEwzlvgutdc3xM",
28
- "์ฐจ์Šน์›": "SKwm0HLYsVDCM2ruvw2p",
29
- "๊น€์ •์€": "YPWL3nQPzBN1XaiZF4aj",
30
- "๋…ธ๋ฌดํ˜„": "6JdivX36i1eJ3LqLmvwH",
31
- "๊ถ์˜ˆ": "4kFrgJPCTjA6DyPM5Gr5",
32
- "์œค์„์—ด": "Qrf03Q67kRgpFlj9fto3"
33
- }
34
- voice_id = voices[voice_name]
35
- url = f"https://api.elevenlabs.io/v1/text-to-speech/{voice_id}"
36
- model_id = "eleven_multilingual_v2"
37
  payload = {
38
- "model_id": model_id,
39
- "text": text,
40
- "voice_settings": {
41
- "similarity_boost": 0.75,
42
- "stability": 0.5,
43
- "style": 0,
44
- "use_speaker_boost": True
45
- }
46
- }
47
- headers = {
48
- "Content-Type": "application/json",
49
- "xi-api-key": "c5fb99a2b25402f104d246379bcf819a"
50
  }
51
-
52
- response = requests.post(url, json=payload, headers=headers, stream=True)
53
-
54
  if response.status_code == 200:
55
- chunks = []
56
- for chunk in response.iter_content(chunk_size=CHUNK_SIZE):
57
- chunks.append(chunk)
58
- return b''.join(chunks)
59
  else:
60
  raise Exception(f"์˜ค๋ฅ˜ ๋ฐœ์ƒ. ์ƒํƒœ ์ฝ”๋“œ: {response.status_code}")
61
 
62
- CHUNK_SIZE = 1024
63
-
64
-
65
  # Gradio ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜
66
  with gr.Blocks() as demo:
67
- gr.Markdown("FakeVoice: AI๊ฐ€ ๋ณต์ œํ•œ ์œ ๋ช…์ธ์˜ ์Œ์„ฑ์œผ๋กœ, ํ…์ŠคํŠธ๋งŒ ์ž…๋ ฅํ•˜๋ฉด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ•ด๋‹น ์ธ๋ฌผ์˜ ์Œ์„ฑ์œผ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.")
68
- gr.Markdown("์ง€๊ธˆ ์ปค๋ฎค๋‹ˆํ‹ฐ์— ์ฐธ์—ฌํ•˜์‹œ๋ฉด ๋”์šฑ ๋งŽ์€ ์ •๋ณด์™€ ๋‹ค์–‘ํ•œ ๊ธฐํšŒ๋ฅผ ์–ป์œผ์‹ค ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ปค๋ฎค๋‹ˆํ‹ฐ ์ฐธ์—ฌ ๋งํฌ https://open.kakao.com/o/gE6hK9Vf ")
69
- gr.Markdown("์Œ์„ฑ์„ ๋จผ์ € ์„ ํƒํ•œ ํ›„ ์›ํ•˜์‹œ๋Š” ํ…์ŠคํŠธ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”. ํ…์ŠคํŠธ๋ฅผ ์ž…๋ ฅํ•˜์ง€ ์•Š๊ณ  ์ƒ์„ฑ์„ ๋ˆ„๋ฅด๋ฉด ์˜ˆ์‹œ ๋Œ€์‚ฌ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.")
70
- gr.Markdown("์ƒ์„ฑ๋œ ์˜ค๋””์˜ค๋ฅผ ๋‹ค์šด๋กœ๋“œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์šด๋กœ๋“œ ๋ฐ›์œผ์‹  ํ›„ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์€ ํŒŒ์ผ์˜ ํ™•์žฅ์ž๋ฅผ mp3๋กœ ๋ณ€๊ฒฝํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ")
71
- voice_choice = gr.Dropdown(choices=["๋‚จ์„ฑAI", "์—ฌ์„ฑAI", "ํŠธ๋Ÿผํ”„", "์ฐจ์Šน์›", "๊น€์ •์€", "๋…ธ๋ฌดํ˜„", "๊ถ์˜ˆ", "์œค์„์—ด"], label="์Œ์„ฑ ์„ ํƒ")
72
- text_input = gr.Textbox(label="์Œ์„ฑ์œผ๋กœ ์ƒ์„ฑํ•  ํ…์ŠคํŠธ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”.(100๊ธ€์ž ์ด๋‚ด ์ œํ•œ ์„ค์ •๋˜์–ด, ์ดˆ๊ณผ์‹œ ์Œ์„ฑ ์ƒ์„ฑ์ด ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.)")
73
- submit_button = gr.Button("์ƒ์„ฑ")
74
- audio_output = gr.Audio(label="์ƒ์„ฑ๋œ ์˜ค๋””์˜ค")
75
 
76
  submit_button.click(
77
- fn=generate_audio,
78
- inputs=[text_input, voice_choice],
79
- outputs=audio_output
80
  )
81
 
82
-
83
  if __name__ == "__main__":
84
  demo.launch()
 
1
  import gradio as gr
2
  import requests
3
 
4
+ # API ํ‚ค ์„ค์ •
5
+ API_KEY = "ZZUIQ4OZASNRQ8B8WYHNW"
6
+
7
+ def generate_video(keyword, voice_actor, content_type, style):
8
+ # Fliki API์— ๋น„๋””์˜ค ์ƒ์„ฑ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ์ฝ”๋“œ
9
+ # ์ด ๋ถ€๋ถ„์€ Fliki API ๋ฌธ์„œ์— ๋”ฐ๋ผ ์ ์ ˆํ•˜๊ฒŒ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
10
+ # ์˜ˆ์‹œ:
11
+ url = "https://api.fliki.ai/v1/generate/video"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  payload = {
13
+ "keyword": keyword,
14
+ "voice_actor": voice_actor,
15
+ "content_type": content_type,
16
+ "style": style
 
 
 
 
 
 
 
 
17
  }
18
+ headers = {"Authorization": f"Bearer {API_KEY}"}
19
+ response = requests.post(url, json=payload, headers=headers)
20
+
21
  if response.status_code == 200:
22
+ return response.json()["video_url"] # ๋น„๋””์˜ค URL ๋ฐ˜ํ™˜
 
 
 
23
  else:
24
  raise Exception(f"์˜ค๋ฅ˜ ๋ฐœ์ƒ. ์ƒํƒœ ์ฝ”๋“œ: {response.status_code}")
25
 
 
 
 
26
  # Gradio ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜
27
  with gr.Blocks() as demo:
28
+ with gr.Row():
29
+ keyword_input = gr.Textbox(label="ํ‚ค์›Œ๋“œ ์ž…๋ ฅ")
30
+ voice_actor_input = gr.Dropdown(choices=["์„ฑ์šฐ1", "์„ฑ์šฐ2", "์„ฑ์šฐ3"], label="์„ฑ์šฐ ์„ ํƒ")
31
+ content_type_input = gr.Radio(choices=["์ด๋ฏธ์ง€", "๋น„๋””์˜ค"], label="์ฝ˜ํ…์ธ  ์œ ํ˜•")
32
+ style_input = gr.Dropdown(choices=["์Šคํƒ€์ผ1", "์Šคํƒ€์ผ2", "์Šคํƒ€์ผ3"], label="์Šคํƒ€์ผ ์„ ํƒ")
33
+ submit_button = gr.Button("์ƒ์„ฑ")
34
+
35
+ video_output = gr.Video(label="์ƒ์„ฑ๋œ ๋น„๋””์˜ค")
36
 
37
  submit_button.click(
38
+ fn=generate_video,
39
+ inputs=[keyword_input, voice_actor_input, content_type_input, style_input],
40
+ outputs=video_output
41
  )
42
 
 
43
  if __name__ == "__main__":
44
  demo.launch()