Spaces:
Runtime error
Runtime error
Update app.py
Browse files
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
|
| 19 |
width, height = 300, 300
|
| 20 |
image = np.zeros((height, width, 3), dtype=np.uint8)
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
for
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
|
| 34 |
-
|
| 35 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 36 |
|
| 37 |
# Fonction pour traiter l'image téléchargée
|
| 38 |
def process_uploaded_image(uploaded_file):
|
| 39 |
-
|
| 40 |
-
|
| 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] =
|
| 49 |
else:
|
| 50 |
-
|
| 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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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
|