Scanner un album photo avec un script à partir de la ligne de commande

Il y a clairement plusieurs interfaces graphiques pour numériser des photos, qui offrent de nombreuses options. Mais lorsque le nombre de photos à numériser est important et que nous n'avons pas de scanner doté d'un bac d'alimentation automatique, les choses se compliquent. En général il faut faire un clic pour scanner, un autre clic peut-être à l'autre bout de la fenêtre pour enregistrer ... cela prend du temps. Quoi qu'il en soit, une bonne excuse pour utiliser le Ligne de commande.

C'est une contribution de Rubén, devenant ainsi l'un des gagnants de notre concours hebdomadaire: «Partagez ce que vous savez sur Linux«. Félicitations Rubén!

J'ai lu les articles sur Traitement d'images par lots avec GIMP y Comment manipuler les images depuis le terminal, juste le jour où mon ami Huguito m'a demandé les photos (qu'il avait perdues) d'un voyage que nous avons fait en 1989… (4 rouleaux de 36 photos! et sur papier, bien sûr 🙂. Cela m'a rappelé cette astuce pour scanner des photographies que j'avais oubliées.

L'idée est d'utiliser un script pour le faire le plus vite possible:

1.- Mettez une photo sur le scanner
2.- Appuyez sur n'importe quelle touche pour scanner
3.- Répéter la procédure, sauf si la touche enfoncée est par exemple un 'n' pour quitter
4.- Les photos seront enregistrées et numérotées dans un sous-répertoire préétabli.

Quelle commande?

La commande 'magic' est scanimage qui fait partie de SANE. SANE est une API qui fournit un accès standardisé à n'importe quel périphérique d'imagerie. L'API Sane est dans le domaine public et son code source est disponible sous la licence publique générale GNU.

L'installation est simple. Chaque distribution apporte ses packages. Pour Ubuntu (ou ses dérivés), il suffit d'utiliser synaptic et d'installer sane et sane-utils.

Comment ça s'utilise ?

Comment toujours le mieux est d'écrire dans un terminal 'man scanimage'. Cependant, nous résumerons les options que nous utiliserons.

Nous ouvrons un terminal et exécutons scanimage -L pour voir les appareils disponibles:

image numérisée -L

Dans mon cas, il renvoie:

périphérique `xerox_mfp: libusb: 001: 005 'est un périphérique multifonction SAMSUNG ORION

C'est le résultat qu'il m'a donné avec mon multifonction Samsung SCX-4200. Si vous disposez d'un tout-en-un et que vous ne trouvez pas le périphérique, assurez-vous que l'imprimante n'est pas active, par exemple avec une impression en attente.

La valeur 'xerox_mfp: libusb: 001: 003' est utilisée pour indiquer à la commande scanimage quel périphérique utiliser via l'option -d. Si un seul scanner est connecté, cette option n'est pas nécessaire.

Lorsque la commande scanimage scanne, elle envoie l'image résultante vers la sortie standard au format pnm ou tiff. Donc, pour scanner, nous redirigeons la sortie vers un fichier. Et si nous voulons voir quels messages la commande donne, nous ajoutons l'option -v. Si nous voulons également voir le pourcentage de progression de l'opération, nous ajoutons l'option -p.

scanimage -v -p> image.tiff

scanimage: image de numérisation de taille 1284x1734 pixels à 24 bits / pixel
scanimage: acquisition d'une image RVB
scanimage: valeur de niveau de gris min / max = 69/255
scanimage: lit 6679368 octets au total
Progression: 13.8%

Que nous donnera-t-il si nous scanimage –help? Cela semble évident, cela donne une aide sur la commande. Mais cette commande a une particularité. À la fin de l'aide générique de la commande, ajoutez les paramètres spécifiques acceptés par votre scanner.

scanimage - aide

Utilisation: scanimage [OPTION] ...

bla bla....

Options spécifiques au périphérique `xerox_mfp: libusb: 001: 005 ':

la norme:
--resolution 75 | 100 | 150 | 200 | 300 | 600dpi [150] Définit la résolution de l'image numérisée.
--mode Lineart | Demi-teinte | Gris | Couleur [Couleur] Sélectionne le mode de numérisation (par exemple, linéaire, monochrome ou couleur).
--highlight 30..70% (par incréments de 10) [inactif] Sélectionnez la luminosité minimale pour obtenir un point blanc
--source Flatbed | ADF | Auto [Flatbed] Sélectionne la source de numérisation (comme un chargeur de documents).
géométrie:
-l 0..215.9 mm (par incréments de 1) [0] Position x supérieure gauche de la zone de numérisation.
-t 0..297.18mm (par incréments de 1) [0] En haut à gauche et position de la zone de numérisation.
-x 0..215.9 mm (par incréments de 1) [215.9] Largeur de la zone de numérisation.
-y 0..297.18mm (par pas de 1) [297.18] Hauteur de la zone de balayage.

