Spaces:
Running
Running
## app.py: | |
import torch | |
import gradio as gr | |
from diffusers import StableDiffusionPipeline | |
import requests | |
from io import BytesIO | |
import os | |
from PIL import Image | |
def translate_text(text, target_language='en'): | |
API_URL = "https://api-inference.huggingface.co/models/Helsinki-NLP/opus-mt-ar-en" | |
headers = {"Authorization": f"Bearer {os.getenv('API_TOKEN')}"} | |
response = requests.post(API_URL, headers=headers, json=text) | |
if response.status_code == 200: | |
return response.json()[0]['translation_text'] | |
else: | |
print("Failed to translate text:", response.text) | |
return text # Return the original text if translation fails | |
# Function to post data to an API and return response | |
def query(payload, API_URL, headers): | |
response = requests.post(API_URL, headers=headers, json=payload) | |
return response.content | |
# Function to generate images based on prompts using the Hugging Face API | |
def generate_image(prompt, model_choice, translate=False): | |
if translate: | |
prompt = translate_text(prompt, target_language='en') # Assuming you want to translate to English | |
model_urls = { | |
"Stable Diffusion v1.5": "https://api-inference.huggingface.co/models/runwayml/stable-diffusion-v1-5", | |
"dalle-3-xl-v2": "https://api-inference.huggingface.co/models/ehristoforu/dalle-3-xl-v2", | |
"midjourney-v6": "https://api-inference.huggingface.co/models/Kvikontent/midjourney-v6", | |
"openjourney-v4": "https://api-inference.huggingface.co/models/prompthero/openjourney-v4", | |
"LCM_Dreamshaper_v7": "https://api-inference.huggingface.co/models/SimianLuo/LCM_Dreamshaper_v7", | |
} | |
API_URL = model_urls[model_choice] | |
headers = {"Authorization": f"Bearer {os.getenv('API_TOKEN')}"} | |
payload = {"inputs": prompt} | |
data = query(payload, API_URL, headers) | |
try: | |
# Load the image from byte data | |
image = Image.open(BytesIO(data)) | |
# Resize the image | |
image = image.resize((400, 400)) | |
# Convert the image object back to bytes for Gradio output | |
buf = BytesIO() | |
image.save(buf, format='PNG') | |
buf.seek(0) | |
return image | |
except Exception as e: | |
print("Error processing the image:", e) | |
return None # Return None or an appropriate error message/image | |
# Set up environment variable correctly | |
API_TOKEN = os.getenv("API_TOKEN") | |
# Styling with custom CSS | |
css = """ | |
body {background-color: #f0f2f5;} | |
.gradio-app {background-color: #ffffff; border-radius: 12px; box-shadow: 0 0 12px rgba(0,0,0,0.1);} | |
button {color: white; background-color: #106BA3; border: none; border-radius: 5px;} | |
""" | |
# Define interface | |
title = "نموذج توليد الصور" | |
description = "اكتب وصف للصورة التي تود من النظام التوليدي انشاءها" | |
iface = gr.Interface( | |
fn=generate_image, | |
inputs=[ | |
gr.components.Textbox(lines=2, placeholder="Enter the description of the image here..."), | |
gr.components.Dropdown(choices=["Stable Diffusion v1.5","dalle-3-xl-v2","midjourney-v6","openjourney-v4","LCM_Dreamshaper_v7"], label="Choose Model", value='Stable Diffusion v1.5'), | |
gr.components.Checkbox(label="Translate The Text Before Generating Image", value=False) | |
], | |
outputs=gr.components.Image(), | |
title=title, | |
description=description, | |
theme="default", | |
css=css | |
) | |
# Launch the interface | |
iface.launch() | |