Archives de catégorie : logiciels libres

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 lancer cette commande:
(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.

Option de sécurité d’ImageMagick

Il est possible que vous ayez une version d’ImageMagick avec des restrictions de conversion qui ont été mises en place pour des raisons de sécurité à une époque où GhostScript avait un problème, corrigé depuis. Si la commande convert ne veut pas convertir votre pdf, regardez dans la config du fichier de police:

sudo editor /etc/ImageMagick-7/policy.xml

(le dossier peut se nommer ImageMagick-6 ou autre selon votre version), et changez la ligne concernant les pdf:

<policy domain="coder" rights="none" pattern="PDF" />

En ceci:

<policy domain="coder" rights="read | write" pattern="PDF" />

Relancez votre terminal et ça devrait bien vouloir convertir votre pdf en jpg.

Une commande en alias de bash

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 machin.pdf machin.jpg

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

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-ocr 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

Et vous pourrez maintenant avoir un texte sur lequel vous pouvez faire une recherche intégrale avec votre éditeur de texte préféré, à la recherche de l’arnaque contractuelle qui va bien.

Astuce de l’OCR trouvée sur la doc ubuntu
Enjoy!

Si vous aimez ce que nous faisons à Cipher Bliss, vous pouvez nous soutenir de plusieurs façons: en faisant un micro don sur liberapay , ou en cryptomonnaies. Le plus simple nous pour nous faire connaître étant de partager cet article.
Suivez moi sur Mastodon @tykayn@mastodon.cipherbliss.com.
Ce site restera libre comme un gnou dans la nature et sans pubs, parce qu'on vous aime. Que la source soit avec vous!

les couleurs de la RATP dans SASS

si vous avez dans l’idée de faire un petit projet web incluant les couleurs des lignes de métro / RER / Tram parisien, voici les codes couleurs choppées à coup de pipette (on peut aussi trouver ces codes hexadécimaux sur wikipedia).
Vous pouvez les utiliser dans votre css avec ces variables faites pour le language de preprocessing SASS.

Vous pouvez voir ce que donnent les compilations sass en ligne et vous exercer sur sassmeister.com

 

ensuite il vous faudra des classes pour appliquer ces couleurs sur vos lignes.

/** metros**/
.metro_1 {
background: $metro_1 !important;
}
.metro_2 {
background: $metro_2;
}
.metro_3 {
background: $metro_3;
}
.metro_3BIS {
background: $metro_3BIS;
}
.metro_4 {
background: $metro_4;
}
.metro_5 {
background: $metro_5;
}
.metro_6 {
background: $metro_6;
}
.metro_7 {
background: $metro_7;
}
.metro_7BIS {
background: $metro_7BIS;
}
.metro_8 {
background: $metro_8;
}
.metro_9 {
background: $metro_9;
}
.metro_10 {
background: $metro_10;
}
.metro_11 {
background: $metro_11;
}
.metro_12 {
background: $metro_12;
}
.metro_13 {
background: $metro_13;
}
.metro_13BIS {
background: $metro_13;
}
.metro_14 {
background: $metro_14;
}
/** trams **/
.tram_1 {
color: $tram_1;
border: solid 3px $tram_1;
}
.tram_2 {
color: $tram_2;
border-color: $tram_2;
}
.tram_3 {
color: $tram_3;
border-color: $tram_3;
}
.tram_4 {
color: $tram_4;
border-color: $tram_4;
}
.tram_5 {
color: $tram_5;
border-color: $tram_5;
}
.tram_6 {
color: $tram_6;
border-color: $tram_6;
}
.tram_7 {
color: $tram_7;
border-color: $tram_7;
}
.tram_8 {
color: $tram_8;
border-color: $tram_8;
}


Et si vous voulez personnaliser tout ça dans un mixin pour choisir que colorer avec vos variables, c’i possible!

Admettons que, comme ci dessus l’on veuille une classe pour chaque ligne afin de colorer une bordure.

Pour ça on va utiliser des tableaux associatifs(clé: valeur), sta dire des maps,
et des tableaux non associatifs, des listes (élément1, élément2).
On définit une map de famille de transport (métro, tram, rer), puis une couleur pour chaque ligne.
Puis on définit notre @mixin qui fait une classe avec bordure correspondante.
grâce à l’interpolation de variable on peut faire des noms de classe css (et d’autres choses) dynamiques.
exemple:
$name: foo;
$attr: border;
p.#{$name} {
#{$attr}-color: blue;
}
Allez donc voir les quelques fonctions existantes sur les maps. Ici on se servira uniquement de celle qui retourne la valeur pour une clé donnée.
Avec @each on va parcourir notre map et créer des classes en conséquence avec notre mixin, appelé par la directive @include.
Ensuite si on veut que nos classes soient différentes pour les métros et les trams on a plus qu’a faire un autre mixin, et voilà!


