Je voulais appliquer l'OCR au fichier PDF sur la ligne de commande, j'ai donc écrit un script bash pour l'OCR avec le nom de fichier ocrize.
Si vous utilisez ocrize, veuillez exécuter la commande suivante à l'avance pour installer les packages requis.
$ sudo apt install tesseract-ocr-jpn imagemagick
#Tesseract va multiplier les PDF japonais verticaux par OCR-ocr-jpn-Besoin de vert.
Exécutez ocrize comme suit (rendez-le exécutable avec chmod à l'avance).
$ ./ocrize input.pdf
# or
$ ocrize input.pdf #Par exemple/usr/local/Lorsque ocrize est placé dans un endroit où passe le chemin, tel que bin.
La procédure d'application de l'OCR au fichier PDF input.pdf sur la ligne de commande est expliquée ci-dessous.
Avant d'appliquer l'OCR à input.pdf, stockez le nom de fichier dans une variable et créez un répertoire de stockage principal.
$ stem="input" #Nom de fichier sans extension.
$ dir="${file}.temp"
$ mkdir ${dir} # input.Un répertoire temporaire est créé.
Utilisez la commande convert d'ImageMagick pour diviser input.pdf en fichiers image.
$ convert -density 300 -geometry 1000 ${stem}.pdf ${dir}/${stem}.png
Plus la valeur de l'option -density
est élevée, meilleure est la qualité de l'image, mais si vous spécifiez une valeur plus grande, vous devez changer la ressource d'ImageMagick.
Lorsque la commande ci-dessus est exécutée, le fichier dans lequel input.pdf est divisé en pages et converti en PNG est sorti sous le répertoire input.temp comme indiqué ci-dessous.
$ ls ${dir}
input-0.png input-1.png input-2.png input-3.png
Si vous obtenez l'erreur suivante avec la commande convert
, modifiez le policy.xml d'ImageMagick (dans mon environnement, policy.xml était directement sous / etc / ImageMagick-6).
Error.1 convert: not authorized
Modifions le droit de la balise de stratégie dont le domaine est codeur et le modèle est PDF comme suit afin que le PDF puisse être lu et écrit.
<policy domain="coder" rights="read|write" pattern="PDF" />
Error.2 convert-im6.q16: cache resources exhausted
Nous sommes à court de mémoire, corrigeons donc la balise de stratégie avec la ressource de domaine. Dans mon cas, j'ai corrigé l'endroit où le nom est la mémoire et le disque.
<policy domain="resource" name="memory" value="1GiB"/>
<policy domain="resource" name="disk" value="2GiB"/>
Vous pouvez vérifier la ressource avec la commande suivante.
$ identify -list resource
# or
$ identify -list Resource
L'OCR est appliqué à chaque fichier image sous le répertoire input.temp.
$ N=$(ls ${dir} | grep -c '' | awk '{printf "%d", $1-1}')
$ for n in $(seq 0 ${N}); do tesseract -l jpn+eng ${dir}/${stem}-${n}.png ${dir}/${stem}-${n} pdf; done
La langue de reconnaissance est spécifiée par l'option «-l». Si vous voulez d'abord reconnaître en japonais puis en anglais, spécifiez jpn + eng
.
Utilisez la commande pdfunite
pour combiner plusieurs fichiers PDF en un seul.
$ pdfunite $(for n in $(seq 0 ${N}); do echo ${dir}/${stem}-${n}.pdf; done) ocrized-${stem}.pdf
Les fichiers PDF sont sortis dans l'ordre des pages avec «for» afin que l'ordre des pages ne soit pas interrompu. Après exécution, ocrized-input.pdf, qui est input.pdf multiplié par OCR, sera créé directement sous le répertoire courant.
Enfin, supprimez le répertoire input.temp et vous avez terminé!
$ rm -r ${dir}
ocrize
Ce qui suit est un script bash qui résume le contenu ci-dessus. Enregistrez-le sous le nom de fichier ʻocrize` et utilisez-le.
#! /bin/bash
if [ $# -eq 1 ]; then
file=$1
ext=$(echo ${file} | rev | cut -d '.' -f 1 | rev)
dir=${file}.temp
if [ -d ${dir} ]; then
echo "${dir} allready exists. Please remove this directory."
exit 1
fi
if [ ${ext} = "pdf" -o ${ext} = "PDF" ]; then
if [ ! -f ${file} ]; then
echo "${file} dose not exist."
exit 1
fi
stem=$(echo ${file} | rev | cut -c 5- | rev)
mkdir ${dir}
echo "1: Converting PDF to PNG."
convert -density 300 -geometry 1000 ${file} ${dir}/${stem}.png
echo "1: Finished."
N=$(ls ${dir} | grep -c '' | awk '{printf "%d", $1-1}')
echo "2: OCRizing."
for n in $(seq 0 ${N}); do
p=$(echo "${n} ${N}" | awk '{printf "%5.1f", ($1+1)/($2+1)*100}')
echo -ne "Progress: [${p} %]\r"
tesseract -l jpn+eng ${dir}/${stem}-${n}.png ${dir}/${stem}-${n} pdf >& /dev/null
rm ${dir}/${stem}-${n}.png
done
echo "2: Finished. "
echo "3: Merging PDF files."
#pdftk $(for n in $(seq 0 ${N}); do echo ${dir}/${stem}-${n}.pdf; done) output ocrized-${pdffile}
pdfunite $(for n in $(seq 0 ${N}); do echo ${dir}/${stem}-${n}.pdf; done) ocrized-${file}
echo "3: Finished."
rm -r ${dir}
else
echo "Extension must be pdf or PDF."
exit 1
fi
else
echo "Usage: $ ocrize input.pdf"
exit 1
fi
Lorsque vous exécutez ʻocrize`, le script s'exécute comme suit.
$ ./ocrize input.pdf
1: Converting PDF to PNG.
convert-im6.q16: profile 'icc': 'RGB ': RGB color space not permitted on grayscale PNG `input.pdf.temp/input.png' @ warning/png.c/MagickPNGWarningHandler/1654.
1: Finished.
2: OCRizing.
Progress: [ 84.4 %]
Quelques secondes plus tard,
1: Converting PDF to PNG.
convert-im6.q16: profile 'icc': 'RGB ': RGB color space not permitted on grayscale PNG `input.pdf.temp/input.png' @ warning/png.c/MagickPNGWarningHandler/1654.
1: Finished.
2: OCRizing.
2: Finished.
3: Merging PDF files.
3: Finished.
Recommended Posts