Sane

Nombreux sont les périphériques qui ont connu une augmentation brutale de l'intérêt porté par les utilisateurs. Mais un périphérique arrive en tête : le scanner. Celui-ci est passé du stade d'une utilisation à 100% professionnel au stade d'accessoire banal et courant chez le particulier. Une norme s'est imposée dans le monde Wintel : TWAIN. Celle-ci permet de garantir qu'un scanner conforme à la norme fonctionnera avec n'importe quelle application TWAIN. Sous Linux, ce standard porte un autre nom : SANE.

 

SANE est un acronyme de Scanner Access Now Easy (Accès au scanner à présent facile). Cette abréviation est tout à fait justifiée par rapport à l'ancienne méthode d'accès aux scanners. Avant l'apparition de SANE, la personne qui désire faire fonctionner son scanner sous Linux devait s'attacher à une tâche bien rude. En premier lieu, elle devait choisir entre plusieurs packages proposant chacun une solution et une méthode de travail différente. Ceci, bien sûr, pour quasiment chaque marque et modèle de scanner. La diversité est souvent bénéfique, mais dans le cas présent, une norme était nécessaire. En second lieu, elle devait accommoder son environnement afin d'obtenir un ensemble homogène numérisation/retouche.

SANE a donc été créé pour permettre la mise en place de fonctions uniques pour tous les programmes de traitement d'images sous forme d'une API (Application Program Interface). Ceci permet à tous les programmeurs de créer des applications utilisant une méthode unique. De plus, comme SANE est universel, il sera inutile de créer autant d'applications que de pilotes de scanner. Le même programme fonctionnera avec tous les scanners supportés par SANE.

FONCTIONNEMENT DE SANE

L'API SANE se présente sous la forme d'une bibliothèque (library) appelée libsane.so. En réalité, libsane.so n'est qu'un lien symbolique (symlink) vers le pilote du scanner. Dans notre cas, il s'agit d'un scanner Mustek 12000SP et le fichier réel sera libsane-mustek.so.0.0.73.
Tous les fichiers pouvant être pointés par libsane.so exportent la même interface. En clair, quelque soit le fichier réel, un programme travaillera de la même manière. Le simple fait que libsane.soit un lien offre une dynamique très utile pour l'utilisateur. Il est possible à tout moment de changer le lien et ainsi de changer de scanner. Le problème posé par ce mode de fonctionnement apparaît dans le cas où vous possédez plusieurs scanners. A ce problème, SANE apporte une solution sous la forme de deux pseudo-pilotes : DLL et NET.
Il s'agit de pseudo-pilotes car ils ne dialoguent pas directement avec le scanner mais avec d'autres pilotes de SANE (voir schémas). Résultat, SANE est un partenaire de qualité si vous souhaitez accéder à un scanner distant. En effet, il est parfaitement possible de numériser via InterNet un document posé sur un scanner situé à des milliers de kilomètres de vous.

LE MAITRE DES SCANNERS : SCSI

