yassonee commited on
Commit
ef5f13b
·
verified ·
1 Parent(s): 134f577

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +40 -9
app.py CHANGED
@@ -1,31 +1,62 @@
1
  import streamlit as st
2
- from transformers import AutoImageProcessor, AutoModelForImageClassification, pipeline
3
  from PIL import Image
4
  import torch
 
5
 
6
- st.set_page_config(page_title="Détection maladies pulmonaires", layout="wide")
7
 
8
  @st.cache_resource
9
  def load_model():
10
- return pipeline("image-classification", model="gianlab/swin-tiny-patch4-window7-224-finetuned-lungs-disease")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
 
12
  def main():
13
- st.title("Détection de maladies pulmonaires")
14
 
15
- model = load_model()
16
 
17
  uploaded_file = st.file_uploader("Télécharger une radiographie thoracique", type=["jpg", "jpeg", "png"])
18
 
19
  if uploaded_file:
20
  image = Image.open(uploaded_file)
21
- st.image(image, caption="Radiographie", use_column_width=True)
22
 
23
  if st.button("Analyser"):
24
  with st.spinner("Analyse en cours..."):
25
  try:
26
- result = model(image)
27
- st.write(f"Diagnostic: {result[0]['label']}")
28
- st.write(f"Confiance: {result[0]['score']:.2%}")
 
 
 
 
 
 
 
 
 
29
  except Exception as e:
30
  st.error(f"Erreur: {str(e)}")
31
 
 
1
  import streamlit as st
2
+ from transformers import AutoImageProcessor, SegformerForSemanticSegmentation
3
  from PIL import Image
4
  import torch
5
+ import numpy as np
6
 
7
+ st.set_page_config(page_title="Segmentation pulmonaire", layout="wide")
8
 
9
  @st.cache_resource
10
  def load_model():
11
+ processor = AutoImageProcessor.from_pretrained("Tianmu28/segformer-b0-segments-lungs-xray")
12
+ model = SegformerForSemanticSegmentation.from_pretrained("Tianmu28/segformer-b0-segments-lungs-xray")
13
+ return processor, model
14
+
15
+ def create_overlay(image, mask, alpha=0.5):
16
+ # Convertir le masque en RGB
17
+ mask_rgb = np.zeros((*mask.shape, 3), dtype=np.uint8)
18
+ mask_rgb[mask == 1] = [255, 0, 0] # Rouge pour les zones détectées
19
+
20
+ # Convertir l'image en array numpy
21
+ image_np = np.array(image)
22
+ if len(image_np.shape) == 2: # Si l'image est en niveaux de gris
23
+ image_np = np.stack([image_np] * 3, axis=-1)
24
+
25
+ # Redimensionner le masque si nécessaire
26
+ if mask_rgb.shape[:2] != image_np.shape[:2]:
27
+ mask_rgb = Image.fromarray(mask_rgb).resize(image.size)
28
+ mask_rgb = np.array(mask_rgb)
29
+
30
+ # Créer l'overlay
31
+ overlay = Image.fromarray((image_np * (1 - alpha) + mask_rgb * alpha).astype(np.uint8))
32
+ return overlay
33
 
34
  def main():
35
+ st.title("Segmentation des poumons sur radiographie")
36
 
37
+ processor, model = load_model()
38
 
39
  uploaded_file = st.file_uploader("Télécharger une radiographie thoracique", type=["jpg", "jpeg", "png"])
40
 
41
  if uploaded_file:
42
  image = Image.open(uploaded_file)
43
+ st.image(image, caption="Image originale", use_column_width=True)
44
 
45
  if st.button("Analyser"):
46
  with st.spinner("Analyse en cours..."):
47
  try:
48
+ # Préparer l'image
49
+ inputs = processor(images=image, return_tensors="pt")
50
+
51
+ # Prédiction
52
+ outputs = model(**inputs)
53
+ logits = outputs.logits
54
+ predicted_mask = torch.argmax(logits, dim=1).squeeze().numpy()
55
+
56
+ # Créer et afficher l'overlay
57
+ overlay = create_overlay(image, predicted_mask)
58
+ st.image(overlay, caption="Zones détectées", use_column_width=True)
59
+
60
  except Exception as e:
61
  st.error(f"Erreur: {str(e)}")
62