|
from ultralytics import YOLO |
|
import gradio as gr |
|
|
|
|
|
model = YOLO("./runs/detect/train18/weights/best.pt") |
|
|
|
|
|
def yolo_predict(image): |
|
"""Run YOLOv8 inference and return annotated image with results""" |
|
results = model(image) |
|
print(results) |
|
annotated_image = results[0].plot() |
|
|
|
|
|
boxes = results[0].boxes |
|
prediction_details = [] |
|
|
|
for box in boxes: |
|
class_id = int(box.cls[0].item()) |
|
class_name = model.names[class_id] |
|
confidence = round(box.conf[0].item(), 2) |
|
coords = box.xyxy[0].tolist() |
|
|
|
prediction_details.append({ |
|
"class": class_name, |
|
"confidence": confidence, |
|
"bbox": coords |
|
}) |
|
|
|
return annotated_image |
|
|
|
|
|
|
|
with gr.Blocks() as demo: |
|
gr.Markdown("# YOLOv8 Object Detection") |
|
gr.Markdown( |
|
""" |
|
This application uses a YOLOv8m model fine-tuned specifically to detect red blood |
|
cells, white blood cells, and platelets in images of blood cells. This version |
|
was trained using the `keremberke/blood-cell-object-detection` dataset on huggingface.com. |
|
""" |
|
) |
|
|
|
gr.Interface( |
|
fn=yolo_predict, |
|
inputs=gr.Image(label="Input Image",type="pil"), |
|
outputs=[ |
|
gr.Image(label="Detected Objects"), |
|
|
|
], |
|
|
|
|
|
description='Select an example image below (none of which were included in model training or validation), or upload your own image. Then, click "Submit" to see the model in action.', |
|
examples=[ |
|
"./bloodcell-examples/image_0.jpg", |
|
"./bloodcell-examples/image_1.jpg", |
|
"./bloodcell-examples/image_2.jpg", |
|
"./bloodcell-examples/image_3.jpg", |
|
"./bloodcell-examples/image_4.jpg", |
|
], |
|
) |
|
|
|
|
|
demo.launch( |
|
show_error=True, |
|
height=900, |
|
width="80%", |
|
|
|
|
|
) |