File size: 5,658 Bytes
eea6ac5
625a47c
8583867
edac42b
eea6ac5
058ddc5
639070c
 
 
 
 
 
 
 
 
 
 
0724936
8583867
 
 
 
 
 
 
 
639070c
 
8583867
 
 
 
 
 
639070c
 
8583867
 
 
 
 
 
 
639070c
 
8583867
 
639070c
 
 
 
8583867
 
625a47c
8583867
639070c
 
 
 
eea6ac5
058ddc5
 
8583867
058ddc5
1c69011
058ddc5
 
 
eea6ac5
058ddc5
 
8583867
 
058ddc5
 
8583867
058ddc5
 
8583867
 
058ddc5
 
 
8583867
058ddc5
 
 
 
 
 
 
 
 
 
eea6ac5
058ddc5
1c69011
a68e5a8
058ddc5
8583867
 
058ddc5
 
 
 
8583867
058ddc5
 
 
 
8583867
058ddc5
 
8583867
058ddc5
 
8583867
 
 
 
058ddc5
 
 
8583867
 
 
058ddc5
 
 
 
8583867
 
 
 
639070c
8583867
058ddc5
 
 
 
 
8583867
 
 
 
 
 
edac42b
058ddc5
8583867
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
# app.py
import gradio as gr
from transformers import pipeline, AutoTokenizer, AutoModelForSeq2SeqLM
from diffusers import StableDiffusionPipeline
import torch
import re
import os
from huggingface_hub import login

# Enter your Hugging Face token here (or set as environment variable)
HF_TOKEN = "your_hf_token_here"  # Replace with your actual token

# Authenticate with Hugging Face Hub
if HF_TOKEN:
    login(token=HF_TOKEN)
else:
    raise ValueError("Hugging Face token not provided!")

# Initialize models
def load_models():
    # Load translation model (NLLB - best for Tamil)
    translator = pipeline(
        "translation",
        model="facebook/nllb-200-distilled-600M",
        src_lang="tam_Taml",
        tgt_lang="eng_Latn",
        device=0 if torch.cuda.is_available() else -1,
        use_auth_token=HF_TOKEN  # Token added here
    )
    
    # Text generation pipeline
    text_generator = pipeline(
        "text-generation", 
        model="gpt2-medium",
        device=0 if torch.cuda.is_available() else -1,
        use_auth_token=HF_TOKEN  # Token added here
    )
    
    # Image generation pipeline
    if torch.cuda.is_available():
        image_pipe = StableDiffusionPipeline.from_pretrained(
            "runwayml/stable-diffusion-v1-5",
            torch_dtype=torch.float16,
            revision="fp16",
            use_auth_token=HF_TOKEN  # Token added here
        ).to("cuda")
    else:
        image_pipe = StableDiffusionPipeline.from_pretrained(
            "runwayml/stable-diffusion-v1-5",
            use_auth_token=HF_TOKEN  # Token added here
        )
    
    return translator, text_generator, image_pipe

# Load models at startup
try:
    translator, text_generator, image_pipe = load_models()
except Exception as e:
    raise RuntimeError(f"Model loading failed: {str(e)}")

def clean_text(text):
    """Remove special characters and truncate to complete sentences"""
    cleaned = re.split(r'(?<=[.!?])\s+', text)[0]
    return re.sub(r'[^a-zA-Z0-9,.!?\'"\- ]+', '', cleaned).strip()

def process_content(tamil_input, creativity_level):
    outputs = {}
    error = ""
    
    try:
        # Translate Tamil to English
        translation_result = translator(tamil_input)
        english_text = translation_result[0]['translation_text']
        outputs["translation"] = english_text
        
        # Generate image
        image = image_pipe(
            english_text, 
            guidance_scale=creativity_level,
            num_inference_steps=30
        ).images[0]
        outputs["image"] = image
        
        # Generate creative text
        creative_output = text_generator(
            f"Create creative content about: {english_text}",
            max_length=150,
            temperature=creativity_level/10,
            num_return_sequences=1
        )
        outputs["creative_text"] = clean_text(creative_output[0]['generated_text'])
        
    except Exception as e:
        error = f"⚠️ Error: {str(e)}"
    
    return outputs, error

# Gradio UI
with gr.Blocks(theme=gr.themes.Soft()) as app:
    gr.Markdown("# 🌐 தமிழ் உரை முதல் பட உருவாக்கம் (Tamil to Image Generator)")
    gr.Markdown("தமிழில் உள்ளீடு செய்து → ஆங்கில மொழிபெயர்ப்பு + AI உருவம் + படைப்பு உரை பெறவும்")
    
    with gr.Row():
        with gr.Column():
            tamil_input = gr.Textbox(
                label="தமிழ் உள்ளீடு", 
                placeholder="உங்கள் உரையை இங்கே உள்ளிடவும்...",
                lines=3
            )
            creativity = gr.Slider(
                label="படைப்பாற்றல் நிலை", 
                minimum=1, maximum=10, value=7, step=1
            )
            submit_btn = gr.Button("உருவாக்கு")
            
        with gr.Column():
            translation_box = gr.Textbox(label="ஆங்கில மொழிபெயர்ப்பு")
            creative_output = gr.Textbox(label="படைப்பு உரை", lines=3)
            image_output = gr.Image(label="உருவாக்கப்பட்ட படம்")
            error_output = gr.Textbox(label="பிழை செய்திகள்", visible=True)
    
    examples = gr.Examples(
        examples=[
            ["கடலின் அடியில் மறைந்திருக்கும் பழைய நகரம்", 8],
            ["பனி படர்ந்த குளிர்காலத்தில் வெப்பமான காபி குடிக்கும் பழங்குடி பெண்", 7],
            ["வேறு கிரகத்தில் இருந்து வந்த அறிவார்ந்த இயந்திரங்கள்", 9]
        ],
        inputs=[tamil_input, creativity]
    )
    
    # Clear inputs button
    clear_btn = gr.Button("துடைத்து துவக்கவும்")
    
    def clear_all():
        return "", "", "", None, ""
    
    submit_btn.click(
        fn=process_content,
        inputs=[tamil_input, creativity],
        outputs=[{"translation": translation_box, "creative_text": creative_output, "image": image_output}, error_output]
    )
    
    clear_btn.click(
        fn=clear_all,
        inputs=[],
        outputs=[tamil_input, translation_box, creative_output, image_output, error_output]
    )

if __name__ == "__main__":
    app.launch()