ColinceTatsa/Colince_TransferLearning
0
1import streamlit as st2import torch3from torchvision import transforms4from PIL import Image5import torch.nn.functional as F6import pickle7import pandas as pd8 9me = ['Accueil','Analyse Medicale']10st.sidebar.image("logoMédical.jpg", width=500)11p = st.sidebar.selectbox('menu', me)12 13@st.cache_resource # Pour éviter de recharger le modècdle à chaque interaction14def charger_modele_pytorch():15 modele = torch.load('TATSA_Model1_TransfLr_py.pth',map_location=device, weights_only=False) # Charge le modèle16 modele.eval() # Important : mettez le modèle en mode évaluation17 return modele18#chemin_modele = charger_modele_pytorch()19#chemin_modele = st.text_input("Chemin vers le modèle (.pth)", "pytorch1.pth")20 21if 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")24else:25 #st.write("Aucun GPU détecté. Utilisation du CPU.")26 device = torch.device("cpu")27 28modele_charge = charger_modele_pytorch()29 30 # Transformation des images (Doit être la même que celle utilisée à l'entraînement)31transform = transforms.Compose([32 transforms.Resize((224, 224)), # Modifier selon la taille utilisée à l'entraînement33 transforms.ToTensor(),34 transforms.Normalize(mean=[0.485,0.456,0.406],std=[0.229,0.224,0.225])])35if 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 42elif p=='Analyse Medicale':43 st.image("logoKeyce.jpg")44 im2 = Image.open("logoPytorch.jpg")45 taille_image = (800, 200) # Définir la taille souhaitée46 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'image56 img_tensor = transform(image).unsqueeze(0) # Ajout d'une dimension batch57 #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, probabilities65 66 if st.sidebar.checkbox("resultat"):67 # Prédiction68 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 83 