ColinceTatsa commited on
Commit
230a607
·
verified ·
1 Parent(s): aaeade2

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +82 -0
app.py ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import torch
3
+ from torchvision import transforms
4
+ from PIL import Image
5
+ import torch.nn.functional as F
6
+ import pickle
7
+ import pandas as pd
8
+
9
+ me = ['Accueil','Analyse Medicale']
10
+ st.sidebar.image("logoMédical.jpg", width=500)
11
+ p = st.sidebar.selectbox('menu', me)
12
+
13
+ @st.cache_resource # Pour éviter de recharger le modècdle à chaque interaction
14
+ def charger_modele_pytorch():
15
+ modele = torch.load('TATSA_Model1_TransfLr_py.pth',map_location=device, weights_only=False) # Charge le modèle
16
+ modele.eval() # Important : mettez le modèle en mode évaluation
17
+ return modele
18
+ #chemin_modele = charger_modele_pytorch()
19
+ #chemin_modele = st.text_input("Chemin vers le modèle (.pth)", "pytorch1.pth")
20
+
21
+ if torch.cuda.is_available():
22
+ device = st.selectbox("Utiliser le GPU ou le CPU ?", ["GPU", "CPU"], index=0)
23
+ device = torch.device("cuda" if device == "GPU" else "cpu")
24
+ else:
25
+ #st.write("Aucun GPU détecté. Utilisation du CPU.")
26
+ device = torch.device("cpu")
27
+
28
+ modele_charge = charger_modele_pytorch()
29
+
30
+ # Transformation des images (Doit être la même que celle utilisée à l'entraînement)
31
+ transform = transforms.Compose([
32
+ transforms.Resize((224, 224)), # Modifier selon la taille utilisée à l'entraînement
33
+ transforms.ToTensor(),
34
+ transforms.Normalize(mean=[0.485,0.456,0.406],std=[0.229,0.224,0.225])])
35
+ if p == 'Accueil':
36
+ st.image("logoKeyce.jpg")
37
+ st.title('KEYCE INFORMATIQUE')
38
+ st.title('EXAMEN SEMESTRE I, DE TRANSFERT LEARNING')
39
+ st.subheader('MASTER 2 IABD')
40
+ st.subheader('TATSA TCHINDA Colince')
41
+
42
+ elif p=='Analyse Medicale':
43
+ st.image("logoKeyce.jpg")
44
+ im2 = Image.open("logoPytorch.jpg")
45
+ taille_image = (800, 200) # Définir la taille souhaitée
46
+ im2_red = im2.resize(taille_image)
47
+ st.image(im2_red)
48
+ st.title('TRANSFERT LEARNING AVEC PYTORCH')
49
+ upload_file = st.sidebar.file_uploader('Choisissez une image',type=['jpg','jpeg','png'])
50
+
51
+ if upload_file:
52
+ image = Image.open(upload_file).convert("RGB")
53
+ st.image(image, caption="Image chargée", use_container_width=True)
54
+
55
+ # Prétraitement de l'image
56
+ img_tensor = transform(image).unsqueeze(0) # Ajout d'une dimension batch
57
+ #bouton1 = st.sidebar.button('Resultat')
58
+ #bouton2 = st.sidebar.buttonRadio('Probabilites')
59
+ classes_p = {'HEALTHY': 0,'BRAIN_TUMOR': 1}
60
+
61
+ def output_proba():
62
+ output = modele_charge(img_tensor)
63
+ probabilities = F.softmax(output, dim=1)
64
+ return output, probabilities
65
+
66
+ if st.sidebar.checkbox("resultat"):
67
+ # Prédiction
68
+ with torch.no_grad():
69
+ output,_ =output_proba()
70
+ predicted_class = torch.argmax(output, dim=1).item()
71
+
72
+ for key, value in classes_p.items():
73
+ if value == predicted_class:
74
+ st.title(f'Categorie de ➤ {key}')
75
+ if st.sidebar.checkbox("Probabilités"):
76
+
77
+ _,probabilities = output_proba()
78
+ df = pd.DataFrame({"Classe": classes_p.keys(),"Probabilité": probabilities.tolist()[0]})
79
+
80
+ st.write("Probabilités :")
81
+ st.dataframe(df)
82
+