Tapez `` scanimage --help -d DEVICE '' pour obtenir la liste de toutes les options pour DEVICE.

Liste des appareils disponibles:

xerox_mfp: libusb: 001: 005

De là, nous pouvons choisir les options avec les valeurs que nous pouvons utiliser.

exemple:

Résolution

–Résolution 150

Mode

–Couleur du mode

Maintenant la géométrie. Ceci est très utile car nous pouvons dire au scanner de n'extraire que l'image d'un secteur (où nous mettrons la photo), et nous économisons le temps de numériser le reste de la surface que nous devrions également couper plus tard avec un éditeur graphique tel comme Gimp.

-l 0 démarre la numérisation horizontalement à partir de 0 mm du coin supérieur gauche du scanner

-t 0 commence la numérisation verticalement à partir de 0 mm du coin supérieur gauche du scanner

Notez que j'ai choisi de mettre la photo dans le coin du scanner [coordonnées (0,0)], car elle est plus facile à placer. Sur mon scanner (format A4) je peux passer de 0 à 215.9 et t de 0 à 297.18.

Largeur et hauteur de la photographie. Dans mon cas, les photos sont 13x18cm:

-x 180 de large

-et 130 de haut

Par conséquent, il ne numérisera que la partie où nous avons mis notre photo. Bien sûr, si on s'entend sur ce que sont la gauche, la droite, la largeur, la hauteur, le haut et le bas. Cela dépendra de la façon dont vous regardez votre scanner. Je suggère de tester les coordonnées et de les ajuster à vos besoins.

Un exemple de la commande pourrait être:

scanimage -d xerox_mfp: libusb: 001: 003 -p --mode Couleur --resolution 150 -l 0 -t 0 -x 180 -y 130> image.pnm

Avec ces options, nous pourrions déjà construire notre script.

Mais avant…

Tiff ou pnm sont des formats non compressés, donc nos photos occuperont un espace disque énorme. C'est là qu'intervient la commande de conversion ImageMagick qui est expliquée dans Comment manipuler des images depuis le terminal.

Si nous obtenons un image.pnm du scanner, nous pouvons le convertir en jpg:

convertir image.pnm image.jpg

Mais avant de le faire, une autre astuce:

Image.pnm prend beaucoup de place et nous devons le supprimer après avoir récupéré notre image.jpg. Il existe une option pour la commande de conversion afin qu'au lieu de prendre un fichier du disque, elle convertisse directement l'entrée standard. Ceci est accompli avec un tiret - au lieu du fichier:

convertir - image.jpg

Puisque scanimage fournit l'image numérisée à la sortie standard, nous créons un «pipeline» et économisons le temps de traitement nécessaire pour écrire, puis supprimons le fichier image.pnm du disque.

scanimage -d xerox_mfp: libusb: 001: 003 -p --mode Couleur --résolution 150 -l 0 -t 0 -x 180 -y 130 | convertir - image.jpg

Maintenant oui, le script ...

Nous écrivons le code suivant dans un fichier que nous appellerons scan-album.sh et nous lui donnons l'autorisation d'exécution. Lorsque nous l'exécutons, il créera un sous-répertoire où seront nos photos numérisées. N'oubliez pas de modifier les valeurs des paramètres selon vos besoins.

Assurez-vous de lire quelques suggestions après le script.

#! / Bin / bash
# Données pour les options

VERBOSE = "" # voir message d'état: "" n'est pas; "-v" est oui
PROGRESS = "- p" # show progress "" est non; "-p" est oui

# Les paramètres suivants sont donnés par scanimage --help pour votre scanner
#Device: S'il n'y a qu'un seul scanner, ce n'est pas nécessaire, mettez DEV = ""
# DEV = "xerox_mfp: libusb: 001: 003"

DEV = ""
MODE = "- mode Couleur"
RESOLUTION = "- résolution 600 dpi"

#geometry, par exemple photo 130x180 mm
#location dans le scanner de vertex supérieur gauche

x0 = 0
y0 = 0
largeur = 180
haut = 130

#options:

