File size: 4,089 Bytes
eb723d1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from transformers import MBartForConditionalGeneration, MBart50Tokenizer, AutoModelForCausalLM, AutoTokenizer, pipeline
import gradio as gr
import requests
import io
from PIL import Image
import os

# Set up the Hugging Face API key from environment variables
hf_api_key = os.getenv("new_hf_token")
if not hf_api_key:
    raise ValueError("Hugging Face API key not found! Please set the 'HF_API_KEY' environment variable.")
headers = {"Authorization": f"Bearer {hf_api_key}"}

# Define the text-to-image model URL
API_URL = "https://api-inference.huggingface.co/models/CompVis/stable-diffusion-v1-4"

# Load the translation model and tokenizer
translation_model_name = "facebook/mbart-large-50-many-to-one-mmt"
tokenizer = MBart50Tokenizer.from_pretrained(translation_model_name)
translation_model = MBartForConditionalGeneration.from_pretrained(translation_model_name)

# Load a text generation model from Hugging Face
text_generation_model_name = "EleutherAI/gpt-neo-2.7B"  # Use "EleutherAI/gpt-j-6B" for better quality
text_tokenizer = AutoTokenizer.from_pretrained(text_generation_model_name)
text_model = AutoModelForCausalLM.from_pretrained(text_generation_model_name, device_map="auto", torch_dtype=torch.float32)

# Create a pipeline for text generation
text_generator = pipeline("text-generation", model=text_model, tokenizer=text_tokenizer)

# Function to generate an image using Hugging Face's text-to-image model
def generate_image_from_text(translated_text):
    try:
        # Send the translated text to the text-to-image model
        response = requests.post(API_URL, headers=headers, json={"inputs": translated_text})
        
        # Check if the response is successful
        if response.status_code != 200:
            return None, f"Error generating image: {response.text}"
        
        # Read and return the generated image
        image_bytes = response.content
        image = Image.open(io.BytesIO(image_bytes))
        return image, None
    except Exception as e:
        return None, f"Error during image generation: {e}"

# Define the function to translate Tamil text, generate an image, and create a descriptive text
def translate_generate_image_and_text(tamil_text):
    try:
        # Step 1: Translate Tamil text to English
        tokenizer.src_lang = "ta_IN"
        inputs = tokenizer(tamil_text, return_tensors="pt")
        translated_tokens = translation_model.generate(**inputs, forced_bos_token_id=tokenizer.lang_code_to_id["en_XX"])
        translated_text = tokenizer.batch_decode(translated_tokens, skip_special_tokens=True)[0]
    except Exception as e:
        return f"Error during translation: {e}", None, None

    try:
        # Step 2: Use the translated English text to generate an image directly
        image, error_message = generate_image_from_text(translated_text)
        if error_message:
            return translated_text, None, error_message
    except Exception as e:
        return translated_text, None, f"Error during image generation: {e}"

    try:
        # Step 3: Generate a descriptive English text using GPT-Neo based on the translated text
        descriptive_text = text_generator(translated_text, max_length=100, num_return_sequences=1, temperature=0.7, top_p=0.9)[0]['generated_text']
    except Exception as e:
        return translated_text, image, f"Error during text generation: {e}"

    return translated_text, image, descriptive_text

# Gradio interface setup
iface = gr.Interface(
    fn=translate_generate_image_and_text,
    inputs=gr.Textbox(lines=2, placeholder="Enter Tamil text here..."),
    outputs=[gr.Textbox(label="Translated English Text"), 
             gr.Image(label="Generated Image"),
             gr.Textbox(label="Generated Descriptive Text")],
    title="Tamil to English Translation, Image Creation, and Descriptive Text Generation",
    description="Translate Tamil text to English using Facebook's mbart-large-50 model, create an image using the translated text, and generate a descriptive text based on the translated content.",
)

# Launch the Gradio app
iface.launch()