Ghilth commited on
Commit
e257572
·
1 Parent(s): 416423a

segmentation using kmeans

Browse files
Files changed (4) hide show
  1. app.py +54 -0
  2. feuille.jpg +0 -0
  3. feuille_segment.jpg +0 -0
  4. segmentation.py +33 -0
app.py ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ from PIL import Image
3
+ import numpy as np
4
+ from segmentation import segment
5
+
6
+ # Fonction principale de l'application
7
+ def bio_analytica(image):
8
+ """
9
+ Analyse une image de feuille de plante, segmente les anomalies et retourne l'image segmentée.
10
+
11
+ Args:
12
+ image (PIL.Image): Image téléchargée par l'utilisateur.
13
+
14
+ Returns:
15
+ PIL.Image: Image segmentée avec anomalies mises en évidence.
16
+ """
17
+ # Sauvegarder temporairement l'image téléchargée
18
+ image_path = "temp_uploaded_image.jpg"
19
+ image.save(image_path)
20
+
21
+ # Appeler la fonction segment pour traiter l'image
22
+ segment(image_path)
23
+
24
+ # Charger l'image segmentée pour la renvoyer dans l'interface
25
+ segmented_image = Image.open("image_segmented.jpg")
26
+
27
+ return segmented_image
28
+
29
+ # Interface utilisateur Gradio
30
+ interface = gr.Interface(
31
+ fn=bio_analytica, # Fonction de traitement
32
+ inputs=gr.Image(type="pil"), # Entrée : Image téléchargée
33
+ outputs=gr.Image(type="pil"), # Sortie : Image segmentée
34
+
35
+ title="🌿 Analyse des Feuilles de Plantes - Détection d'Anomalies",
36
+
37
+ description="""
38
+ <div style="text-align: center;">
39
+ <h2 style="color: green;">Bio Analytica 🌱</h2>
40
+ <p style="font-size: 16px; color: white;">
41
+ Téléchargez une image de feuille de plante.<br>
42
+ Notre outil segmente l'image et fait ressortir les anomalies présentes sur la feuille.<br>
43
+ Obtenez des informations visuelles claires sur l'état de vos plantes 🌿.
44
+ </p>
45
+ </div>
46
+ """,
47
+ examples=[["feuille.jpg"], ["feuille_segment.jpg"]], # Exemples d'images pour test
48
+ flagging_mode="never", # Désactiver le signalement des résultats
49
+ theme="dark" # Thème simple
50
+ )
51
+
52
+ # Lancement de l'application
53
+ if __name__ == "__main__":
54
+ interface.launch()
feuille.jpg ADDED
feuille_segment.jpg ADDED
segmentation.py ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import cv2
2
+ import numpy as np
3
+ from sklearn.cluster import KMeans
4
+
5
+ def segment(image_path):
6
+ # Charger l'image
7
+ image = cv2.imread(image_path)
8
+ image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # Convertir BGR en RGB
9
+ h, w, c = image.shape
10
+
11
+ # Reshape pour obtenir un tableau de pixels
12
+ pixels = image.reshape(-1, 3) # Dimension (H*W, 3)
13
+
14
+ # Nombre de clusters
15
+ K = 2
16
+
17
+ # Application de K-means clustering
18
+ kmeans = KMeans(n_clusters=K, random_state=0, n_init='auto')
19
+ kmeans.fit(pixels)
20
+
21
+ # Remplacer chaque pixel par le centre du cluster auquel il appartient
22
+ segmented_pixels = kmeans.cluster_centers_[kmeans.labels_]
23
+ segmented_image = segmented_pixels.reshape(h, w, 3).astype(np.uint8)
24
+
25
+ # Convertir l'image segmentée en niveaux de gris
26
+ gray_image = cv2.cvtColor(segmented_image, cv2.COLOR_RGB2GRAY)
27
+
28
+ gray_image=cv2.resize(gray_image,(500,500),interpolation=cv2.INTER_AREA)
29
+
30
+
31
+ # Sauvegarder l'image en noir et blanc
32
+ cv2.imwrite('image_segmented.jpg', gray_image)
33
+ segment("feuille.jpg")