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