L = "- l $ x0"
T = "- t $ y0"
WIDTH = "- x $ largeur"
HIGH = "- et $ high"

# tous les paramètres ensemble:

PARAMETERS = "$ DEV $ VERBOSE $ PROGRESS $ MODE $ RESOLUTION $ L $ T $ WIDTH $ HIGH"

# Nom de l'album. Créez un sous-répertoire avec votre nom:

ALBUM = "Vacances_1989"

# Par sécurité, je ne fais rien si le répertoire existe déjà

mkdir $ ALBUM

si ["$?" = "1"]; puis
sortie 100
fi

# Nom de base des photos (dans le sous-répertoire)

FICHIER = "./" $ ALBUM "/" $ ALBUM "_foto_"

fonction question () {
chassèrent "----------------------------------------------- - ------------------------- "
echo
chassèrent "******************************"
echo "Nombre de photos numérisées:" "$ I"
chassèrent "******************************"
echo -e "Appuyez sur: n * n pour quitter * Une autre touche à scanner."
echo
read -s -n1 -p "Scanner une nouvelle photo?" appuyez sur la touche
echo
}

############################################

# Début

############################################

I = 0

pregunta

while ["$ keypress"! = "n"]; faire
# nouvelle photo à numériser
laissez "I + = 1"
NOM = $ FILE $ I
scanimage $ PARAMETERS | convertir - $ NAME.jpg
pregunta
fait

Suggestions

L'utilisation de résolutions élevées comme celles de l'exemple rend l'analyse beaucoup plus lente.

Gardez à l'esprit que si vous souhaitez imprimer une photo sur papier, vous avez besoin d'environ 250 points par pouce. Si l'idée de numériser les photos est de les imprimer au même format que l'original, une résolution de 250 suffit. Les voir sur un écran de 100 suffit. Une résolution plus élevée servirait pour un grossissement.

Il est conseillé de préparer la pile de photos à l'avance afin que chaque photo soit à droite. De cette façon, vous ne perdrez pas de temps à le mettre dans le scanner afin qu'ils ne soient pas tournés à 180 °.

Lors du calibrage des mesures des paramètres géométriques, il est conseillé d'observer dans quelle position placer l'original, afin que les images numériques ne soient pas "à l'envers". Dans mon cas, la partie inférieure de la photo suit l'axe «l».

Si vous n'avez qu'un seul scanner connecté, n'hésitez pas à ne pas utiliser l'option -d. Dans le script, c'est DEV = »»

Parfois, les nombres dans "xerox_mfp: libusb: 001: 003" changent et vous devrez le modifier à chaque fois que vous utilisez le script.

Faites attention aux tirets et aux guillemets lors de la copie du script. Les traits d'union (le signe moins) peuvent être un ou deux ensemble selon l'option; les guillemets sont le double du clavier, ce ne sont pas ceux que certains traitements de texte comme LibreOffice mettent.

Par sécurité, le script ne crée pas le répertoire s'il existe déjà, afin de ne pas écraser les fichiers s'il y en a. Dans ce cas, il s'arrête.

Si l'album photo est ancien, ne regrettez pas si les images abondent en cheveux, rides ou kilos manquent: -


Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont marqués avec *

*

*

  1. Responsable des données: Miguel Ángel Gatón
  2. Finalité des données: Contrôle du SPAM, gestion des commentaires.
  3. Légitimation: votre consentement
  4. Communication des données: Les données ne seront pas communiquées à des tiers sauf obligation légale.
  5. Stockage des données: base de données hébergée par Occentus Networks (EU)
  6. Droits: à tout moment, vous pouvez limiter, récupérer et supprimer vos informations.

  1.   Calderon Juniors dit

    Hou la la! Quel bon tuto!
    Je ne pensais pas que tant de choses pouvaient être faites avec le bash xD
    Chaque jour, vous en apprenez plus!
    Merci pour la contribution!
    Je n'ai pas de scanner mais si j'en ai un, je l'essayerai immédiatement 🙂

  2.   Péquenaud dit

    À quel point cette contribution m'aidera beaucoup dans la numérisation de mes notes, j'espère qu'elle s'améliorera, je pense à une fonction pour scanner un fichier complet et détecter la taille de l'objet scanné, comme nous dépendons de la magie de être converti en djvu ou pdf et ainsi créer un seul fichier. Eh bien, j'étais juste en train de divaguer. Merci beaucoup pour votre contribution.

  3.   aimer dit

    Quel grand plaisir, merci beaucoup pour le partage.