24Sureshkumar commited on
Commit
cbc840b
Β·
verified Β·
1 Parent(s): 98be749

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +77 -40
app.py CHANGED
@@ -1,77 +1,114 @@
1
- import os
2
  import torch
3
- from transformers import MBartForConditionalGeneration, MBart50Tokenizer, AutoTokenizer, AutoModelForCausalLM
 
4
  from diffusers import StableDiffusionPipeline
 
5
  from PIL import Image
6
  import tempfile
 
7
  import time
8
- import streamlit as st
9
 
10
- # Use CPU (Hugging Face Spaces free tier)
11
  device = "cuda" if torch.cuda.is_available() else "cpu"
12
 
13
- # Load translation model
14
- translator_tokenizer = MBart50Tokenizer.from_pretrained("facebook/mbart-large-50-many-to-many-mmt")
15
  translator_model = MBartForConditionalGeneration.from_pretrained("facebook/mbart-large-50-many-to-many-mmt").to(device)
 
16
  translator_tokenizer.src_lang = "ta_IN"
17
 
18
- # Load text generation model
19
- gen_tokenizer = AutoTokenizer.from_pretrained("gpt2")
20
  gen_model = AutoModelForCausalLM.from_pretrained("gpt2").to(device)
 
21
 
22
- # Load image generation model
23
  pipe = StableDiffusionPipeline.from_pretrained(
24
- "stabilityai/stable-diffusion-2-1-base",
25
  torch_dtype=torch.float32,
26
- safety_checker=None
27
  ).to(device)
 
28
 
29
- def translate_tamil_to_english(text):
 
 
30
  inputs = translator_tokenizer(text, return_tensors="pt").to(device)
31
- output = translator_model.generate(
32
  **inputs,
33
  forced_bos_token_id=translator_tokenizer.lang_code_to_id["en_XX"]
34
  )
35
- translated = translator_tokenizer.batch_decode(output, skip_special_tokens=True)[0]
36
- return translated
 
 
 
 
 
 
37
 
 
 
 
38
  def generate_creative_text(prompt, max_length=100):
 
39
  input_ids = gen_tokenizer.encode(prompt, return_tensors="pt").to(device)
40
- output = gen_model.generate(
41
- input_ids, max_length=max_length, do_sample=True, top_k=50, temperature=0.9
42
- )
43
- return gen_tokenizer.decode(output[0], skip_special_tokens=True)
 
 
 
 
44
 
 
45
  def generate_image(prompt):
46
- image = pipe(prompt).images[0]
47
- temp_file = tempfile.NamedTemporaryFile(suffix=".png", delete=False)
48
- image.save(temp_file.name)
49
- return temp_file.name
 
 
 
 
 
50
 
51
  # Streamlit UI
52
- st.set_page_config(page_title="Tamil β†’ English + AI", layout="centered")
53
- st.title("🌐 Tamil to English + AI Image Generator")
54
 
55
- tamil_input = st.text_area("✍️ Enter Tamil Text", height=150)
 
56
 
57
- if st.button("πŸš€ Generate"):
58
  if not tamil_input.strip():
59
  st.warning("Please enter Tamil text.")
60
  else:
61
- with st.spinner("Translating..."):
62
- translated = translate_tamil_to_english(tamil_input)
63
- st.success("βœ… Translated!")
64
- st.markdown(f"**English:** `{translated}`")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65
 
66
- with st.spinner("Generating creative text..."):
67
- creative_text = generate_creative_text(translated)
68
- st.success("βœ… Creative text generated!")
69
- st.markdown(f"**Creative Prompt:** `{creative_text}`")
70
 
71
- with st.spinner("Generating image..."):
72
- image_path = generate_image(translated)
73
- st.success("βœ… Image generated!")
74
- st.image(Image.open(image_path), caption="πŸ–ΌοΈ AI Generated Image", use_column_width=True)
75
 
76
  st.markdown("---")
77
- st.markdown("πŸ”§ Powered by MBart, GPT2 & Stable Diffusion - Deployed on Hugging Face πŸ€—")
 
1
+ import streamlit as st
2
  import torch
3
+ from transformers import MBartForConditionalGeneration, MBart50TokenizerFast
4
+ from transformers import AutoTokenizer, AutoModelForCausalLM
5
  from diffusers import StableDiffusionPipeline
6
+ from rouge_score import rouge_scorer
7
  from PIL import Image
8
  import tempfile
9
+ import os
10
  import time
 
11
 
12
+ # Use CUDA if available
13
  device = "cuda" if torch.cuda.is_available() else "cpu"
14
 
15
+ # Load translation model (Tamil to English)
 
16
  translator_model = MBartForConditionalGeneration.from_pretrained("facebook/mbart-large-50-many-to-many-mmt").to(device)
17
+ translator_tokenizer = MBart50TokenizerFast.from_pretrained("facebook/mbart-large-50-many-to-many-mmt")
18
  translator_tokenizer.src_lang = "ta_IN"
19
 
20
+ # Load GPT-2 for creative text generation
 
