Spaces:
Runtime error
Runtime error
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) # Thay bằng đường dẫn model của bạn | |
# Dự đoán | |
result = model.predict(image, conf=conf_thresold, iou=iou_thresold, imgsz=image_size) | |
boxes = result[0].boxes | |
num_boxes = len(boxes) | |
# In thông tin (tùy chọn) | |
print("Object type: ", boxes.cls) | |
print("Confidence: ", boxes.conf) | |
print("Coordinates: ", boxes.xyxy) | |
print(f"Số lượng vùng phát hiện: {num_boxes}") | |
# Phân loại mức độ mụn và gợi ý | |
if num_boxes > 10: | |
severity = "Nặng" | |
recommendation = "Bạn nên đến gặp bác sĩ da liễu và sử dụng liệu trình trị mụn chuyên sâu." | |
elif 5 <= num_boxes <= 10: | |
severity = "Trung bình" | |
recommendation = "Hãy duy trì skincare đều đặn với sữa rửa mặt dịu nhẹ và dưỡng ẩm phù hợp." | |
else: | |
severity = "Tốt" | |
recommendation = "Làn da bạn khá ổn! Tiếp tục duy trì thói quen chăm sóc da hiện tại." | |
print(f"Tình trạng mụn: {severity}") | |
print(f"Khuyến nghị: {recommendation}") | |
# Kết xuất ảnh kết quả | |
render = render_result(model=model, image=image, result=result[0]) | |
predicted_image_save_path = "predicted_image.jpg" | |
render.save(predicted_image_save_path) | |
return predicted_image_save_path, f"Tình trạng mụn: {severity}", recommendation | |
# Tạo phần mô tả và hướng dẫn | |
description_md = """ | |
## Ứng dụng Nhận Diện Mụn bằng YOLOv8 | |
Chọn một ảnh chụp khuôn mặt của bạn. Ứng dụng sẽ phân tích và đánh giá tình trạng mụn dựa trên mô hình YOLOv8. | |
- **Bước 1:** Tải lên ảnh khuôn mặt. | |
- **Bước 2:** Điều chỉnh các tham số (nếu cần). | |
- **Bước 3:** Nhấn **Submit** để nhận kết quả. | |
Phần kết quả sẽ cho ra: | |
- Ảnh với bounding box quanh các nốt mụn được phát hiện. | |
- Đánh giá tình trạng mụn. | |
- Lời khuyên chăm sóc da. | |
""" | |
# CSS tùy chỉnh để giao diện đẹp hơn | |
custom_css = """ | |
#component-0, #component-1, #component-2, #component-3, #component-4 { | |
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; | |
text-align: center; | |
} | |
#component-0 h1 { | |
color: #F15B2A; | |
} | |
#component-0 h2, h3 { | |
color: #333; | |
} | |
.gr-button { | |
background-color: #F15B2A !important; | |
color: #fff !important; | |
border: none !important; | |
font-weight: bold !important; | |
} | |
.gr-button:hover { | |
background-color: #d94c1f !important; | |
} | |
""" | |
inputs = [ | |
gr.Image(type="filepath", label="Ảnh Khuôn Mặt (Input Image)"), | |
gr.Slider(minimum=320, maximum=1280, step=32, value=640, label="Kích thước ảnh (Image Size)"), | |
gr.Slider(minimum=0, maximum=1, step=0.05, value=0.15, label="Ngưỡng Confidence"), | |
gr.Slider(minimum=0, maximum=1, step=0.05, value=0.15, label="Ngưỡng IOU") | |
] | |
outputs = [ | |
gr.Image(type="filepath", label="Ảnh Sau Khi Xử Lý"), | |
gr.Textbox(label="Tình Trạng Mụn", interactive=False), | |
gr.Textbox(label="Khuyến Nghị", interactive=False) | |
] | |
yolo_app = gr.Interface( | |
fn=yolov8_func, | |
inputs=inputs, | |
outputs=outputs, | |
title="YOLOv8: Nhận Diện Mụn", | |
description=description_md, | |
css=custom_css, | |
theme="default" # Bạn có thể thử "default" hoặc "huggingface" | |
) | |
yolo_app.launch(debug=True) | |