// variables de couleurs
$metro_1: ;
$metro_2: ;
$metro_3: ;
$metro_3BIS: ;
$metro_4: ;
$metro_5: ;
$metro_6: ;
$metro_7: ;
$metro_7BIS: ;
$metro_8: ;
$metro_9: ;
$metro_10: ;
$metro_11: ;
$metro_12: ;
$metro_13: ;
$metro_14: #612684;
$tram_1: ;
$tram_2: ;
$tram_3: ;
$tram_3a: ;
$tram_3b: ;
$tram_4: ;
$tram_5: ;
$tram_6: ;
$tram_7: ;
$tram_8: #999738;
$rer_a: ;
$rer_b: ;
// maps de couleurs
$metro_colors: (
'1' : $metro_1,
'2': $metro_2,
'3':$metro_3,
// etc
);
$tram_colors: (
'1' : $tram_1,
'2': $tram_2,
// etc
);
$rer_colors: ('a' : $rer_a,
'b': $rer_b);
// map de famille
$sisi_la_famille: (
'metro' : $metro_colors,
'tram' : $tram_colors,
'rer' : $rer_colors,
);
// mettre une bordure à gauche selon la famille et le numéro de ligne
@mixin lineBorder($famille,$nom) {
$famille_map: map-get($sisi_la_famille, $famille);
.#{$famille}_#{$nom} {
border-left: 3px solid map-get($famille_map, $nom);
}
}
// faire un style différent pour les trams
@mixin tram($nom,$color) {
.tram_#{$nom} {
color: $color;
border-color: $color;
}
}
@warn "yeah";
// boucle-ception
@each $famille, $list in $sisi_la_famille {
@each $key, $val in $list {
// traitement différent pour les trams
@if ($famille == 'tram') {
@include tram($key, $val);
} @else {
@include lineBorder($famille, $key);
}
}
}

Enjoy!

Si vous aimez ce que nous faisons à Cipher Bliss, vous pouvez nous soutenir de plusieurs façons: en faisant un micro don sur liberapay , ou en cryptomonnaies. Le plus simple nous pour nous faire connaître étant de partager cet article.
Suivez moi sur Mastodon @tykayn@mastodon.cipherbliss.com.
Ce site restera libre comme un gnou dans la nature et sans pubs, parce qu'on vous aime. Que la source soit avec vous!

Navigo c’est pas toujours facile

ratp fail de navigo 2013 04 24 09.03.23
si on veut valider, y’a des fois on est vraiment pas aidés 😀

Si vous aimez ce que nous faisons à Cipher Bliss, vous pouvez nous soutenir de plusieurs façons: en faisant un micro don sur liberapay , ou en cryptomonnaies. Le plus simple nous pour nous faire connaître étant de partager cet article.
Suivez moi sur Mastodon @tykayn@mastodon.cipherbliss.com.
Ce site restera libre comme un gnou dans la nature et sans pubs, parce qu'on vous aime. Que la source soit avec vous!