real / MeAI_Maincode /Detectskindisease.py
dangtiendatdat's picture
Update MeAI_Maincode/Detectskindisease.py
aefc64f verified
import requests
import gradio as gr
from PIL import Image
import io
import numpy as np
import os
trans_disease = {
"acne": "mụn",
"actinic_keratosis": "chứng dày sừng quang hóa",
"alopecia_androgenetica": "chứng rụng tóc nội tiết tố androgen",
"alopecia_areata": "chứng rụng tóc từng vùng",
"bullous_dermatosis": "bệnh da bọng nước",
"chloasma": "nám da",
"corn": "chứng chai da",
"dermatofibroma": "u xơ da",
"eczema_dermatitis": "viêm da chàm",
"erysipelas": "viêm quầng",
"erythema_multiforme": "ban đỏ đa dạng",
"folliculitis": "viêm nang lông",
"furuncle": "mụn nhọt",
"haemangioma": "bệnh u máu",
"herpes": "mụn rộp",
"herpes_simplex": "nhiễm trùng do virus Herpes Simplex",
"iga_vasculitis": "viêm mạch máu Iga",
"keloid": "sẹo lồi",
"keratosis_follicularism": "bệnh nang lông dày sừng",
"lichen_planus": "bệnh lichen phẳng",
"lupus_erythematosus": "bệnh ban đỏ",
"molluscum_contagiosum": "u mềm lây",
"nevus": "nốt ruồi",
"paronychia": "viêm quanh móng",
"pityriasis_alba": "bệnh vẩy phấn trắng",
"pityriasis_rosea": "bệnh vảy phấn hồng",
"prurigo_nodularis": "bệnh sẩn ngứa",
"psoriasis": "bệnh vẩy nến",
"rosacea": "bệnh trứng cá đỏ rosacea",
"sebaceous_cyst": "u nang bã nhờn",
"sebaceousnevus": "bớt tuyến bã",
"seborrheic_dermatitis": "viêm da tiết bã",
"seborrheic_keratosis": "chứng dày sừng tiết bã",
"skin_tag": "mụn thịt dư",
"stasis_dermatitis": "viêm da ứ đọng",
"syringoma": "u ống tuyến mồ hôi",
"tinea_capitis": "nấm da đầu",
"tinea_corporis": "nấm cơ thể",
"tinea_cruris": "nấm bẹn",
"tinea_manuum": "",
"tinea_pedis": "nấm chân",
"tinea_unguium": "nấm móng tay móng chân",
"tinea_versicolor": "bệnh lang ben",
"urticaria": "phát ban",
"urticaria_papular": "nổi mề đay",
"varicella": "thủy đậu",
"verruca_plana": "mụn cóc phẳng",
"verruca_vulgaris": "mụn cóc thông thường",
"vitiligo": "bệnh bạch biến"
}
trans_body = {
"head": "đầu",
"neck": "cổ",
"hand": "tay",
"arm": "cánh tay",
"leg": "chân",
"foot": "bàn chân",
"back": "lưng",
"chest": "ngực",
"abdomen": "bụng",
"face": "mặt",
"ear": "tai",
"eye": "mắt",
"nose": "mũi",
"mouth": "miệng",
"lip": "môi",
"cheek": "má",
"tongue": "lưỡi",
"throat": "cổ họng",
"forehead": "trán",
"chin": "cằm",
"unknown" : "bộ phận chưa rõ"
}
trans_description = {
"acne": "Tình trạng da phổ biến với mụn trứng cá",
"pityriasis_rosea": "Phát ban thường bắt đầu bằng một đốm lớn",
"actinic_keratosis": "Các mảng da thô ráp, có vảy do tổn thương từ ánh nắng",
"prurigo_nodularis": "Các cục cứng và ngứa trên da",
"alopecia_androgenetica": "Rụng tóc theo kiểu mẫu",
"alopecia_areata": "Rụng tóc từng mảng",
"bullous_dermatosis": "Tình trạng da bị phồng rộp",
"chloasma": "Các mảng nâu trên da",
"corn": "Vùng da bị dày lên",
"dermatofibroma": "Sự phát triển da lành tính phổ biến",
"eczema_dermatitis": "Da bị viêm và ngứa",
"erysipelas": "Nhiễm trùng da do vi khuẩn",
"erythema_multiforme": "Phản ứng trên da",
"folliculitis": "Viêm nang lông",
"furuncle": "Nhiễm trùng sâu trong nang lông",
"haemangioma": "Sự phát triển lành tính của mạch máu",
"herpes": "Bệnh zona thần kinh",
"herpes_simplex": "Mụn rộp môi",
"iga_vasculitis": "Viêm mạch máu",
"keloid": "Mô sẹo phát triển quá mức",
"keratosis_follicularism": "Các mảng thô ráp và mụn nhỏ",
"lichen_planus": "Tình trạng viêm",
"lupus_erythematosus": "Bệnh tự miễn",
"molluscum_contagiosum": "Nhiễm trùng da do virus",
"nevus": "Nốt ruồi",
"paronychia": "Nhiễm trùng móng tay/móng chân",
"pityriasis_alba": "Vùng da sáng màu",
"psoriasis": "Tình trạng da mãn tính",
"rosacea": "Mặt đỏ và có mụn nhỏ",
"sebaceous_cyst": "U nang không phải ung thư",
"sebaceousnevus": "Dấu vết bẩm sinh",
"seborrheic_dermatitis": "Da đỏ và có vảy",
"seborrheic_keratosis": "Sự phát triển màu nâu và có vảy",
"skin_tag": "Sự phát triển nhỏ, mềm trên da",
"stasis_dermatitis": "Viêm da",
"syringoma": "Các nốt nhỏ trên da",
"tinea_capitis": "Nấm da đầu",
"tinea_corporis": "Nấm trên cơ thể",
"tinea_cruris": "Nấm bẹn",
"tinea_manuum": "Nấm tay",
"tinea_pedis": "Nấm chân",
"tinea_unguium": "Nấm móng tay/móng chân",
"tinea_versicolor": "Nhiễm trùng do nấm",
"urticaria": "Phát ban mề đay",
"urticaria_papular": "Nốt ngứa",
"varicella": "Bệnh thủy đậu",
"verruca_plana": "Mụn cóc phẳng",
"verruca_vulgaris": "Mụn cóc thông thường",
"vitiligo": "Mất màu da"
}
def detect_skin_disease(image, key):
try:
# Convert NumPy array to image file-like object
img = Image.fromarray((image).astype('uint8'))
img_byte_array = io.BytesIO()
img.save(img_byte_array, format='PNG')
img_byte_array.seek(0)
url = "https://detect-skin-disease.p.rapidapi.com/facebody/analysis/detect-skin-disease"
# files = {"image": img_byte_array}
files = {"image": ("image.png", img_byte_array, "image/png")}
headers = {
"X-RapidAPI-Key": key,
"X-RapidAPI-Host": "detect-skin-disease.p.rapidapi.com"
}
response = requests.post(url, files=files, headers=headers)
response_json = response.json()
output = ""
if 'data' in response_json:
body_part = response_json['data'].get('body_part')
results = response_json['data'].get('results_english')
if body_part is not None:
vnese_body = trans_body[body_part]
output += f"Phần của cơ thể: {vnese_body} ({body_part})\n"
if results is not None:
output += " Kết quả phân tích: "
# Sort the results by probability percentage in descending order
sorted_results = sorted(results.items(), key=lambda x: x[1], reverse=True)
for disease, probability in sorted_results:
probability_percent = probability * 100
vnese_disease = trans_disease.get(disease, disease)
if probability_percent >= 10:
output += f"{vnese_disease} : {probability_percent:.2f}%\n"
return output
else:
return "Không có dữ liệu phản hồi từ API."
except Exception as e:
return f"Error: {str(e)}"
def create_skin_tab(skinkey="bc004194c0mshbc777f53d4f88bbp11c4f9jsn68418134659f"):
css = """
.textboxskin {
font-sxxxxize: 50px; !important;
}
"""
with gr.Blocks(css=css) as demo:
keybox = gr.Text(value=skinkey,visible=False)
gr.Markdown("Hãy tải ảnh lên và nhấn **Xử Lý** để chẩn đoán bệnh ngoài da.")
with gr.Row():
inp = gr.Image(type="numpy",height=512, width=512,
value=os.path.join(os.path.dirname(__file__), "../anh/thuydau.jpg"))
out = gr.Label(label="Kết Quả Dự Đoán",elem_classes="textboxskin")
btn = gr.Button("Xử Lý")
btn.click(fn=detect_skin_disease, inputs=[inp,keybox], outputs=out)
return demo