OCRisation automatique de PDFs
(Memo d’une opération faite dans une école en 2021 – Aujourd’hui je déploirais un Stirling PDF)
L’hôte OCR a pour objectif d’OCRiser automatiquement les documents des profs, pour les élèves qui ont des besoins spécifiques (liseuses audio, outils pour les dys,…)
Pour ce faire, un share a été créé sur le NAS (\\<hostname_du_syno>\scan), avec 3 sous-dossier (EN/FR/NL) pour s’adapter aux différentes langues dans lesquelles les fichiers pourraient être rédigés.
Dans chacun de ces dossiers, des sous-dossiers EN_COURS et FINI sont créés.
Les scanners sont réglés avec des raccourcis pour scanner directement dans les dossiers racines de chaque langue.
Le share est monté via le Proxmox, qui a un fichier /etc/systemd/system/scan.mount avec le contenu suivant:
[Unit]
Description=Montage SMB/CIFS Scan sur syno
Requires=network-online.target
After=network-online.service
[Mount]
What=//<hostname_du_syno>/scan
Where=/scan Options=user=<user-du-share>,pass=<mots-de-passe-du-share>,rw,vers=2.0,uid=100000,gid=100000
Type=cifs[Install]
WantedBy=multi-user.target
Ce même montage est ‘monté’ (bindé en vrai) dans le container LXC via l’option suivante dans /etc/pve/lxc/103.conf
mp1: /scan,mp=scan
Ensuite, ocrmypdf (https://github.com/jbarlow83/OCRmyPDF/) a été installé sur le container via apt install, ainsi que tesseract-ocr-fra tesseract-ocr-nld tesseract-ocr-eng et tesseract-ocr.
Enfin, un timer systemd a été créé pour chaque langue afin de vérifier régulièrement l’existence d’un nouveau fichier et d’éventuellement lancer son traitement.
Exemple pour le français:
/etc/systemd/system/scans.fr.timer
[Unit]Description=OCRise les scans toutes les 30 secondes
[Timer]
OnBootSec=60
OnUnitActiveSec=30
Unit=scans.fr.service
[Install]
WantedBy=timers.target
/etc/systemd/system/scans.fr.service
[Unit]
Description=OCRise les scans
[Service]
Type=simple
ExecStart=/root/cron-OCR-FR.sh
[Install]
WantedBy=multi-user.target
/root/cron-OCR-FR.sh
#!/bin/bash
#Source: https://github.com/fritz-hh/OCRmyPDF/issues/90
#Je fais vite le move pour éviter la concurrence avec le job suivant
if [ -f /scan/FR/lock ]
then
echo "y'a un lock"
exit
else
touch /scan/FR/lock
fi
nbfichiers=$(find /scan/FR/ -maxdepth 1 -name "*.pdf" | wc -l)
if [ $nbfichiers -gt 0 ]
then
for pdf in /scan/FR/*.pdf; do
echo "On s'occupe de $pdf"
cp $pdf /scan/FR/EN_COURS
nom=$(basename "$pdf")
echo "Son nom est $pdf"
extension="_ocr.pdf"
echo "Son extension est $extension"
output=/scan/FR/FINI/
path=$output$nom$extension
echo "Son path est $path"
/usr/bin/ocrmypdf -l fra $pdf $path -v;
rm $pdf
done
fi
rm /scan/FR/lock
Faut pas oublier de enable tous les services et timers (dans Proxmox et dans l’hôte).movemove