secretunicornx's picture
Update app.py
e8e1353
# -*- coding: utf-8 -*-
"""Copy of Skin NTDs.ipynb
Automatically generated by Colaboratory.
Original file is located at
https://colab.research.google.com/drive/110qV0zVen9O-zjd-wOuHOKURfR0lUfc7
"""
import numpy as np
import skfuzzy as fuzz
from skfuzzy import control as ctrl
import matplotlib.pyplot as plt
import streamlit as st
# Create fuzzy variables & membership functions for lump
lump_amount = ctrl.Antecedent(np.arange(0, 11, 1), 'lump_amount')
lump_amount['1 to 3'] = fuzz.trimf(lump_amount.universe, [0, 0, 3])
lump_amount['more than 3'] = fuzz.trimf(lump_amount.universe, [3, 11, 11])
lump_hardness = ctrl.Antecedent(np.arange(0, 11, 1), 'lump_hardness')
lump_hardness['soft'] = fuzz.trimf(lump_hardness.universe, [0, 0, 5])
lump_hardness['solid'] = fuzz.trimf(lump_hardness.universe, [5, 11, 11])
lump_size = ctrl.Antecedent(np.arange(0, 11, 1), 'lump_size')
lump_size['small'] = fuzz.trimf(lump_size.universe, [0, 0, 5])
lump_size['large'] = fuzz.trimf(lump_size.universe, [5, 11, 11])
lump_location = ctrl.Antecedent(np.arange(0, 11, 1), 'lump_location')
lump_location['localized'] = fuzz.trapmf(lump_location.universe, [0, 0, 3, 6])
lump_location['widespread'] = fuzz.trapmf(lump_location.universe, [3, 6, 11, 11])
lump_itch = ctrl.Antecedent(np.arange(0, 11, 1), 'lump_itch')
lump_itch['not itchy'] = fuzz.trapmf(lump_itch.universe, [0, 0, 3, 6])
lump_itch['itchy'] = fuzz.trapmf(lump_itch.universe, [3, 6, 7, 8])
lump_itch['very itchy'] = fuzz.trapmf(lump_itch.universe, [7, 8, 11, 11])
lump_pus = ctrl.Antecedent(np.arange(0, 2, 1), 'lump_pus')
lump_pus['present'] = fuzz.trapmf(lump_pus.universe, [0, 0, 1, 1])
lump_pus['absent'] = fuzz.trapmf(lump_pus.universe, [1, 1, 2, 2])
# Create fuzzy variables for ulcer
ulcer_location = ctrl.Antecedent(np.arange(0, 3, 1), 'ulcer_location')
ulcer_location['feet or hands'] = fuzz.trapmf(ulcer_location.universe, [0, 0, 1, 1])
ulcer_location['others'] = fuzz.trapmf(ulcer_location.universe, [1, 1, 2, 2])
ulcer_edge = ctrl.Antecedent(np.arange(0, 2, 1), 'ulcer_edge')
ulcer_edge['irregular'] = fuzz.trapmf(ulcer_edge.universe, [0, 0, 1, 1])
ulcer_edge['regular'] = fuzz.trapmf(ulcer_edge.universe, [1, 1, 2, 2])
ulcer_pain = ctrl.Antecedent(np.arange(0, 2, 1), 'ulcer_pain')
ulcer_pain['painless'] = fuzz.trapmf(ulcer_pain.universe, [0, 0, 1, 1])
ulcer_pain['painful'] = fuzz.trapmf(ulcer_pain.universe, [1, 1, 2, 2])
# Create fuzzy variables for swollen limb
swollen_limb = ctrl.Antecedent(np.arange(0, 2, 1), 'swollen_limb')
swollen_limb['unilateral'] = fuzz.trapmf(swollen_limb.universe, [0, 0, 1, 1])
swollen_limb['bilateral'] = fuzz.trapmf(swollen_limb.universe, [1, 1, 2, 2])
swollen_location = ctrl.Antecedent(np.arange(0, 3, 1), 'swollen_location')
swollen_location['localised'] = fuzz.trapmf(swollen_location.universe, [0, 0, 1, 1])
swollen_location['widespread'] = fuzz.trapmf(swollen_location.universe, [1, 1, 2, 2])
swelling_sensation = ctrl.Antecedent(np.arange(0, 2, 1), 'swelling_sensation')
swelling_sensation['painless'] = fuzz.trapmf(swelling_sensation.universe, [0, 0, 1, 1])
swelling_sensation['painful'] = fuzz.trapmf(swelling_sensation.universe, [1, 1, 2, 2])
# Create fuzzy variables for patch
patch_itch = ctrl.Antecedent(np.arange(0, 11, 1), 'patch_itch')
patch_itch['itchy'] = fuzz.trimf(patch_itch.universe, [0, 0, 5])
patch_itch['non-itchy'] = fuzz.trimf(patch_itch.universe, [5, 11, 11])
patch_texture = ctrl.Antecedent(np.arange(0, 11, 1), 'patch_texture')
patch_texture['smooth'] = fuzz.trimf(patch_texture.universe, [0, 0, 5])
patch_texture['scaly'] = fuzz.trimf(patch_texture.universe, [5, 11, 11])
patch_wetness = ctrl.Antecedent(np.arange(0, 11, 1), 'patch_wetness')
patch_wetness['wet'] = fuzz.trimf(patch_wetness.universe, [0, 0, 5])
patch_wetness['dry'] = fuzz.trimf(patch_wetness.universe, [5, 11, 11])
# Create fuzzy variable for diagnosis
diagnosis = ctrl.Consequent(np.arange(0, 11, 1), 'diagnosis')
diagnosis['leprosy'] = fuzz.trapmf(diagnosis.universe, [0, 0, 2, 5])
diagnosis['scabies'] = fuzz.trapmf(diagnosis.universe, [3, 5, 7, 8])
diagnosis['lymphatic_filariasis'] = fuzz.trapmf(diagnosis.universe, [6, 8, 10, 10])
# Fuzzy rules
rule1 = ctrl.Rule(lump_amount['more than 3'] & lump_hardness['solid'] & lump_size['large'] & patch_itch['non-itchy'] | patch_texture['scaly'] | patch_wetness['dry'], diagnosis['leprosy'])
rule2 = ctrl.Rule(lump_amount['more than 3'] & lump_hardness['soft'] & lump_size['small'] | lump_location['widespread'] | lump_itch['very itchy'] | lump_pus['present'], diagnosis['scabies'])
rule3 = ctrl.Rule(swollen_limb['unilateral'] | swollen_location['localised'] | swelling_sensation['painful'], diagnosis['lymphatic_filariasis'])
# Create control system
diagnosis_ctrl = ctrl.ControlSystem([rule1, rule2, rule3])
# Create control system simulator
diagnosis_fuzzy = ctrl.ControlSystemSimulation(diagnosis_ctrl)
import streamlit as st
# Create the user interface
st.title("Disease Diagnosis")
lump_amount = st.selectbox("Lump amount", ["1 to 3", "more than 3"])
lump_hardness = st.selectbox("Lump hardness", ["soft", "solid"])
lump_size = st.selectbox("Lump size", ["small", "large"])
lump_location = st.text_input("Lump location", ["localised", "widespread"])
lump_itch = st.selectbox("Lump itch", ["not itchy", "slightly itchy", "very itchy"])
lump_pus = st.selectbox("Lump pus", ["absent", "present"])
ulcer_location = st.selectbox("Ulcer location", ["feet", "hands", "other"])
ulcer_edge = st.selectbox("Ulcer edge", ["regular", "irregular"])
ulcer_pain = st.selectbox("Ulcer pain", ["painful", "painless"])
swollen_limb = st.selectbox("Swollen limb", ["unilateral", "bilateral"])
swollen_location = st.text_input("Swollen location", ["localised", "widespread"])
swelling_sensation = st.selectbox("Swelling sensation", ["painful", "painless"])
patch_itch = st.selectbox("Patch itch", ["non-itchy", "itchy"])
patch_texture = st.selectbox("Patch texture", ["smooth", "scaly"])
patch_wetness = st.selectbox("Patch wetness", ["dry", "wet"])
if st.button("Diagnose"):
#st.success(diagnosis(lump_amount, lump_hardness, lump_size, lump_location, lump_itch, lump_pus, ulcer_location, ulcer_edge, ulcer_pain, swollen_limb, swollen_location, swelling_sensation, patch_itch, patch_texture, patch_wetness))
diagnosis_fuzzy.input['lump_amount'] = lump_amount
diagnosis_fuzzy.input['lump_hardness'] = lump_hardness
diagnosis_fuzzy.input['lump_size'] = lump_size
diagnosis_fuzzy.input['lump_location'] = lump_location
diagnosis_fuzzy.input['lump_itch'] = lump_itch
diagnosis_fuzzy.input['lump_pus'] = lump_pus
diagnosis_fuzzy.input['ulcer_location'] = ulcer_location
diagnosis_fuzzy.input['ulcer_edge'] = ulcer_edge
diagnosis_fuzzy.input['ulcer_pain'] = ulcer_pain
diagnosis_fuzzy.input['swollen_limb'] = swollen_limb
diagnosis_fuzzy.input['swollen_location'] = swollen_location
diagnosis_fuzzy.input['swelling_sensation'] = swelling_sensation
diagnosis_fuzzy.input['patch_itch'] = patch_itch
diagnosis_fuzzy.input['patch_texture'] = patch_texture
diagnosis_fuzzy.input['patch_wetness'] = patch_wetness
# Print the diagnosis
#print(diagnosis_fuzzy.output['diagnosis'])
# Defuzzification
# Pass crisp input values to the control system and get the diagnosis
# diagnosis_fuzzy.input['lump_amount'] = 5
# diagnosis_fuzzy.input['lump_hardness'] = 7
# diagnosis_fuzzy.input['lump_size'] = 6
# diagnosis_fuzzy.input['lump_location'] = 8
# diagnosis_fuzzy.input['lump_itch'] = 9
# diagnosis_fuzzy.input['lump_pus'] = 1
# diagnosis_fuzzy.input['swollen_limb'] = 1
# diagnosis_fuzzy.input['swollen_location'] = 10
# diagnosis_fuzzy.input['swelling_sensation'] = 8
# diagnosis_fuzzy.input['swelling_color'] = 7
diagnosis_fuzzy.compute()
# Print the diagnosis
print(diagnosis_fuzzy.output['diagnosis'])