Docfile commited on
Commit
91e78b3
·
verified ·
1 Parent(s): 1552e83

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +201 -0
app.py ADDED
@@ -0,0 +1,201 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ from google import genai
3
+ from PIL import Image
4
+ import os
5
+ import tempfile
6
+
7
+ # Authentification et initialisation du client Gemini
8
+ gen = os.environ['GOOGLE_API_KEY']
9
+ client = genai.Client(api_key=gen)
10
+
11
+ # --- MISE EN PAGE ET STYLE ---
12
+ st.set_page_config(page_title="Mariam Espagnol", page_icon="🇪🇸", layout="wide")
13
+
14
+ # Style CSS personnalisé
15
+ st.markdown("""
16
+ <style>
17
+ body {
18
+ background-color: #f0f2f6;
19
+ }
20
+ .title {
21
+ color: #0077cc;
22
+ font-size: 3em;
23
+ font-weight: bold;
24
+ text-align: center;
25
+ margin-bottom: 20px;
26
+ }
27
+ .subtitle {
28
+ color: #28a745;
29
+ font-size: 1.5em;
30
+ font-weight: bold;
31
+ margin-top: 30px;
32
+ }
33
+ .sidebar {
34
+ background-color: #e9ecef;
35
+ padding: 20px;
36
+ border-radius: 10px;
37
+ }
38
+ .important-info {
39
+ background-color: #d4edda;
40
+ border: 1px solid #c3e6cb;
41
+ color: #155724;
42
+ padding: 15px;
43
+ border-radius: 5px;
44
+ margin-bottom: 10px;
45
+ }
46
+ </style>
47
+ """, unsafe_allow_html=True)
48
+
49
+ # --- PROMPT ---
50
+ prompt = """
51
+
52
+ je souhaite faire mon travail d'espagnol qui consiste à de l'analyse de documents iconographique. j'aimerais que tu le phase en respectant scrupuleusement la méthodologie suivante. j'aimerais que tu fasses ce travail en espagnol en donnant également la traduction française
53
+
54
+ Metodología del comentario de un documento iconográfico
55
+
56
+ Un documento iconográfico es un documento centrado en una imagen. Puede ser: una foto, un cuadro, una publicidad, un dibujo, un tebeo, una tira dibujada, una caricatura, etc. Su comentario respeta las etapas siguientes: la presentación, la descripción, el análisis y la conclusión.
57
+
58
+ La presentación
59
+
60
+ Se trata de resaltar los elementos esenciales para identificar el documento:
61
+
62
+ El título (si existe)
63
+
64
+ La naturaleza (si es una foto/dibujo/cuadro, en color o blanco y negro)
65
+
66
+ El autor (el fotógrafo/el dibujante/el publicista...)
67
+
68
+ La fuente (si existe)
69
+
70
+ El tema evocado
71
+
72
+ La descripción
73
+
74
+ Se trata de decir lo que vemos.
75
+
76
+ Dominar el vocabulario relativo a la imagen.
77
+
78
+ Dominar el vocabulario de la situación en el espacio (arriba, abajo, delante, detrás, etc.)
79
+
80
+ Conocer la organización interna de la descripción.
81
+
82
+ ¿Qué debemos hacer concretamente?
83
+
84
+ Determinar el número de planos o términos.
85
+
86
+ (Ej: La imagen tiene dos planos/tres planos/un plan único)
87
+
88
+ Hacer la descripción plano por plano y acabar antes de pasar al siguiente si hay más de un plano.
89
+
90
+ Ej: en el primer plano vemos...
91
+
92
+ Ordenar la descripción de cada plano ( a la derecha, a la izquierda, arriba, abajo, delante, detrás, en el centro, a lo lejos...
93
+
94
+ ¿Qué se debe describir?
95
+
96
+ Los protagonistas (los personajes):
97
+
98
+ Los protagonistas
99
+
100
+ Sexo, edad (hombre o mujer, joven o adulto)
101
+
102
+ Las posturas (de pie, sentado, arrodillado, etc.)
103
+
104
+ Los vestidos (ropas)
105
+
106
+ Los rasgos físicos (color de pelo, gordo, flaco, etc.)
107
+
108
+ Los rasgos sicológicos (triste, optimista, activo, pasivo, etc.)
109
+
110
+ Las actitudes (está riendo, triste, llorando, contento, etc.)
111
+
112
+ Las acciones (lo que están haciendo)
113
+
114
+ Los objetos alrededor, los colores (fríos o cálidos), los contrastes...
115
+
116
+ El análisis
117
+
118
+ Interpretamos y comentamos los elementos de la descripción para comprender el mensaje del autor.
119
+
120
+ La interpretación debe apoyarse en la descripción porque no se trata de un comentario libre.
121
+
122
+ Empleamos fórmulas subjetivas porque expresamos hipótesis e impresiones.
123
+
124
+ Ej: Cuando examinamos...podemos decir que.../ la postura de..., los vestidos...nos permiten imaginar que.../ lo que nos llama la atención es... porque/ los colores cálidos sugieren que...
125
+
126
+ La conclusión
127
+
128
+ Se trata de hacer un balance (resumen) de lo dicho de dar una impresión personal. Así:
129
+
130
+ Anunciamos la conclusión: para concluir/ en suma/en conclusión... podemos decir que...
131
+
132
+ Precisamos el medio de expresión utilizado: a través de esta foto/mediante este dibujo...
133
+
134
+ Anunciamos la intención del autor: el dibujante quiere denunciar/ el fotógrafo pretende criticar/ el pintor quiere relevar, sensibilizar, mostrar.
135
+
136
+ Dar la impresión personal: esta foto (no) me parece interesante/escandaloso/pertinente.
137
+
138
+ Justificamos nuestra impresión: porque revela una realidad social/política/cultural...
139
+
140
+ Un modelo: a través de este cuadro, el pintor quiere denunciar las injusticias sociales en África. El cuadro me parece interesante porque releva un fenómeno social recurrente que incita las autoridades a la responsabilidad. La propia imagen ilustra muy bien el tema de las injusticias entre ricos y ricos...
141
+
142
+
143
+ """
144
+
145
+ # --- FONCTIONS ---
146
+ def generate_response(image_path, question):
147
+ """Génère une réponse au format texte brut à partir du modèle Gemini."""
148
+ try:
149
+ image_data = Image.open(image_path)
150
+ response = client.models.generate_content(
151
+ model="gemini-2.0-flash-exp",
152
+ contents=[image_data, prompt]
153
+ )
154
+ answer = response.candidates[0].content.parts[0].text
155
+ return answer.strip()
156
+ except Exception as e:
157
+ st.error("Erreur lors de la génération de la réponse.")
158
+ return None
159
+
160
+ # --- APPLICATION PRINCIPALE ---
161
+ def main():
162
+ st.markdown("<h1 class='title'>Mariam Espagnol 🇪🇸</h1>", unsafe_allow_html=True)
163
+
164
+ # --- BARRE LATÉRALE ---
165
+ with st.sidebar:
166
+ st.markdown("<h2 class='subtitle'>Instructions</h2>", unsafe_allow_html=True)
167
+ st.markdown("""
168
+ 1. **Téléchargez une image** que vous souhaitez analyser (PNG, JPG, JPEG).
169
+ 2. L'application **générera une analyse** de l'image en espagnol et en français, en suivant la méthodologie fournie.
170
+ """)
171
+ st.markdown("<div class='important-info'>Cette application utilise le modèle Gemini de Google pour l'analyse d'images.</div>", unsafe_allow_html=True)
172
+
173
+ # --- SECTION PRINCIPALE ---
174
+ col1, col2 = st.columns([1, 2])
175
+
176
+ with col1:
177
+ st.markdown("<h2 class='subtitle'>Télécharger une image</h2>", unsafe_allow_html=True)
178
+ uploaded_file = st.file_uploader("", type=["png", "jpg", "jpeg"], label_visibility="collapsed")
179
+
180
+ if uploaded_file is not None:
181
+ with tempfile.NamedTemporaryFile(delete=False, suffix='.png') as tmp_file:
182
+ tmp_file.write(uploaded_file.getvalue())
183
+ temp_image_path = tmp_file.name
184
+
185
+ # Affichage de l'image
186
+ image = Image.open(temp_image_path)
187
+ st.image(image, use_column_width=True)
188
+
189
+ with col2:
190
+ if uploaded_file is not None:
191
+ st.markdown("<h2 class='subtitle'>Analyse de l'image</h2>", unsafe_allow_html=True)
192
+ question = "yusuf" # Question fixe pour l'instant
193
+
194
+ if st.button("✨ Générer l'analyse ✨", type="primary"):
195
+ with st.spinner("Analyse en cours..."):
196
+ response = generate_response(temp_image_path, question)
197
+ st.markdown(response)
198
+
199
+ # --- EXÉCUTION ---
200
+ if __name__ == "__main__":
201
+ main()