File size: 4,932 Bytes
0e07292 dd8438e 0e07292 dd8438e 0e07292 dd8438e 0e07292 dd8438e 0e07292 dd8438e 0e07292 dd8438e 0e07292 dd8438e 0e07292 dd8438e 0e07292 dd8438e 0e07292 dd8438e 0e07292 dd8438e 0e07292 dd8438e 0e07292 dd8438e 0e07292 dd8438e 0e07292 dd8438e 0e07292 dd8438e 0e07292 dd8438e 0e07292 dd8438e 0e07292 dd8438e 0e07292 dd8438e 0e07292 dd8438e 0e07292 dd8438e 0e07292 dd8438e 0e07292 |
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 151 152 153 154 155 156 |
import gradio as gr
# π FUNCTIONS
def predict(mode, text, image_path):
# ... your existing predict function ...
multimodal_output = {
"abcat0100000": 0.05,
"abcat0200000": 0.10,
"abcat0300000": 0.20,
"abcat0400000": 0.45,
"abcat0500000": 0.20,
}
text_only_output = {
"abcat0100000": 0.08,
"abcat0200000": 0.15,
"abcat0300000": 0.25,
"abcat0400000": 0.35,
"abcat0500000": 0.17,
}
image_only_output = {
"abcat0100000": 0.10,
"abcat0200000": 0.20,
"abcat0300000": 0.30,
"abcat0400000": 0.25,
"abcat0500000": 0.15,
}
if mode == "Multimodal":
return multimodal_output
elif mode == "Text Only":
return text_only_output
elif mode == "Image Only":
return image_only_output
else:
return {}
def update_inputs(mode: str):
# ... your existing update_inputs function ...
if mode == "Multimodal":
return gr.Textbox(visible=True), gr.Image(visible=True)
elif mode == "Text Only":
return gr.Textbox(visible=True), gr.Image(visible=False)
elif mode == "Image Only":
return gr.Textbox(visible=False), gr.Image(visible=True)
else:
return gr.Textbox(visible=True), gr.Image(visible=True)
# π CUSTOM CSS FOR FIXED FOOTER
css_code = """
/* Target the footer container by its ID and apply fixed positioning */
#footer-container {
position: fixed;
bottom: 0;
left: 0;
right: 0;
z-index: 1000; /* Ensure it stays on top of other content */
background-color: var(--background-fill-primary); /* Use a Gradio theme variable */
padding: var(--spacing-md);
border-top: 1px solid var(--border-color-primary);
}
/* Add padding to the body to prevent content from being hidden by the footer */
.gradio-container {
padding-bottom: 70px !important;
}
"""
# π USER INTERFACE
with gr.Blocks(
title="Multimodal Product Classification",
theme=gr.themes.Ocean(),
css=css_code,
) as demo:
# π TABS
with gr.Tabs():
# ... your existing tabs ...
# π APP TAB
with gr.TabItem("App"):
gr.Markdown("# ποΈ Multimodal Product Classification")
with gr.Row(equal_height=True):
with gr.Column(scale=1):
with gr.Column():
gr.Markdown("## βοΈ Classification Inputs")
mode_radio = gr.Radio(
choices=["Multimodal", "Text Only", "Image Only"],
value="Multimodal",
label="Choose Classification Mode:",
)
text_input = gr.Textbox(
label="Product Description:",
placeholder="e.g., Apple iPhone 15 Pro Max 256GB",
)
image_input = gr.Image(
label="Product Image", type="filepath", visible=True
)
classify_button = gr.Button(
"β¨ Classify Product", variant="primary"
)
with gr.Column(scale=2):
with gr.Column():
gr.Markdown("## π Results")
gr.Markdown(
"""**π‘ How to use this app**
This app classifies a product based on its description and image.
- **Multimodal:** Uses both text and image for the most accurate prediction.
- **Text Only:** Uses only the product description.
- **Image Only:** Uses only the product image.
"""
)
output_label = gr.Label(
label="Predict category", num_top_classes=5
)
# π ABOUT TAB
with gr.TabItem("About"):
gr.Markdown("""...""")
# π MODEL TAB
with gr.TabItem("Model"):
gr.Markdown("""...""")
# π FOOTER
with gr.Row(elem_id="footer-container"):
gr.HTML("""
<div style="text-align: center;">
<b>Connect with me:</b> πΌ <a href="https://www.linkedin.com/in/alex-turpo/" target="_blank">LinkedIn</a> β’
π± <a href="https://github.com/iBrokeTheCode" target="_blank">GitHub</a> β’
π€ <a href="https://huggingface.co/iBrokeTheCode" target="_blank">Hugging Face</a>
</div>
""")
# π EVENT LISTENERS
mode_radio.change(
fn=update_inputs,
inputs=mode_radio,
outputs=[text_input, image_input],
)
classify_button.click(
fn=predict, inputs=[mode_radio, text_input, image_input], outputs=output_label
)
demo.launch()
|