add back Example
This commit is contained in:
1 parent
a03e0e3b4c
commit
d048732613
1 file changed
+9
-77
+9
-77
@@ -1,7 +1,7 @@
|
|||||||
#+title: Copienator
|
#+title: Copienator
|
||||||
#+author: Sébastien Miquel
|
#+author: Sébastien Miquel
|
||||||
#+date: 14-03-2026
|
#+date: 14-03-2026
|
||||||
# Time-stamp: <22-08-26 12:22>
|
# Time-stamp: <26-09-26 22:56>
|
||||||
#+OPTIONS:
|
#+OPTIONS:
|
||||||
|
|
||||||
* Présentation
|
* Présentation
|
||||||
@@ -10,15 +10,17 @@
|
|||||||
Ce dépôt contient un certain nombre de script Python que j'utilise
|
Ce dépôt contient un certain nombre de script Python que j'utilise
|
||||||
pour faire corriger des copies par Gemini.
|
pour faire corriger des copies par Gemini.
|
||||||
|
|
||||||
1. Les copies sont découpées suivant les labels des questions.
|
1. L'énoncé (pdf/tex) et le corrigé sont analysés
|
||||||
2. Des requêtes de correction sont faites à Gemini, qui met une note
|
2. Les labels des questions sont détectées sur les copies.
|
||||||
|
3. Les copies sont découpées suivant ces labels.
|
||||||
|
4. Des requêtes de correction sont faites à Gemini, qui met une note
|
||||||
entre 0 et 4 à la question, ajoute des commentaires, et encadre
|
entre 0 et 4 à la question, ajoute des commentaires, et encadre
|
||||||
certaines parties de la réponse.
|
certaines parties de la réponse.
|
||||||
3. Une version pdf annotée de la copie est générée, faite pour être
|
5. Une version pdf annotée de la copie est générée, faite pour être
|
||||||
éditée sur tablette tactile. Le correcteur humain peut modifier la
|
éditée sur tablette tactile. Le correcteur humain peut modifier la
|
||||||
note, supprimer des commentaires de l'IA, ou ajouter des remarques
|
note, supprimer des commentaires de l'IA, ou ajouter des remarques
|
||||||
manuscrites.
|
manuscrites.
|
||||||
4. Ces annotations manuscrites sont lues et recompilées en une
|
6. Ces annotations manuscrites sont lues et recompilées en une
|
||||||
version de la copie pour l'élève.
|
version de la copie pour l'élève.
|
||||||
|
|
||||||
** Limitations
|
** Limitations
|
||||||
@@ -163,7 +165,7 @@ Copier `default_config.py` en `config.py`. Éventuellement le modifier.
|
|||||||
noms/prénoms des élèves, un par ligne
|
noms/prénoms des élèves, un par ligne
|
||||||
2. Créer un dossier correspondant à l'évaluation (=Interro= dans la
|
2. Créer un dossier correspondant à l'évaluation (=Interro= dans la
|
||||||
suite)
|
suite)
|
||||||
3. Suivre les instructions suivantes
|
3. Lancer l'interface graphique
|
||||||
|
|
||||||
** Interface graphique
|
** Interface graphique
|
||||||
|
|
||||||
@@ -178,73 +180,7 @@ l’interface, depuis n’importe quel répertoire. Il utilise le Python de
|
|||||||
=.venv= s’il existe, sinon =python3= du PATH. On peut lui passer le dossier
|
=.venv= s’il existe, sinon =python3= du PATH. On peut lui passer le dossier
|
||||||
d’évaluation : =./start-gui.sh Interro=. Sans argument, il ouvre le
|
d’évaluation : =./start-gui.sh Interro=. Sans argument, il ouvre le
|
||||||
sous-dossier immédiat non masqué le plus récemment modifié du répertoire
|
sous-dossier immédiat non masqué le plus récemment modifié du répertoire
|
||||||
courant, en excluant =copienator=, =copienator_gui=, =tests=, =OLD=,
|
courant.
|
||||||
=__pycache__=, =build=, =dist=, =*.egg-info=, =venv=, =env= et
|
|
||||||
=node_modules=. S’il n’y a aucun dossier admissible, l’interface démarre
|
|
||||||
sans évaluation. Un chemin explicite reste utilisable même s’il est exclu
|
|
||||||
de la sélection automatique.
|
|
||||||
|
|
||||||
=Recharger — vérifier à nouveau= relit les fichiers d’entrée du dossier.
|
|
||||||
Pour reprendre le découpage d’une copie, sélectionnez-la dans =Copies
|
|
||||||
détectées=, cliquez sur =Refaire la copie sélectionnée=, puis sur
|
|
||||||
=Exécuter=. Le découpage repart de l’original conservé.
|
|
||||||
Dans la fenêtre de découpage, =i= inverse l’ordre de toutes les pages
|
|
||||||
(dernière vers première) et reprend à la nouvelle première page. Les choix
|
|
||||||
de découpage déjà saisis sont effacés ; les rotations globales sont conservées.
|
|
||||||
Ce raccourci est configurable via =PAGE_SPLITTER_KB["reverse_pages"]=.
|
|
||||||
=Copier la commande= copie les commandes complètes (à lancer depuis la
|
|
||||||
racine du projet). Dans la console, les boutons de copie et le clic droit
|
|
||||||
permettent de copier la sélection ou toute la sortie ; =Ctrl+C= et
|
|
||||||
=Ctrl+A= sont également disponibles (=Cmd= sous macOS).
|
|
||||||
|
|
||||||
Pendant =Découper une partie à gauche pour détection des labels=, les
|
|
||||||
flèches gauche et droite déplacent la zone de 50 px ; les flèches haut et
|
|
||||||
bas l’élargissent ou la réduisent de 50 px. Avec le workflow personnel,
|
|
||||||
=t/s/r/n= reproduisent respectivement gauche/réduire/élargir/droite.
|
|
||||||
=1= utilise les pages entières. =!= signale la copie en erreur et passe à
|
|
||||||
la suivante ; =Entrée= valide et enregistre la découpe affichée.
|
|
||||||
Une copie ignorée conserve ses anciennes découpes. Les signalements sont
|
|
||||||
conservés dans =.copienator/copy_errors.json=, même après fermeture.
|
|
||||||
Dans =Séparer et réordonner les pages=, =Traiter les copies signalées=
|
|
||||||
reprend ces copies à partir des originaux conservés. Le même bouton dans
|
|
||||||
=Découper une partie à gauche pour détection des labels= reprend leur
|
|
||||||
découpage ; chaque signalement
|
|
||||||
est effacé seulement après validation et enregistrement avec =Entrée=.
|
|
||||||
Fermer la fenêtre, appuyer à nouveau sur =!= ou rencontrer une erreur
|
|
||||||
conserve le signalement. Les commandes =page-split= et =crop-labels=
|
|
||||||
acceptent aussi =--marked= pour traiter les copies signalées de l’évaluation.
|
|
||||||
|
|
||||||
Avec =SHOW_PERSONAL_STEPS = True=, =Analyser l’énoncé= propose le choix
|
|
||||||
entre Gemini et =Énoncés et solutions personnels (SHEETINFO)=. Ce dernier
|
|
||||||
lance =python -m copienator statement-personal Interro= : il lit
|
|
||||||
=enonce.tex=, utilise le service d’exercices sur =localhost:8080= pour
|
|
||||||
générer =Text=, =Sol=, =Text2=, =Sol2= et les barèmes personnels =Persp=,
|
|
||||||
et écrit un groupe par exercice dans =label_groups=.
|
|
||||||
|
|
||||||
Deux boutons ouvrent ensuite des actions facultatives avec aperçu de
|
|
||||||
commande et bouton =Exécuter= : =Regrouper avec Gemini…= remplace seulement
|
|
||||||
=label_groups= (=statement Interro --groups-only=) ; =Remplacer Persp avec
|
|
||||||
Gemini…= régénère seulement les barèmes des groupes actuels
|
|
||||||
(=statement Interro --persp-only=), avec le même prompt que le parcours
|
|
||||||
Gemini complet. Une réponse incomplète ou un échec laisse les anciens
|
|
||||||
barèmes en place. On peut ignorer ces étapes et conserver les résultats
|
|
||||||
personnels.
|
|
||||||
|
|
||||||
On peut aussi ouvrir directement une évaluation avec =python -m copienator gui
|
|
||||||
Interro=. L'interface conserve l'état et l'historique des étapes dans
|
|
||||||
=Interro/.copienator-gui.json=, et les sorties complètes dans
|
|
||||||
=Interro/.copienator/logs/=. Une relance d'une étape antérieure ne
|
|
||||||
supprime aucun résultat ; les étapes suivantes sont seulement marquées
|
|
||||||
comme étant à revalider.
|
|
||||||
|
|
||||||
Après la réussite d'un script, l'interface sélectionne automatiquement
|
|
||||||
l'étape suivante. =Découper les réponses par question= et =Regrouper
|
|
||||||
les réponses= démarrent automatiquement lors de leur première visite.
|
|
||||||
Avec le mode =Correction immédiate=, les trois étapes batch sont alors
|
|
||||||
marquées =Ignorée= à leur première visite. L'étape de résolution
|
|
||||||
manuelle est traitée de la même façon si =manual_resolutions.txt= est
|
|
||||||
absent, vide ou ne contient que des commentaires. Ces automatismes ne
|
|
||||||
se répètent pas lors d'un retour en arrière.
|
|
||||||
|
|
||||||
Le bouton =Diagnostic…= vérifie les modules Python, Poppler, LaTeX,
|
Le bouton =Diagnostic…= vérifie les modules Python, Poppler, LaTeX,
|
||||||
PDF Arranger (ou Aperçu sous macOS) et la configuration Gemini. Sous
|
PDF Arranger (ou Aperçu sous macOS) et la configuration Gemini. Sous
|
||||||
@@ -254,10 +190,6 @@ sont également inspectés. Quand la création de liens symboliques ou
|
|||||||
physiques n'est pas autorisée, l'export et la préparation de =A Rendre=
|
physiques n'est pas autorisée, l'export et la préparation de =A Rendre=
|
||||||
utilisent automatiquement une copie normale.
|
utilisent automatiquement une copie normale.
|
||||||
|
|
||||||
Les chemins des étapes personnelles peuvent être adaptés avec
|
|
||||||
=CURRENT_SCORE_ODS_PATH=, =FINAL_SCORE_ODS_PATH=,
|
|
||||||
=FINAL_SCORE_OUTPUT_DIR= et =FINAL_SCORE_FONT_PATH= dans =config.py=.
|
|
||||||
|
|
||||||
* Documentation complémentaire
|
* Documentation complémentaire
|
||||||
|
|
||||||
- [[file:docs/final_output.md][Fichiers finaux dans A Rendre]] : contenu du JPEG, sélection et
|
- [[file:docs/final_output.md][Fichiers finaux dans A Rendre]] : contenu du JPEG, sélection et
|
||||||
|
|||||||
Reference in new issue
Block a user