File size: 7,163 Bytes
c08e5e6 3c91057 c08e5e6 fd9ba06 a5e159d c08e5e6 9102888 c08e5e6 a5e159d c08e5e6 a5e159d c08e5e6 0b1cfd0 a5e159d f271eae a5e159d c08e5e6 2f77729 c08e5e6 bea5ac8 c08e5e6 2f77729 c08e5e6 3c91057 c08e5e6 |
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 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
import streamlit as st
import google.generativeai as genai
import os
from PIL import Image
# Configuration de la page Streamlit
st.set_page_config(
page_title="Analyse de Textes Dramatiques",
page_icon="🎭",
layout="wide"
)
# Styles CSS personnalisés
st.markdown("""
<style>
.main {
padding: 2rem;
}
.stButton>button {
width: 100%;
}
.reportview-container {
background: #f0f2f6;
}
</style>
""", unsafe_allow_html=True)
# Configuration de l'API Gemini
def setup_genai():
token = os.environ.get("TOKEN")
if not token:
st.error("Token d'API non trouvé. Veuillez configurer la variable d'environnement TOKEN.")
st.stop()
genai.configure(api_key=token)
return genai.GenerativeModel(
model_name="gemini-2.0-flash",
generation_config={
"temperature": 1,
"top_p": 0.95,
"top_k": 64,
"max_output_tokens": 8192,
},
safety_settings=[
{"category": "HARM_CATEGORY_HARASSMENT", "threshold": "BLOCK_NONE"},
{"category": "HARM_CATEGORY_HATE_SPEECH", "threshold": "BLOCK_NONE"},
{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", "threshold": "BLOCK_NONE"},
{"category": "HARM_CATEGORY_DANGEROUS_CONTENT", "threshold": "BLOCK_NONE"},
]
)
# Méthodologies
METHODOLOGIE = """
methodologie du sujet de type 1:
Pour répondre aux consignes du sujet de type 1, le candidat à l'épreuve d'Art Dramatique doit pouvoir organiser sa production en trois grandes parties autrement dit sous la forme d'une Introduction, un Développement et une Conclusion comme dans toutes les autres disciples. Ainsi, le sujet de type I sollicite chez le candidat ou encore l'apprenant les qualités d'imagination et de créativité.
[... reste de la méthodologie ...]
"""
MISE_EN_SCENE = """
methodologie du sujet de type 1:
Pour répondre aux consignes du sujet de type 1, le candidat à l'épreuve d'Art Dramatique doit pouvoir organiser sa production en trois grandes parties autrement dit sous la forme d'une Introduction, un Développement et une Conclusion comme dans toutes les autres disciples. Ainsi, le sujet de type I sollicite chez le candidat ou encore l'apprenant les qualités d'imagination et de créativité.
I°) l'Introduction:
Objectifs :
C'est la première partie d'un travail de rédaction, elle est toujours composée de cinq parties qui sont nécessaire pour son élaboration en Art Dramatique à savoir:
1°) La phrase introductive: Elle est souvent appelée Amorce ou phrase chapeau, elle débute l'introduction et se construit de plusieurs manières :
a°) En passant par la définition du concept du théâtre
b) En passant par la définition du thème dominant du texte
c) En passant un constat ou une observation
2°) La présentation du document(le texte): Il s'agit ici de relever le nom de l'auteur, le tire de la pièce de théâtre, la date de publication, la maison d'édition, l'Acte et la scène dans laquelle on a extrait le texte et le genre théâtral.
3°) Décliner le thème abordé dans le texte : Il s'agit simplement d'identifier ou de relever le thème mise exergue dans le texte..
4°) Faire un résumé succinct de l'histoire du texte : Il s'agit de dire de manière brève dequoi parle le texte.
5°) l'Annonce du plan: l'annonce du plan est présenté en deux grandes parties d'abord l'analyse du documentaire (donc le texte) ensuite la rédaction de la mise en scène encore appelée écriture scénique.
II°) le Développement:
C'est la deuxième partie de notre travail de rédaction. Dans cette partie l'élève do t organiser son raisonnement. Le développement en Art Dramatique est composé de deux grandes parties comme indiqué dans l'annonce du plan à savoir:
1) l'Analyse documentaire : Dans cette partie l'apprenant doit rédiger deux petits paragraphes:
-la Présentation des personnages: Dans cette partie l'élève doit pouvoir présenter les personnages qui interviennent dans le texte leurs rôles, les rapports qu'ils en retiennent entre eux et leur psychologie.
NB: Après le premier paragraphe, il faut prévoir une transition avant d'entamer le ceuxième paragraphe.
-Présentation scénographique: Dans cette partie il est question pour l'élève de présenter tous les éléments scénographiques à savoir les indications qui rendent compte de l'espace et du temps. Pour l'espace, il faut pouvoir situer le lieu de l'action et pour le temps il faut situer le moment où se déroule l'action.
NB: Il faudra prévoir une transition entre les deux grandes parties du développement.
III°) la Conclusion:
Dans cette dernière partie de la rédaction, il est question de répondre au thème traité dans le texte et ensuite d'ouvrir la réflexion à travers une référence ou une citation en rapport avec le sujet.
"""
def generate_analysis(model, image, analysis_type):
if analysis_type == "Sans mise en scène":
prompt = f"traite moi ce devoir en respectant scrupuleusement la méthodologie suivante : {METHODOLOGIE}"
else:
prompt = f"traite moi ce devoir en respectant scrupuleusement la méthodologie suivante. Je le veux sous forme de paragraphe : {MISE_EN_SCENE}"
try:
response = model.generate_content([prompt, image])
return response.text
except Exception as e:
st.error(f"Erreur lors de la génération : {str(e)}")
return None
def main():
# En-tête de l'application
st.title("🎭 Analyse de Textes Dramatiques")
st.write("Analysez vos textes dramatiques avec l'aide de l'IA")
# Initialisation du modèle
model = setup_genai()
# Interface utilisateur
col1, col2 = st.columns([1, 2])
with col1:
st.subheader("Configuration")
uploaded_file = st.file_uploader("Téléchargez votre image", type=['png', 'jpg', 'jpeg'])
analysis_type = st.radio(
"Type d'analyse",
["devoir complet sans mise en scène", "Mise en scène uniquement"],
help="Choisissez le type d'analyse que vous souhaitez effectuer"
)
if uploaded_file and st.button("Analyser", key="analyze_btn"):
with st.spinner("Analyse en cours..."):
image = Image.open(uploaded_file)
result = generate_analysis(model, image, analysis_type)
if result:
with col2:
st.subheader("Résultats de l'analyse")
st.markdown(result)
# Option pour télécharger les résultats
st.download_button(
label="📥 Télécharger l'analyse",
data=result,
file_name="analyse_dramatique.txt",
mime="text/plain"
)
# Pied de page
st.markdown("---")
st.markdown("Développé avec ❤️ pour les passionnés de théâtre")
if __name__ == "__main__":
main() |