Classification / app.py
Daraphan's picture
Create app.py
3a4231f verified
Raw
History Blame Contribute Delete
2.1 kB
import gradio as gr
import torch
from PIL import Image
import os
import time
from transformers import ResNetForImageClassification, AutoImageProcessor
# Load model and processor
processor = AutoImageProcessor.from_pretrained("glazzova/body_type")
model = ResNetForImageClassification.from_pretrained("glazzova/body_type")
# Load example images from the "template" folder
example_images = [
os.path.join("template", x) for x in os.listdir("template") if x.lower().endswith((".png", ".jpg", ".jpeg"))
]
# Define the classification function
def body_classification(image):
start_time = time.time() # Record start time
inputs = processor(image, return_tensors="pt") # Process the image
# Get predictions
with torch.no_grad():
logits = model(**inputs).logits
predicted_label = logits.argmax(-1).item()
label = model.config.id2label[predicted_label]
elapsed_time = time.time() - start_time # Calculate elapsed time
return label, f"{elapsed_time:.2f} seconds"
# Create the Gradio interface
with gr.Blocks() as demo:
gr.Markdown("# Body Type Classifier")
gr.Markdown(
"""
Upload an image or use the example images to predict the body type.
The app uses a pre-trained ResNet model fine-tuned for body type classification.
**by Ishwor Subedi**
GitHub: [@ishworrsubedii](https://github.com/ishworrsubedii)
"""
)
with gr.Row():
with gr.Column():
image_input = gr.Image(type="pil", label="Upload Image")
with gr.Column():
label_output = gr.Textbox(label="Predicted Body Type")
time_output = gr.Textbox(label="Processing Time (s)")
classify_button = gr.Button("Classify")
classify_button.click(body_classification, inputs=image_input, outputs=[label_output, time_output])
gr.Markdown("### Example Images")
# Add example images as inputs
gr.Examples(examples=example_images, inputs=image_input, label="Template Images")
# Run the app
if __name__ == "__main__":
demo.launch(debug=True)