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