userIdc2024's picture
Update app.py
2634042 verified
import gradio as gr
from PIL import Image, ImageDraw
from apis.advancedourdata import process_advanced_data_sync
from apis.ourdata import process_our_data_sync
import os
from apis.userdata import process_user_data_sync
import logging
# Configure logging
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s - %(levelname)s - %(message)s"
)
os.environ["TOKENIZERS_PARALLELISM"] = "false"
def advanced_function(style, sentiment, image_elements, text_elements, design_style, aspect_ratio,
input_image, is_text, non_compliant, emotion):
try:
if is_text == "Yes":
is_text = True
else:
is_text = False
logging.info("Calling process_advanced_data_sync with parameters: style=%s, sentiment=%s, image_elements=%s, text_elements=%s, "
"design_style=%s, aspect_ratio=%s, is_text=%s, non_compliant=%s, emotion=%s",
style, sentiment, image_elements, text_elements, design_style, aspect_ratio, is_text, non_compliant, emotion)
results = process_advanced_data_sync(style, sentiment, image_elements, text_elements, design_style, aspect_ratio,
input_image, is_text, non_compliant, emotion)
img1 = results[0]
img2 = results[1]
logging.info("Advanced function executed successfully.")
return img1, img2
except Exception as e:
logging.error("Error in advanced_function: %s", str(e), exc_info=True)
return None, None
def our_data_function():
try:
logging.info("Calling process_our_data_sync")
images = process_our_data_sync()
formatted_links = "\n".join([f"{i+1}. {link}" for i, link in enumerate(images[:10])]) # Format as a numbered list
logging.info("our_data_function executed successfully.")
return formatted_links
except Exception as e:
logging.error("Error in our_data_function: %s", str(e), exc_info=True)
return ""
def your_data_function(pos, category, neg, sentiment, image_elements, is_text, text_elements,
non_compliant, emotion, aspect_ratio, design):
try:
if is_text == "Yes":
is_text = True
else:
is_text = False
logging.info("Calling process_user_data_sync with parameters: pos=%s, category=%s, neg=%s, sentiment=%s, "
"image_elements=%s, is_text=%s, text_elements=%s, non_compliant=%s, emotion=%s, aspect_ratio=%s, design=%s",
pos, category, neg, sentiment, image_elements, is_text, text_elements, non_compliant, emotion, aspect_ratio, design)
img1, img2 = process_user_data_sync(pos, category, neg, sentiment, image_elements, is_text, text_elements,
non_compliant, emotion, aspect_ratio, design)
logging.info("your_data_function executed successfully.")
return img1, img2
except Exception as e:
logging.error("Error in your_data_function: %s", str(e), exc_info=True)
return None, None
def toggle_text_element(required):
if required == "Yes":
return gr.update(visible=True)
else:
return gr.update(visible=False)
with gr.Blocks() as demo:
gr.Markdown("# AdGenesis")
with gr.Tabs():
# ----- Advanced Tab -----
with gr.Tab("Advanced"):
with gr.Row():
style = gr.Dropdown(
choices=[
"breaking_news", "dealership", "money_cheque", "govt_authority",
"senior_veteran", "license", "holding_boards", "textual",
"single_story", "email_message"
],
label="Image Layout *",
value="breaking_news"
)
sentiment = gr.Dropdown(
choices=["Positive", "Negative", "Neutral"],
label="Sentiment *",
value="Positive"
)
with gr.Row():
design_style = gr.Dropdown(
choices=["None", "Auto", "General", "Realistic", "Design", "Anime"],
label="Image Design Style",
value="None"
)
aspect_ratio = gr.Dropdown(
choices=["1:1", "16:9", "4:3"],
label="Aspect Ratio",
value="1:1"
)
input_image = gr.Image(label="Image", type="pil")
image_elements = gr.Textbox(label="Image Element")
is_text = gr.Radio(
choices=["Yes", "No"],
label="Required Text",
value="Yes"
)
text_elements = gr.Textbox(label="Text Element")
non_compliant = gr.Textbox(label="Non Compliant")
emotion = gr.Textbox(label="Emotion")
# Toggle visibility of "Text Element" based on "Required Text" selection.
is_text.change(fn=toggle_text_element, inputs=is_text, outputs=text_elements)
advanced_button = gr.Button("Generate Advanced Ad Images")
advanced_output_img1 = gr.Textbox(label="Ad Image 1")
advanced_output_img2 = gr.Textbox(label="Ad Image 2")
advanced_button.click(
fn=advanced_function,
inputs=[style, sentiment, image_elements, text_elements, design_style, aspect_ratio,
input_image, is_text, non_compliant, emotion],
outputs=[advanced_output_img1, advanced_output_img2]
)
# ----- Win with our data Tab -----
with gr.Tab("Win with our data"):
gr.Markdown("Click the button below to generate 10 ad images using our data.")
our_data_button = gr.Button("Generate 10 Ad Images")
our_data_gallery = gr.Textbox(label="Generated Ad Images")
# Disable queueing for this click to avoid async issues with Gallery.
our_data_button.click(
fn=our_data_function,
inputs=[],
outputs=our_data_gallery,
queue=False
)
# ----- Win with your own data Tab -----
with gr.Tab("Win with your own data"):
gr.Markdown(
"Fill in the fields below (similar to Advanced except for Image Layout) and upload your images.")
with gr.Row():
positive_image = gr.Image(label="Positive Image *", type="pil")
negative_image = gr.Image(label="Negative Image", type="pil")
category =gr.Textbox(label="Category")
with gr.Row():
sentiment_your = gr.Dropdown(
choices=["Positive", "Negative", "Neutral"],
label="Sentiment *",
value="Positive"
)
design_style_your = gr.Dropdown(
choices=["None", "Auto", "General", "Realistic", "Design", "Anime"],
label="Image Design Style",
value="None"
)
aspect_ratio_your = gr.Dropdown(
choices=["1:1", "16:9", "4:3", "9:16"],
label="Aspect Ratio",
value="1:1"
)
image_element_your = gr.Textbox(label="Image Element")
is_text = gr.Radio(
choices=["Yes", "No"],
label="Required Text",
value="Yes"
)
text_element_your = gr.Textbox(label="Text Element")
non_compliant_your = gr.Textbox(label="Non Compliant")
emotion_your = gr.Textbox(label="Emotion")
is_text.change(fn=toggle_text_element, inputs=is_text, outputs=text_element_your)
your_data_button = gr.Button("Generate Your Data Ad Images")
your_data_output_img1 = gr.Textbox(label="Generated Image 1")
your_data_output_img2 = gr.Textbox(label="Generated Image 2")
your_data_button.click(
fn=your_data_function,
inputs=[positive_image, category, negative_image, sentiment_your, image_element_your, is_text, text_element_your,
non_compliant_your, emotion_your, aspect_ratio_your, design_style_your],
outputs=[your_data_output_img1, your_data_output_img2]
)
demo.launch(share=True)