Enoder commited on
Commit
fa77944
·
verified ·
1 Parent(s): ab4bd0c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +55 -44
app.py CHANGED
@@ -10,77 +10,88 @@ st.title("Générateur d'images d'animaux")
10
  st.write("Choisissez un animal pour générer une image ou téléchargez une image à déchiffrer.")
11
 
12
  # Initialisation des variables
13
- image_data = []
14
  validation_data = {}
15
  auto_training_data = {}
 
16
 
17
- # Fonction pour créer une image aléatoire
18
- def create_image(label):
19
  width, height = 300, 300
20
  image = np.zeros((height, width, 3), dtype=np.uint8)
21
-
22
- if label == "chat":
23
- for i in range(height):
24
- for j in range(width):
25
- image[i, j] = [random.randint(150, 255), random.randint(150, 255), random.randint(150, 255)]
26
- elif label == "chien":
27
- for i in range(height):
28
- for j in range(width):
29
- image[i, j] = [random.randint(100, 200), random.randint(50, 150), random.randint(0, 100)]
30
- elif label == "cheval":
31
- for i in range(height):
32
- for j in range(width):
33
- image[i, j] = [random.randint(0, 50), random.randint(0, 50), random.randint(0, 50)]
34
-
35
- return Image.fromarray(image)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
 
37
  # Fonction pour traiter l'image téléchargée
38
  def process_uploaded_image(uploaded_file):
39
- # Ouvrir l'image
40
- image = Image.open(uploaded_file)
41
- # Redimensionner l'image à 300x300
42
- image = image.resize((300, 300))
43
- return image
44
 
45
  # Fonction pour gérer la validation des images
46
- def validate_image(is_valid, label):
47
  if is_valid:
48
- validation_data[label] = validation_data.get(label, 0) + 1
49
  else:
50
- if label in validation_data:
51
- del validation_data[label]
52
 
53
  # Interface utilisateur
54
  animal = st.radio("Sélectionnez un animal :", ("chat", "chien", "cheval"))
55
  uploaded_file = st.file_uploader("Ou téléchargez une image (JPG, PNG)", type=["jpg", "jpeg", "png"])
56
 
 
 
 
 
 
 
 
57
  if st.button("Générer une image"):
58
- img = create_image(animal)
 
 
 
 
 
59
  st.image(img, caption=f"Image générée pour un {animal}", use_column_width=True)
60
 
 
61
  if st.button("Oui"):
62
- validate_image(True, animal)
63
  st.success("Image validée!")
64
  elif st.button("Non"):
65
- validate_image(False, animal)
66
- st.error("Image rejetée!")
67
-
68
- # Si une image est téléchargée, la traiter et l'afficher
69
- if uploaded_file is not None:
70
- uploaded_image = process_uploaded_image(uploaded_file)
71
- st.image(uploaded_image, caption="Image téléchargée", use_column_width=True)
72
-
73
- # Validation de l'image téléchargée
74
- if st.button("Valider l'image téléchargée"):
75
- validate_image(True, "image téléchargée")
76
- st.success("Image téléchargée validée!")
77
- if st.button("Rejeter l'image téléchargée"):
78
- validate_image(False, "image téléchargée")
79
- st.error("Image téléchargée rejetée!")
80
 
81
  # Bouton pour réinitialiser le processus
82
  if st.button("Réinitialiser"):
83
  validation_data.clear()
 
84
  st.success("Le processus a été réinitialisé.")
85
 
86
  # Champ de texte pour données manuelles
 
10
  st.write("Choisissez un animal pour générer une image ou téléchargez une image à déchiffrer.")
11
 
12
  # Initialisation des variables
 
13
  validation_data = {}
14
  auto_training_data = {}
15
+ rejected_pixel_data = {}
16
 
17
+ # Fonction pour créer une image aléatoire basée sur les données de pixels de l'image importée
18
+ def create_image_from_data(base_data, label):
19
  width, height = 300, 300
20
  image = np.zeros((height, width, 3), dtype=np.uint8)
21
+
22
+ for i in range(height):
23
+ for j in range(width):
24
+ # Utilisation des gradients de couleurs autour de pixels voisins
25
+ if (i, j) in base_data:
26
+ avg_color = base_data[(i, j)]
27
+ else:
28
+ # Génère une couleur aléatoire proche du thème
29
+ avg_color = [random.randint(100, 200), random.randint(100, 200), random.randint(100, 200)]
30
+
31
+ # Appliquer les valeurs du dégradé en fonction de la proximité des pixels rejetés
32
+ if (i, j) in rejected_pixel_data:
33
+ avg_color = np.clip(np.array(avg_color) * 0.8, 0, 255)
34
+
35
+ image[i, j] = avg_color
36
+
37
+ return Image.fromarray(image.astype(np.uint8))
38
+
39
+ # Fonction pour extraire les données de pixels de l'image téléchargée
40
+ def extract_pixel_data(image):
41
+ width, height = image.size
42
+ pixels = image.load()
43
+ pixel_data = {}
44
+
45
+ for i in range(width):
46
+ for j in range(height):
47
+ pixel_data[(i, j)] = pixels[i, j] # Enregistrer la couleur du pixel
48
+
49
+ return pixel_data
50
 
51
  # Fonction pour traiter l'image téléchargée
52
  def process_uploaded_image(uploaded_file):
53
+ image = Image.open(uploaded_file).resize((300, 300))
54
+ return extract_pixel_data(image)
 
 
 
55
 
56
  # Fonction pour gérer la validation des images
57
+ def validate_image(is_valid, label, base_data):
58
  if is_valid:
59
+ validation_data[label] = base_data
60
  else:
61
+ rejected_pixel_data.update(base_data) # Enregistre les pixels de l'image rejetée
 
62
 
63
  # Interface utilisateur
64
  animal = st.radio("Sélectionnez un animal :", ("chat", "chien", "cheval"))
65
  uploaded_file = st.file_uploader("Ou téléchargez une image (JPG, PNG)", type=["jpg", "jpeg", "png"])
66
 
67
+ # Génération de l'image à partir de données de pixels de l'image importée
68
+ if uploaded_file:
69
+ base_data = process_uploaded_image(uploaded_file)
70
+ st.image(Image.fromarray(np.array([[base_data.get((i, j), (255, 255, 255)) for i in range(300)] for j in range(300)], dtype=np.uint8)), caption="Image importée décryptée", use_column_width=True)
71
+ else:
72
+ base_data = None
73
+
74
  if st.button("Générer une image"):
75
+ if base_data:
76
+ img = create_image_from_data(base_data, animal)
77
+ else:
78
+ st.warning("Veuillez d'abord importer une image pour guider la génération.")
79
+ img = create_image_from_data({}, animal) # Génération aléatoire si aucune image n'est importée
80
+
81
  st.image(img, caption=f"Image générée pour un {animal}", use_column_width=True)
82
 
83
+ # Boutons de validation
84
  if st.button("Oui"):
85
+ validate_image(True, animal, base_data)
86
  st.success("Image validée!")
87
  elif st.button("Non"):
88
+ validate_image(False, animal, base_data)
89
+ st.error("Image rejetée et données enregistrées pour améliorer la génération future!")
 
 
 
 
 
 
 
 
 
 
 
 
 
90
 
91
  # Bouton pour réinitialiser le processus
92
  if st.button("Réinitialiser"):
93
  validation_data.clear()
94
+ rejected_pixel_data.clear()
95
  st.success("Le processus a été réinitialisé.")
96
 
97
  # Champ de texte pour données manuelles