File size: 7,918 Bytes
be0b780
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ddebdc4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
be0b780
84ffeab
7a5124e
 
 
 
 
be0b780
7a5124e
 
be0b780
 
 
7a5124e
be0b780
 
ddebdc4
 
7a5124e
 
 
be0b780
 
7a5124e
 
 
 
 
 
 
 
 
 
 
 
 
 
be0b780
ddebdc4
be0b780
 
7a5124e
 
 
 
be0b780
 
7a5124e
 
be0b780
7a5124e
be0b780
7a5124e
 
 
be0b780
7a5124e
 
ddebdc4
 
 
 
 
aefc64f
be0b780
 
 
 
 
 
 
 
 
 
e362a29
be0b780
 
 
 
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
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