9.8 KiB
Script
- Quézaco
- Disclaimer
- Requirements
- Correction d'un paquet de copies
- Prétraitement
- Génération d'information sur l'énoncé
- Labelisation et regroupement
- Correction et annotation
- Génération des copies annotées
- Lecture de la correction manuscrite
- Recorrection d'une seule copie (peu testé)
Quézaco
Ce dépôt contient un certain nombre de script Python que j'utilise pour faire corriger des copies par Gemini.
- Les copies sont découpées suivant les labels des questions.
- Des requêtes de correction sont faites à Gemini, qui met une note entre 0 et 4 à la question, ajoute des commentaires, et encadre certaines parties de la réponse.
- 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 note, supprimer des commentaires de l'IA, ou ajouter des remarques manuscrites.
- Ces annotations manuscrites sont lues et recompilées en une version de la copie pour l'élève.
Disclaimer
J'utilise régulièrement cet outil et j'en suis satisfait, mais j'ai fait peu d'efforts pour le rendre universel et simple à l'emploi. Plusieurs parties de mon workflow sont spécifiques à mes représentations internes des sujets d'examens et/ou à mon environment.
L'utilisation de ce système nécessite une familiarité avec python et
la ligne de commande unix ; cette familiarité n'est probablement pas
suffisante en l'état, mais en théorie il devrait être possible de le
faire tourner sur le dossier Example qui contient une copie
initiale, les fichiers correspondant au sujet de l'interro, et des
examples du rendu final (dans le sous dossier BGnot).
Cette situation s'améliorera peut-être, mais faciliter l'utilisation de ce système n'est pas une priorité.
Requirements
Python
Libraries :
pip install numpy pandas matplotlib pillow pydantic pypdf pdf2image reportlab img2pdf pymupdf ftfy ezodf google
Poppler (for pdf2image)
- Linux : install poppler-utils
- Windows : Download from: https://github.com/oschwartz10612/poppler-windows and add it to your PATH
Accès à Gemini
Il faut créer une clef API pour Gemini (pas facile).
NB : Lors de la création, google offre (offrait ?) 300€ d'utilisation, mais seulement pendant les trois mois à venir.
Puis ajouter GEMINI_API_KEY à l'environnement avec :
export GEMINI_API_KEY=…
Correction d'un paquet de copies
- Créer un fichier
namesdans le dossier courant, avec les noms/prénoms des élèves, un par ligne - Créer un dossier correspondant à l'évaluation, comme
Interro - Mettre les fichiers pdfs scannés dans
Interro. - Dans le dossier
Interrocréer un fichierlabelsavec les labels des questions, commeEx 1 : 1)a), un par ligne. - Il faudra créer des dossiers
Text,SoletPersp, et dans ces dossiers créer, pour chaque label (ou groupe de labels : par exemple un seul fichierEx 1peut être utilisé pour toutes les questions de l'exercice 1) un fichier texte qui contient respectivement l'énoncé, un corrigé, et des indications de comment corriger (Gemini met une note sur 4, on peut demander 2 points pour tel truc, etc) - Suivre les étapes plus bas.
Prétraitement
./rotate_all.sh Interro(facultatif) Retourne toutes les pdf de 180°./rename_to_copie.sh Interrochange le nom des copies enCopie{id}.pdf-
python page_splitter.py InterroDécoupe des copies A3 en pages A4, en retirant les pages vides.
- s pour garder les deux pages
- t/n pour garder celle de gauche/de droite
- r pour jeter les deux pages
Les key bindings ne sont pas adaptés à un clavier azerty… À changer…
Fix issues with
python page_splitter.py Interro14/Copie01.pdf python cutleft.py InterroDécoupe la partie gauche des copies, là où il devrait y avoir les labels des exercices/questions. Rerun on a single file withpython cutleft.py Interro/Copie01.pdf
Génération d'information sur l'énoncé
python enonce_info.py Interro(gestion perso)
OU
-
python gemini_for_enonce.py Interro- Nécessite
enonce.tex/orget `correction.tex/org`
- Nécessite
Labelisation et regroupement
Set proxy with export HTTPS_PROXY="http://10.0.0.1:3128"
python gemini_for_labels.py Interro, avec éventuellement--overwriteFait des requêtes à Gemini pour identifier les labels des questions dans images générées à partir des parties gauches des copies.-
python plotting.py InterroPermet de vérifier visuellement les labels trouvés.
- Sous linux, on peut faire
epour ouvrir le fichier .json et l'éditer a la main. - Quand un label est manquant, il est possible de cliquer sur l'image, ce qui copie les coordonnées dans le presse papier (sous linux…), puis on peut l'ajouter à la main.
- Utilisation de `_`, `|…` et `…|`
Pour modifier une seule copie :
python plotting.py Interro/Copie01.pdfIt also generates les
Copie01.json, à partir desCopie01_01.json - Sous linux, on peut faire
-
En cas de soucis, (par exemple les pages ne sont pas dans le bon ordre)
- Réordonner les pages du fichier pdf
- Rerun
python cutleft.py Interro/Copie{id} - Rerun
python gemini_dir_batching.py Interro/Copie{id}?? À vérifier, pas sûr que ça marche.
python splitting_int.py InterroDécoupe les copies suivant les exercicespython grouping.py InterroRegroupe les mêmes questions de différentes copies en groupes de tailles raisonnables.
Correction et annotation
Set proxy with export HTTPS_PROXY="http://10.0.0.1:3128"
- Il faut créer des persp, pour indication de comment corriger, et
relancer
enonce_info.py -
python correction.py Interro --limit 240OUpython correction.py Interro/Ex\ 2/Group_1.jpgOUpython correction.py Interro --overwriteFais les requêtes de correction à Gemini.
L'argument
limitlimite le nombre de requêtes à Gemini Pro (chères), pour une version low cost, passer--limit 0, toutes les requêtes seront sur Gemini Flash.Will it resume ? It seems so. Best to wait a bit.
Pour diminuer le coût, il est possible de batch les requêtes, qui seront alors traitées sous au plus 24h.
python correction.py Interro --batchpython submit_batches.py Interropython batch_status.pypython fetch_batched_results.py Interropython correction.py Interro --deal-with-batched
python post-correction.py InterroEssaye de corriger des erreurs d'encodage/d'accents danscorrection.json.
Génération des copies annotées
python annotating.py Interro(facultatif) Ajoute les annotations Gemini aux copies, enregistrées dans le dossierAnot. On peut passer l'argument--overwrite.python annotating_with_checks.py InterroAjoute les annotations Gemini, et des checkboxes à cocher. Enregistrées dans le dossierBnot,--overwrite
OU
python annotating_by_label.py InterrodansBGnotAjoute les annotations Gemini, et des checkboxes, et regroupe les réponses par question. Enregistrées dansBGnotNeeds : label_groups file (made automatically by this function), qui dit quelles questions regrouper.
-
python to_tablette.py Interro(gestion perso) Cela déplace les groupes dansSyncCopies/À Annoter.- Les mettre dans le dossier racine de la tablette, et renommer en
aaa. - Vider
Syncthing/Annotéessur la tablette et localement. À automatiser, aussi c'est lent…
- Les mettre dans le dossier racine de la tablette, et renommer en
Lecture de la correction manuscrite
python from_tablette.py Interro(gestion perso) Before : delete~/SyncCopies/Annotées, copy or sync from the tablette to here.
Une fois les corrections manuelles appliquées aux fichiers
Concat.pdf, il faut enregistrer le fichier annoté au même endroit,
sous le nom Concat_annotated.pdf.
(À faire : universaliser to_tablette.py et from_tablette.py)
python reading_annotations.py InterroLit lesConcat_annotateddansBnot, regénère les copies avec les modifications.
OU
python reading_grouped_annotations.py InterroIdem, mais pourBGnot.-
python giving_names.py Interro BGnotCrée un dossier
A Rendreavec des liens symboliques vers- La copie à rendre
- un fichier
score.jsonqui contient les notes par question
Si un nom est
Unknown: renommer à la main le dossier et le fichier dedans.On peut faire des changements manuels aux
score.jsonici. -
(gestion perso)
gestion_classe nepour créer l'interro puisgestion_classe we(set barème here)python update_ods.py Interrogestion_classe regestion_classe wsentpython add_final_score.py Interro21(this makes files inServer/copies)
-
(gestion perso)
- Deploy
miqmacs-copies-assets, and - update the copies from
miqmacs.fr/admin.
- Deploy
- (gestion perso) Impression d'une copie. Via Evince » print to pdf.
Recorrection d'une seule copie (peu testé)
!! Attention, refaire ne marchera pas si tu fais une annotation non groupée into refaire !!
-
Redécoupage
python plotting.py InterroTest/Copie01.pdfpython splitting_int.py InterroTest/Copie20.pdf
-
Créer
refaire.json, avec un contenu comme[["Copie01", []], ["Copie01", ["Ex 1 : 1)"]]]
- Appeler
correctionavec –refaire. Il doit créer des groupes individuels, faire des requêtes, et remplacer les corrections précédentes (à sauver ailleurs). Ou non, si tu veux le faire à la main. - ?? Si je fais refaire, avant d'avoir créer les annotating with checks, que se passe-t-il ???
- Appeler
annotating_with_checks.py --refaire --overwriteavec –refaire. python to_tablette.py --refaire Interro24python from_tablette.py --refaire Interro24python reading_grouped_annotations.py --refaire Interro24