File size: 3,310 Bytes
d9f0669
c64d829
 
32a70d2
d9f0669
40b0f4a
faf98f2
32a70d2
 
8335785
7bb92dd
32a70d2
 
 
7bb92dd
 
 
 
 
 
 
 
 
 
 
 
 
 
3e6b150
c64d829
f94ce29
c64d829
 
 
 
 
40b0f4a
 
c64d829
 
40b0f4a
 
c64d829
40b0f4a
c64d829
40b0f4a
 
324ddc8
c64d829
324ddc8
faf98f2
8335785
7bb92dd
3b46ac0
7bb92dd
32a70d2
3b46ac0
c64d829
 
 
40b0f4a
 
c64d829
40b0f4a
 
32a70d2
40b0f4a
32a70d2
a8c6d92
40b0f4a
3b46ac0
3a9a368
8335785
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import gradio as gr
import requests
import json
from transformers import pipeline

API_URL = "https://api.openai.com/v1/chat/completions"

# ๋ฒˆ์—ญ ํŒŒ์ดํ”„๋ผ์ธ ์ดˆ๊ธฐํ™”
translator = pipeline("translation", model="Helsinki-NLP/opus-mt-ko-en")

def translate_and_generate_prompts(text):
    # ์ž…๋ ฅ๋œ ํ…์ŠคํŠธ๋ฅผ ์˜์–ด๋กœ ๋ฒˆ์—ญ
    translation = translator(text, max_length=512)
    translated_text = translation[0]['translation_text']
    
    # ๊ธฐ๋ณธ ํ‚ค์›Œ๋“œ ์ถ”๊ฐ€
    prompt = "3d style, 4k"
    
    # ์ง€์ • ํ‚ค์›Œ๋“œ ์ถ”๊ฐ€
    if "ํ† ๋ฆฌ" in text:
        prompt += ", like Brad Pitt young boy"
    elif "์ค„๋ฆฌ" in text:
        prompt += ", like Emma Watson young girl"
    
    # ๋ฒˆ์—ญ๋œ ํ…์ŠคํŠธ ์ถ”๊ฐ€
    prompt += f", {translated_text}"
    
    return prompt

def predict(inputs, top_p, temperature, openai_api_key):
    narration_prompt = f"์•„๋™์šฉ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋™์˜์ƒ์— ์‚ฌ์šฉํ•  ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋ผ. ๋ฐ˜๋“œ์‹œ ํ•œ๊ธ€๋กœ ์ž‘์„ฑํ• ๊ฒƒ. ์ผ์ฒด์˜ ์ง€๋ฌธ์ด๋‚˜ ์ง€์‹œ, ๊ธฐํ˜ธ ํ‘œ์‹œ, ๋ฐฐ๊ฒฝ ์„ค๋ช… ๋“ฑ์„ ๋…ธ์ถœ ํ•˜๊ฑฐ๋‚˜ ์ถœ๋ ฅํ•˜์ง€ ๋ง๊ณ  ๊ธฐ์Šน์ „๊ฒฐ์˜ ๊ตฌ์กฐ๋กœ ๋ชจํ—˜์˜ ์ด์œ /์œ„๊ธฐ/๋„์ „/๋ฌธ์ œํ•ด๊ฒฐ/๊ตํ›ˆ์„ ํฌํ•จํ•˜์—ฌ ์ˆœ์ˆ˜ํ•œ ๋‚˜๋ ˆ์ด์…˜๋งŒ 1์ค„์”ฉ ์ถœ๋ ฅํ•˜์—ฌ ์ตœ๋Œ€ 10์ค„ ์ด๋‚ด๋กœ ์ถœ๋ ฅ. ์ž…๋ ฅ: '{inputs}'"
    headers = {
        "Content-Type": "application/json",
        "Authorization": f"Bearer {openai_api_key}"
    }
    payload = {
        "model": "gpt-4-1106-preview",
        "messages": [{"role": "system", "content": narration_prompt}],
        "temperature": temperature,
        "top_p": top_p,
        "n": 1,
        "max_tokens": 1000
    }
    response = requests.post(API_URL, headers=headers, json=payload)
    if response.status_code == 200:
        response_data = response.json()
        generated_text = response_data['choices'][0]['message']['content']
        return generated_text
    else:
        return "Error: Unable to generate response."

def generate_prompts(script):
    # ์Šคํฌ๋ฆฝํŠธ์˜ ๊ฐ ์ค„์„ ์˜์–ด๋กœ ๋ฒˆ์—ญํ•˜๊ณ  ํ”„๋กฌํ”„ํŠธ ์ƒ์„ฑ
    lines = script.split('\n')
    translated_prompts = [translate_and_generate_prompts(line) for line in lines if line.strip() != '']
    return "\n".join(translated_prompts)

with gr.Blocks() as demo:
    gr.Markdown("<h1 align='center'>ํ† ๋ฆฌ์˜ ๋ชจํ—˜: 3D ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ƒ์„ฑ๊ธฐ</h1>")
    with gr.Row():
        openai_api_key = gr.Textbox(type='password', label="Enter your OpenAI API key here")
        inputs = gr.Textbox(placeholder="์—ฌ๊ธฐ์— ์ž…๋ ฅํ•˜์„ธ์š”.", label="์•„๋™์šฉ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‹ถ์€ ์ฃผ์ œ์–ด๋‚˜ ๋ฌธ์žฅ์„ ์ž…๋ ฅํ•˜์„ธ์š”.")
        top_p = gr.Slider(minimum=0, maximum=1.0, value=1.0, step=0.05, label="Top-p (nucleus sampling)")
        temperature = gr.Slider(minimum=0, maximum=5.0, value=1.0, step=0.1, label="Temperature")
    output = gr.Textbox(label="Generated Script", readonly=True)
    prompts_output = gr.TextArea(label="Translated Image Generation Prompts", readonly=True)
    submit_button = gr.Button("Generate Script")
    prompts_button = gr.Button("Translate Prompts")

    submit_button.click(fn=predict, inputs=[inputs, top_p, temperature, openai_api_key], outputs=output)
    prompts_button.click(fn=generate_prompts, inputs=[output], outputs=prompts_output)

demo.launch()