A l'heure où nous écrivons ces lignes, seuls les scanners SCSI sont supportés par SANE. Il est donc impératif d'installer correctement son interface SCSI. Dans notre cas, notre scanner Mustek était livré avec une carte comportant une puce DTC. Cette carte est un contrôleur SCSI qui malheureusement ne sera jamais compatible Linux. En effet, pour connaître les spécifications de cette puce, il faut signer un accord de non-diffusion avec DTC. En clair, en sachant faire un pilote vous vous en interdisez la distribution, sinon vous êtes en désaccord avec DTC.
La solution la plus simple consiste donc à vous procurer une carte contrôleur SCSI supportée par Linux. Quasiment toutes les cartes du marché le sont actuellement. Nous avons utilisé une carte Tekram DC390 (ne voyez là aucune pub, on a pris ce qu'on avait). Profitons-en pour signaler à tous possesseurs d'une de ces cartes que vous trouverez un patch du kernel très utile sur le site ftp de tekram. Fermons là, la parenthèse.

UTILISATION DE SANE

Il est possible d'utiliser SANE de deux manières différentes : soit vous optez pour la solution "ligne de commande", soit pour celle de l'interface graphique.
Une fois que vous aurez téléchargé la dernière version de SANE  sur ftp://ftp.mostang.com/pub/sane, il faudra le compiler et l'installer. Vous obtiendrez, alors, quatre utilitaires importants :
find-scanner : Il vous permettra de savoir quel scanner est présent sur votre chaîne SCSI et surtout son nom de périphérique.
scan-image : Voici l'outil de numérisation principal (frontend) sur la ligne du shell. Nous en parlerons plus loin.
xcam : Il s'agit de l'utilitaire permettant de contrôler et de d'obtenir des images en provenance d'une Connectix QuickCam.
xscanimage : C'est l'équivalent de scanimage pour Xwindow. Il fonctionne avec la bibliothèque Gtk+ utilisé par Gimp et peut être utilisé comme un plug-in.

UTILISATION DE SCANIMAGE

Dans un premier temps, il est nécessaire de savoir qu'un scanner n'est pas absolument demandé pour tester SANE et scanimage. En effet, deux périphériques virtuels sont proposés sous les noms pnm0 et pnm1. Ceux-ci permettent la simulation de scanners par l'intermédiaire de fichiers PNM (portable anymap).
Pour vérifier la liste des périphériques de numérisation, tapez scanimage -L. Ceci vous gratifiera du message :
device 'pnm:0' is a Noname PNM file reader virtual device
device 'pnm:1' is a Noname PNM file reader virtual device
Si vous avez la chance de posséder un scanner, la ligne suivante apparaîtra en plus (dans le cas d'un mustek) :
Īmustek:/dev/sga' is a Mustek MFS-12000SP flatbed scanner
Chaque périphérique détecté possède des paramètres qui lui sont propres. La commande scanimage - -help -d nom de périphérique vous affichera la liste des paramètres supportés. Dans le cas du périphérique virtuel pnm:0, vous obtiendrez la liste en figure 1. Pour notre Mustek, la sortie est donnée en figure 2.
Pour tester le fonctionnement de scanimage, créez tout d'abord une image et sauvegardez-la au format ppm sous le nom source.ppm. Celle-ci sera considérée comme la source de numérisation par SANE. Puis, tapez la commande suivante :
scanimage -d pnm:0 - -contrats 50 ­ -filename source.ppm > sortie.ppm
Le fichier source.ppm sera lu comme une information provenant d'un scanner. L'utilitaire scanimage lui appliquera un contraste de +50 pourcent et enverra les informations dans sortie.ppm. Si vous comparez les deux images, vous constaterez une différence de contraste évidente.
Certes, cette manipulation aurait pu être faite avec n'importe quel utilitaire de conversion d'images. Mais scanimage fonctionne de la même manière avec un scanner. Exemple pour notre scanner Mustek, nous utilisons la ligne de commande suivante :
scanimage -d mustek:/dev/sga -mode color -v >sortie.ppm

INTERFACE GRAPHIQUE

Nombreuses sont les personnes qui n'aiment guère taper des commandes sur la ligne du shell. Pour résoudre ce problème, l'utilitaire xscanimage permet une numérisation depuis Xwindow en utilisant la bibliothèque Gtk.

Avec le périphérique virtuel pnm:0, xscanimage se présente sous la forme d'une fenêtre donnée en figure 3. Ce périphérique n'étant pas un réel scanner, les options de numérisation sont très légères et se limitent au contraste et à la luminosité. Deux zones de saisie vous permettent d'entrer un nom de fichier en sortie (Output) et un autre en entrée (Source Selection).

Reprenons notre exemple précédent. Pour ce faire, saisissez source.ppm dans le champ "Source Selection". Cliquez ensuite sur le bouton "Preview Windows" pour faire apparaître la fenêtre de pré-numérisation. Ici, cliquez sur "Acquire Preview", vous ferez apparaître ainsi le contenu de votre fichier source.ppm (figure 4). Vous pouvez à présent vous amuser à changer le contraste et la luminosité, puis cliquez à nouveau sur "Acquire Preview" pour obtenir un aperçu (figure 5).

Les boutons "Grayify", "Hand-Scanner Simulation" et "Three-Pass Simulation" permettent respectivement une numérisation en gris, en mode scanner à main et en simulation de scanner trois passes. Dans ce dernier cas, l'image sera sauvegardée en trois fois (Rouge, Vert et Bleu).

Nous l'avons déjà dit, xscanimage change d'apparence en fonction du périphérique que vous utilisez. Pour vous le démontrer, voici les parmètres utilisables avec notre scanner Mustek en figure 6.

L'utilitaire xscamimage peut être associé à Gimp. Pour cela, il vous suffira de créer un lien symbolique depuis le fichier xscanimage vers le répertoire des plug-ins de Gimp. Sur notre machine, la commande était :

ln -s /usr/bin/xscanimage /usr/lib/gimp/1.0/plug-ins/xcsanimage

Au démarrage suivant de Gimp, vous trouverez un nouveau menu "Acquire Image" dans le menu des extensions (Xtns). Depuis  celui-ci, vous pourrez choisir votre périphérique de numérisation et lancer xscanimage (figure 8). L'image numérisée arrivera directement dans une fenêtre de Gimp où vous pourrez la retoucher, l'enregistrer, etc.

LE COMMERCE ET LE FUTUR

La version de SANE que nous avons utiliser pour construire ce dossier est la 0.73. Les différentes versions qui nous séparent de la 1.0 ont pour but d'augmenter le nombre de scanners utilisables. Une participation des constructeurs de périphériques seraient bienvenue d'autant plus que Linux s'est affirmé en tant qu'alternative aux systèmes Apple et Microsoft. Le projet Gimp est déjà arrivé à terme et s'impose d'ores et déjà comme un concurrent direct aux logiciels commerciaux et propriétaires.

Le futur à long terme de SANE sera la prise en charge non seulement des scanners et des caméras, mais également de l'ensemble des périphériques multimédia. Ceci inclus toutes les sources d'images comme les appareils photos numériques, les cartes d'acquisition vidéo et les matériels médicaux de pointe.

Le chemin est encore long et les aides d'utilisateurs et de programmeurs à travers le monde sont les bienvenues. Si vous avez en votre possession un scanner non listé et que vous désirez participer au projet, contactez directement l'équipe de développement de SANE sur InterNet.    

LISTE DES SCANNERS COMPATIBLES AVEC LA VERSION 0.73

HP
ScanJet IIcx (C2500A 3332)
ScanJet IIp (C1790A)
ScanJet 3C (C2520A 3503)
ScanJet 4C (C2520A)
HP 6100 (C2520A 3644)
ScanJet 4P (C1130A 3540)
PhotoSmart (C5100A)
ScanJet 5P (C5110A)
MICROTEK
ScanMaker E2, E3, E6
ScanMaker 600ZS, II, IIHR, IISP, III, 630
Vobis Realscan, Highscan
MUSTEK
MFC-600S (MFC-06000CZ) v1.01
MFC-600CD (MFC-06000CZ) v2.03
MFS-6000CX (MFS-06000CX) v2.71
MFS-6000SP (MFS-06000SP) v3.12
MFS-8000SP (MFS-08000SP) v2.05
MFC-800S (MFC-08000CZ) v1.06
MFS-1200SP (MFS-12000SP) V1.00, v1.02, 1.07
MFS-12000CX (MFS-12000CX) v2.71
UMAX
Vista-S6, S6E, S8, T630
SuperVista S-12
PL-II
Astra 600S, 1200S
UC630/840
UG630

 

Online

SANE : http://www.mostang.com/sane/

Gimp : http://www.gimp.org/

Gtk : http://www.gtk.org/

TWAIN : http://www.twain.org/

 

 


© Copyright 2000 Diamond Editions/Linux magazine France - Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; A copy of the license is included in the section entitled "GNU Free Documentation License".