21
  gen_model = AutoModelForCausalLM.from_pretrained("gpt2").to(device)
22
+ gen_tokenizer = AutoTokenizer.from_pretrained("gpt2")
23
 
24
+ # Load a lightweight image generation model (for CPU)
25
  pipe = StableDiffusionPipeline.from_pretrained(
26
+ "OFA-Sys/small-stable-diffusion-v0",
27
  torch_dtype=torch.float32,
28
+ use_auth_token=os.getenv("HF_TOKEN") # Set this in Hugging Face Space secrets
29
  ).to(device)
30
+ pipe.safety_checker = None # Optional: disable safety checker for speed
31
 
32
+ # Translation Function
33
+ def translate_tamil_to_english(text, reference=None):
34
+ start = time.time()
35
  inputs = translator_tokenizer(text, return_tensors="pt").to(device)
36
+ outputs = translator_model.generate(
37
  **inputs,
38
  forced_bos_token_id=translator_tokenizer.lang_code_to_id["en_XX"]
39
  )
40
+ translated = translator_tokenizer.batch_decode(outputs, skip_special_tokens=True)[0]
41
+ duration = round(time.time() - start, 2)
42
+
43
+ rouge_l = None
44
+ if reference:
45
+ scorer = rouge_scorer.RougeScorer(['rougeL'], use_stemmer=True)
46
+ score = scorer.score(reference.lower(), translated.lower())
47
+ rouge_l = round(score["rougeL"].fmeasure, 4)
48
 
49
+ return translated, duration, rouge_l
50
+
51
+ # Creative Text Generator
52
  def generate_creative_text(prompt, max_length=100):
53
+ start = time.time()
54
  input_ids = gen_tokenizer.encode(prompt, return_tensors="pt").to(device)
55
+ output = gen_model.generate(input_ids, max_length=max_length, do_sample=True, top_k=50, temperature=0.9)
56
+ text = gen_tokenizer.decode(output[0], skip_special_tokens=True)
57
+ duration = round(time.time() - start, 2)
58
+
59
+ tokens = text.split()
60
+ repetition_rate = sum(t1 == t2 for t1, t2 in zip(tokens, tokens[1:])) / len(tokens)
61
+
62
+ return text, duration, len(tokens), round(repetition_rate, 4)
63
 
64
+ # AI Image Generator
65
  def generate_image(prompt):
66
+ try:
67
+ start = time.time()
68
+ result = pipe(prompt)
69
+ image = result.images[0].resize((256, 256))
70
+ tmp_file = tempfile.NamedTemporaryFile(delete=False, suffix=".png")
71
+ image.save(tmp_file.name)
72
+ return tmp_file.name, round(time.time() - start, 2)
73
+ except Exception as e:
74
+ return None, f"Image generation failed: {str(e)}"
75
 
76
  # Streamlit UI
77
+ st.set_page_config(page_title="Tamil β†’ English + AI Art", layout="centered")
78
+ st.title("🧠 Tamil β†’ English + 🎨 Creative Text + AI Image")
79
 
80
+ tamil_input = st.text_area("✍️ Enter Tamil text here", height=150)
81
+ reference_input = st.text_input("πŸ“˜ Optional: Reference English translation for ROUGE")
82
 
83
+ if st.button("πŸš€ Generate Output"):
84
  if not tamil_input.strip():
85
  st.warning("Please enter Tamil text.")
86
  else:
87
+ with st.spinner("πŸ”„ Translating Tamil to English..."):
88
+ english_text, t_time, rouge_l = translate_tamil_to_english(tamil_input, reference_input)
89
+
90
+ st.success(f"βœ… Translated in {t_time} seconds")
91
+ st.markdown(f"**πŸ“ English Translation:** `{english_text}`")
92
+ if rouge_l is not None:
93
+ st.markdown(f"πŸ“Š **ROUGE-L Score:** `{rouge_l}`")
94
+ else:
95
+ st.info("ℹ️ ROUGE-L not calculated. Reference not provided.")
96
+
97
+ with st.spinner("🎨 Generating image..."):
98
+ image_path, img_time = generate_image(english_text)
99
+
100
+ if image_path:
101
+ st.success(f"πŸ–ΌοΈ Image generated in {img_time} seconds")
102
+ st.image(Image.open(image_path), caption="AI-Generated Image", use_column_width=True)
103
+ else:
104
+ st.error(image_path)
105
 
106
+ with st.spinner("πŸ’‘ Generating creative text..."):
107
+ creative, c_time, tokens, rep_rate = generate_creative_text(english_text)
 
 
108
 
109
+ st.success(f"✨ Creative text generated in {c_time} seconds")
110
+ st.markdown(f"**🧠 Creative Output:** `{creative}`")
111
+ st.markdown(f"πŸ“Œ Tokens: `{tokens}`, Repetition Rate: `{rep_rate}`")
 
112
 
113
  st.markdown("---")
114
+ st.caption("Built by Sureshkumar R using MBart, GPT-2 & Stable Diffusion on Hugging Face")