Spaces:
Sleeping
Sleeping
File size: 2,810 Bytes
a56d71f 882fc55 a56d71f 5d1b970 31b3b50 a56d71f 7200620 31b3b50 a56d71f 7200620 03db010 7200620 03db010 7200620 31b3b50 7200620 a56d71f 882fc55 31b3b50 7200620 31b3b50 7200620 a56d71f 31b3b50 03db010 31b3b50 0fa7c44 31b3b50 a56d71f 31b3b50 a56d71f 31b3b50 a56d71f 0fa7c44 |
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 |
import gradio as gr
import torch
from ultralyticsplus import YOLO, render_result
from PIL import Image
import os
def yolov8_func(image,
image_size,
conf_thresold=0.4,
iou_thresold=0.50):
# Load the YOLOv8 model
model_path = "best.pt"
model = YOLO(model_path) # Use your custom model path here
# Make predictions
result = model.predict(image, conf=conf_thresold, iou=iou_thresold, imgsz=image_size)
# Access object detection results
boxes = result[0].boxes # Bounding boxes
num_boxes = len(boxes) # Count the number of bounding boxes (detections)
# Print object detection details (optional)
print("Object type: ", boxes.cls)
print("Confidence: ", boxes.conf)
print("Coordinates: ", boxes.xyxy)
print(f"Number of bounding boxes: {num_boxes}")
# Categorize based on number of boxes (detections) and provide recommendations
if num_boxes > 10:
severity = "Worse"
recommendation = "It is recommended to see a dermatologist and start stronger acne treatment."
elif 5 <= num_boxes <= 10:
severity = "Medium"
recommendation = "You should follow a consistent skincare routine with proper cleansing and moisturizing."
else:
severity = "Good"
recommendation = "Your skin looks good! Keep up with your current skincare routine."
print(f"Acne condition: {severity}")
print(f"Recommendation: {recommendation}")
# Render the result (with bounding boxes/labels)
render = render_result(model=model, image=image, result=result[0])
# Save the rendered image (with predictions)
predicted_image_save_path = "predicted_image.jpg"
render.save(predicted_image_save_path)
# Return the saved image, severity, and recommendation for Gradio output
return predicted_image_save_path, f"Acne condition: {severity}", recommendation
# Define inputs for the Gradio app
inputs = [
gr.Image(type="filepath", label="Input Image"),
gr.Slider(minimum=320, maximum=1280, step=32, value=640, label="Image Size"),
gr.Slider(minimum=0, maximum=1, step=0.05, value=0.15, label="Confidence Threshold"),
gr.Slider(minimum=0, maximum=1, step=0.05, value=0.15, label="IOU Threshold")
]
# Define the output for the Gradio app (image + text for severity and recommendation)
outputs = [
gr.Image(type="filepath", label="Output Image"),
gr.Textbox(label="Acne Condition"),
gr.Textbox(label="Recommendation")
]
# Set the title of the Gradio app
title = "YOLOv8: An Object Detection for Acne"
# Create the Gradio interface
yolo_app = gr.Interface(fn=yolov8_func,
inputs=inputs,
outputs=outputs,
title=title)
# Launch the app
yolo_app.launch(debug=True) |