TestGenerativ / app.py
Enoder's picture
Update app.py
d31d9e9 verified
Raw
History Blame Contribute Delete
5.67 kB
import streamlit as st
import numpy as np
from PIL import Image, ImageEnhance
from collections import Counter
# Ensembles pour stocker les pixels validés et non validés
oe = set() # Pixels validés
nn = set() # Pixels non validés
# Fonction pour traiter et redimensionner l'image importée
def process_uploaded_image(uploaded_file):
image = Image.open(uploaded_file).convert("RGB").resize((300, 300)) # Conversion en RGB et redimensionnement à 300x300
pixel_data = np.array(image)
return pixel_data
# Fonction pour déterminer la couleur dominante
def dominant_color(surrounding_pixels):
colors = [tuple(pixel) for pixel in surrounding_pixels]
color_counts = Counter(colors)
return np.array(color_counts.most_common(1)[0][0], dtype=np.uint8)
# Fonction pour générer une image en fonction des pixels voisins
def generate_image_from_neighbors(base_pixels):
height, width, _ = base_pixels.shape
generated_image = np.zeros((50, 50, 3), dtype=np.uint8) # Image générée de 50x50 pixels
# Itération sur chaque pixel de l'image générée
for i in range(50): # Hauteur de l'image générée
for j in range(50): # Largeur de l'image générée
# Calculer les indices correspondants dans l'image de base
orig_i = int(i * (height / 50)) # Mappage de 50 à 300
orig_j = int(j * (width / 50)) # Mappage de 50 à 300
surrounding_pixels = []
# Collecte des couleurs des pixels environnants
for di in range(-1, 2): # -1, 0, 1
for dj in range(-1, 2): # -1, 0, 1
# Vérifier les limites
if 0 <= orig_i + di < height and 0 <= orig_j + dj < width:
surrounding_pixels.append(base_pixels[orig_i + di, orig_j + dj])
# Déterminer la couleur dominante parmi les pixels environnants
new_pixel_color = dominant_color(surrounding_pixels)
# Assignation de la couleur dominante au pixel généré
generated_image[i, j] = new_pixel_color
return Image.fromarray(generated_image)
# Fonction pour appliquer un filtre à l'image
def apply_filter(image, filter_type):
if filter_type == "Contraste":
return ImageEnhance.Contrast(image).enhance(1.5)
return image
# Interface utilisateur pour télécharger et afficher l'image importée
st.title("Générateur d'images d'animaux basé sur l'image importée")
st.write("Choisissez un animal pour générer une image ou téléchargez une image comme référence.")
# Téléchargement de l'image importée
uploaded_file = st.file_uploader("Téléchargez une image de référence (JPG ou PNG)", type=["jpg", "jpeg", "png"])
# Initialisation d'une image générée
generated_image = None
# Historique des images générées
image_history = []
# Génération d'image selon la référence téléchargée
if uploaded_file:
base_pixels = process_uploaded_image(uploaded_file)
st.image(Image.fromarray(base_pixels), caption="Image importée de référence", use_column_width=True)
# Options de filtres
filter_option = st.selectbox("Choisissez un filtre à appliquer :", ["Aucun", "Contraste"])
if filter_option != "Aucun":
base_image = Image.fromarray(base_pixels)
base_image = apply_filter(base_image, filter_option)
st.image(base_image, caption=f"Image avec filtre : {filter_option}", use_column_width=True)
base_pixels = np.array(base_image) # Mettez à jour les pixels de base
# Bouton pour générer une image
if st.button("Générer une image"):
generated_image = generate_image_from_neighbors(base_pixels)
st.image(generated_image, caption="Image générée", use_column_width=True)
image_history.append(generated_image) # Ajoutez l'image générée à l'historique
# Options de validation de l'image générée
if generated_image is not None:
col1, col2 = st.columns(2) # Créez deux colonnes pour les boutons
with col1:
if st.button("Oui"):
# Enregistrer les pixels de l'image générée dans l'ensemble "oe"
new_pixels = set(map(tuple, np.array(generated_image.getdata()))) # Récupérer et convertir les pixels
oe.update(new_pixels) # Ajouter les nouveaux pixels à l'ensemble "oe"
st.success("Image validée ! Les pixels sont enregistrés.")
# Réinitialiser l'image générée après validation
generated_image = None
with col2:
if st.button("Non"):
# Enregistrer les pixels de l'image générée dans l'ensemble "nn"
new_pixels = set(map(tuple, np.array(generated_image.getdata()))) # Récupérer et convertir les pixels
nn.update(new_pixels) # Ajouter les nouveaux pixels à l'ensemble "nn"
st.error("Image rejetée ! Les pixels sont enregistrés.")
# Réinitialiser l'image générée après rejet
generated_image = None
# Affichage des ensembles de pixels validés et non validés
st.write("Pixels validés (oe):", len(oe), "pixels enregistrés.")
st.write("Pixels non validés (nn):", len(nn), "pixels enregistrés.")
# Affichage de l'historique des images générées
st.write("Historique des images générées:")
for img in image_history:
st.image(img, use_column_width=True)
# Option pour réinitialiser les ensembles
if st.button("Réinitialiser les ensembles"):
oe.clear()
nn.clear()
st.success("Les ensembles de pixels ont été réinitialisés.")