Cipher Bliss

Mot-clé - imagemagick

Fil des billets - Fil des commentaires

mercredi 11 mai 2016

Conversion de pdf en image et OCR

imagemagick permet de convertir des tas de fichiers en des tas d'autres. Il est fourni de base dans pas mal de distributions linux. convertir un pdf en un jpg par page de 300dpi c'est aussi simple que ceci: (dans un terminal, dans le dossier de votre fichier pdf, par exemple, mon dossier de Téléchargements)

convert -density 300 -quality 100 monFichierPDF.pdf mesFichiersJpg.jpg

et boum! aussitôt plopent dans le même dossier des jpg mesFichiersJpg (1).jpg pour chaque page.

 Trop magique. l'option -density 300 donne une résolution de 300dpi. l'option -quality 100 compresse la sortie au meilleur de sa qualité.

il faut nommer le fichier d'entrée et celui de sortie, j'aurai pu marquer mesFichiersJpg.png ça aurait fait des vrais png, mais ça supporte aussi des tas d'autres formats.

vous pouvez vous en faire un alias dans votre fichier ~/.bash_aliases

alias pdf2jpg='convert -density 300 -trim -quality 100'; 

ainsi vous pourrez lancer:

 pdf2jpg monpdf.pdf mesJpgs.jpg 

Et paf, ça fait des images de jolie qualité.

Le cube qui sait lire

Et donc voilà, il arrive aussi qu'on vous file un pdf contenant un contrat ou un texte (avec ou sans images) qui serait bien plus efficace en format texte pour y faire des recherches par exemple. vous avez bien entendu autre chose à faire de votre vie que de recopier tout le texte. aint nobody got time for that.

Il convient donc d'utiliser un soft qui sait faire de l'Optical Character Recognition, de la reconnaissance de caractères optiques.

Le Tesseract, ce n'est pas un cube produisant une énergie infinie au pays d'Iron Man, c'est un soft capable de lire des caractères dans une image et de pondre un texte en conséquence. Bien sûr il faut relire le texte ensuite pour corriger quelques typos, mais il fait déjà un boulot impressionnant. installez le avec son extension pour le français avec apt-get: 

sudo apt-get install tesseract tesseract-ocr-fra 

Une fois que c'est fait revenons à nos animaux laineux. Vous avez donc plein de fichiers jpg dans un dossier. Dans un terminal, mettez vous dans le dossier en question.

 Nous allons donc faire une boucle sur tous les fichiers du dossier courant se terminant par jpg, les lire et en ressortir dans un fichier page_truc.txt pour chaque image.

a=0;
for i in $(ls -v *.jpg) ;
     do echo "$i page_${a}.txt" ; # on affiche ce qu'on fait
     tesseract $i page_${a}.txt ;
     let a=a+1 ;
done

l'option -l fra sert à dire qu'on traite un texte en français
et maintenant on concatène les sorties de chaque image en un seul fichier

cat page_* > all_pages.txt

astuce trouvée sur la doc ubuntu enjoy!

vendredi 23 mai 2014

Redimension d'image en ligne de commande avec imagemagick

Rincewind
imagemagick permet de faire plein de manipulations sur les images, redimension, conversion, assemblage, c'est magique.

J'ai régulièrement besoin de redimensionner des images pour les présenter sur mes sites. mogrify est très utile pour la redimension de masse. cette commande permet de faire des copies redimensionnées en 800px de large sur 600 px de haut, de tous les fichiers jpg du dossier courant vers autre_repertoire.

mogrify -resize 800x600 -path autre_repertoire *.jpg

il faut juste vous assurer que "autre_repertoire" est inscriptible par votre script, et que vous avez bien des fichiers jpg à redimensionner dans votre répertoire courant.

Vous pouvez aussi choisir de ne faire des sorties d'images dans un seul format précis (jpg, ou png ...), avec l'option format.

mogrify -resize 800x600 -path autre_repertoire -format jpg *.jpg


En bonus, pour ouvrir un terminal à partir de votre explorateur de fichier, si vous êtes sous KDE vous pouvez faire F4, autrement avec nautilus vous pouvez installer nautilus-open-terminal

sudo apt-get install nautilus-open-terminal

voilà, bon amusement!


de la doc pour imagemagick 

http://doc.ubuntu-fr.org/imagemagick

(en illustration, Rincevent du Disque Monde, de la lecture parodique fantastique qui poutre)