File size: 5,671 Bytes
b537f5c
 
35cb477
bbb656b
ab4bd0c
2a411d9
 
 
ab4bd0c
2e713f4
 
05fcc14
2e713f4
 
 
bbb656b
 
 
 
 
 
 
2e713f4
 
7d9ca7a
 
 
 
 
 
 
 
8a4eead
2e713f4
05fcc14
2e713f4
 
7d9ca7a
 
 
2a411d9
bbb656b
 
8a4eead
8093ef9
 
ab4bd0c
cd026f5
ab4bd0c
2f6d23b
 
35cb477
2f6d23b
 
 
2e713f4
 
 
ab4bd0c
2e713f4
cd026f5
ab4bd0c
4fddd1c
 
 
2f6d23b
 
 
2e713f4
fa77944
cd026f5
2e713f4
cd026f5
2f6d23b
35cb477
2f6d23b
 
 
 
 
 
4fddd1c
cd026f5
2e713f4
8a4eead
2f6d23b
cd026f5
4fddd1c
 
 
 
 
2a411d9
db02f4f
 
2f6d23b
4fddd1c
 
 
 
 
 
2a411d9
db02f4f
 
2f6d23b
4fddd1c
 
 
2e713f4
2a411d9
570c0dd
 
cd026f5
2f6d23b
 
 
 
 
2a411d9
 
2e713f4
 
d31d9e9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
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.")