玩式草子─ソフトウェアとたわむれる日々

第43回SANEを用いた書籍の電子化

日本では、ここ数年、恒例のように「電子書籍元年」の呼び声がかかっています。特に昨年は、アマゾン社がずいぶん安価な値段でKindleという電子ブックリーダを出し、それに対抗するかのように楽天もKoboを大量に配布して、何度目かの「電子書籍元年」の掛け声が賑っていました。

本好き人間の一人として、電子書籍に興味はあるものの、現状の電子書籍は便利さよりも不便さの方が目立つ気がします。特に、その不便さが、物理的な制限ではなく、ライセンス的な制約に由来しているのを見るにつけ、電子書籍の購入がためらわれます。

その結果、手元には紙を束ねた「本」が山積みされることになっていますが、人生の折り返し点をだいぶ過ぎた年齢になってくると、さすがに「そろそろ不要な本は整理しようか……」という気にもなってきます。

不要な本は古本屋等で処分するのが一番簡単そうなものの、手元の趣味の偏った本たちは二束三文に買い叩かれるのがオチでしょう。それならば、むしろ手元でスキャンして電子化してしまう方がよさそうだ、という気になって、自家製の電子書籍化、いわゆる「自炊」を試してみることにしました。

インターネット上には「自炊」に関するさまざまなノウハウが紹介されているものの、それらはたいていWindows環境と商用ソフトウェアを前提にしています。一方、Linux/UNIXの世界でもスキャナ用のツールは古くから開発されており、それらを使えばOSSだけでもそれなりの環境は構築できそうです。今回は、手元で試したそれらの方法を紹介してみることにしましょう。

スキャナとsane-backend

プリンタ同様、スキャナの仕様もメーカや機種ごとに異なり、商用OS用には各メーカがそれぞれ専用のドライバを組み込んだソフトウェアを添付しています。それらのソフトウェアはスキャナの独自機能などにも対応していて便利そうなものの、異なるメーカのスキャナを自由に切り替えて使うわけにはいかないようです。

一方、OSSの世界ではSANE(Scanner Access Now Easy)というソフトウェアが開発されています。SANEは、特定メーカのスキャナにのみ対応するのではなく、スキャナに対する汎用的なAPIを定めて、メーカの異なるスキャナも同じ手順で利用できることを目指したソフトウェアです。

SANEの中心はsane-backendという名称でまとめられたライブラリ群で、これらが実際のスキャナを操作すると共に、スキャナに対する汎用的なAPIを提供します。sane-backendが対応しているスキャナの一覧は、SANEプロジェクトのホームページで公開されています。

このページによると、最新の安定版であるsane-backend-1.0.23では、さまざまなメーカ製の1941種のスキャナのうち、1000種ほどが使用可能(Complete/Good)で、300種ほどが未テスト、500種弱が非サポートとなっています。リストにはエプソンやキヤノンのスキャナやプリンタ複合機も多数紹介されているので、Linuxからも利用できるスキャナが欲しい場合、このページの情報を元に機種を選べばいいでしょう。今回取りあげる富士通のScanSnap S1500というスキャナ専用機は、sane-backendのfujitsuドライバが対応しています。

一方、sane-backendが対応していない機種でもメーカが独自のドライバを公開している場合があります。たとえば、手元にはHP製のプリンタ複合機(OfficeJet Pro 8500A)がありますが、HPの場合、HP-LIP(HP Linux Image and Printing)というプロジェクトがLinux用のドライバを積極的に公開しており、HP製のほぼ全てのプリンタやスキャナはLinuxから利用できるようになっているので、sane-backendでは最近のHPのスキャナ用のドライバは開発していません。

手元のスキャナにsane-backendが対応しているかどうかは、scanimage -Lというコマンドで確認することができます。

$ scanimage -L
device `fujitsu:ScanSnap S1500:626844' is a FUJITSU ScanSnap S1500 scanner
device `hpaio:/net/Officejet_Pro_8500_A910?ip=192.168.1.100' is a Hewlett-Packard Officejet_Pro_8500_A910 all-in-one

本来、scanimageというコマンドは、sane-backendパッケージに付属のCUIなSANEクライアントですが、-Lオプションを指定すると利用可能なスキャナのリストを表示してくれます。

スキャナがscanimageコマンドで認識されない場合、デバイスファイルのパーミッションの設定sane-backendの設定ファイルを調整することで利用可能になることがあります。その際には、まずsane-find-scannerコマンドで、スキャナ自体がUSBやSCSIデバイスとして認識されているかを確認します。

$ sane-find-scanner 

  # sane-find-scanner will now attempt to detect your scanner. If the
  # result is different from what you expected, first make sure your
  # scanner is powered up and properly connected to your computer.

  # No SCSI scanners found. If you expected something different, make sure that
  ...
found USB scanner (vendor=0x04c5, product=0x11a2) at libusb:001:004
  # Your USB scanner was (probably) detected. It may or may not be supported by
  # SANE. Try scanimage -L and read the backend's manpage.
  ...
  # You may want to run this program as root to find all devices. Once you
  # found the scanner devices, be sure to adjust access permissions as
  # necessary.

この例では、USB接続したスキャナが見つかっています。SCSI接続やUSB接続のスキャナの場合、sane-find-scannerでSCSIやUSBデバイスとして認識されていないと、sane-backendから利用することはできません。

SCSI接続タイプの古いスキャナの場合はsgモジュールドライバ経由で利用することになるので、"modprobe sg"すれば目的のスキャナが認識されるかも知れません。また、デバイスファイルのパーミッションの設定によっては、rootにならないとスキャナが検出されないこともあります。そのような場合は該当するデバイスファイルのパーミッションを確認してみてください。

sane-backendが利用する設定ファイルは/etc/sane.d/ディレクトリに収められています。このディレクトリには、sane-backendが対応している各メーカごとの設定ファイルが網羅されており、sane-backendは/etc/sane.d/dll.confファイルに従って、各メーカごとの設定ファイルを調べて該当するファイルを利用するようになっています。

デフォルトでは、dll.confファイルには利用可能な設定ファイル全てが登録されており、それらを全てチェックするため、スキャナの検出には多少時間がかかります。

$ cat -n /etc/sane.d/dll.conf.org 
    1   # enable the next line if you want to allow access through the network:
    2   net
    3   abaton
    4   agfafocus
    5   apple
    ...
   85   umax1220u
   86   v4l
   87   xerox_mfp

必要な設定ファイルがわかっている場合、dll.confにそのファイルのみを指定することで、スキャナの検出時間を短縮することができます。また、不要な設定ファイルのチェックを省くことで、スキャナを正しく認識することもあるようです。

xsane

sane-backendが正しくスキャナを認識していれば、SANEを使うように設計されたさまざまなクライアント・ソフトウェアが利用可能です。先に紹介したscanimageはsane-backendに付属のCUIクライアントですし、xsaneは古くから開発が続いているGUIベースのクライアント・ソフトウェアです。

図1 xsaneの起動画面
図1 xsaneの起動画面

xsaneはマルチウィンドウ構成になっており、図1の左側に示したのが各種設定を行うメインウィンドウ右側がプレビュー画面を表示するプレビューウィンドウです。

スキャナに原稿をセットし、プレビューウィンドウにある「プレビューを取得」ボタンをクリックすると、スキャナが動作して、プレビュー画面にスキャン結果が表示されます。

図2 xsaneのプレビュー画面
図2 xsaneのプレビュー画面

この結果を見ながら、プレビュー画面内でスキャンしたい範囲(点線で囲まれた部分)を指定したり、左側のメインウィンドウ内のスライドバーで、解像度(例では300dpi⁠⁠、ガンマ値(同じく2.00⁠⁠、明度(16.0⁠⁠、コントラスト(15.0)等といったパラメータを操作して、画像を取り込む際の設定を調節します。

現在はメインウィンドウの右上の「ターゲット」⁠射的の的アイコン)ビューワになっているので、スキャンした画像データはxsaneの専用ビューワに取り込まれ、画面に表示されます。スキャンしたデータを保存したい場合は、⁠ターゲット」保存にし、その下の保存先の欄に適切なディレクトリとファイル名を指定します。

その際、ファイル名の一部に"001"といった数字を付けておくと、スキャンしたデータファイルにはそれを基点とした連番が自動的に振られていきます。左上にある紙が重なっているようなアイコンは一度に読み取るページ数の指定で、ADF(Auto Document Feeder:自動原稿送り装置)が付いたスキャナの場合、ここで指定したページ数ごとにADFから連続して原稿を読み取っていきます。

ファイル名の下にある靴のアイコンは、連続して原稿を読み取る際にページ数に振る連番を増やす値で、ADFは利用できるものの片面ずつしかスキャンできないスキャナの場合、カウンタ数を+2にしておけば、奇数ページごと、偶数ページごとにスキャンすることができます。

その下の「ADF表面」になっているドロップダウンリストはスキャナのデータ読み取り先の指定、⁠カラー」はフルカラーでスキャンするか、グレースケールや白黒モードでスキャンするかの指定、⁠フルカラーレンジ」はネガフィルム等でカラーモードが反転していたり、カラーレンジに違いがある場合の指定になっています。

ADFが利用できるスキャナの場合、原稿をまとめてセットしたくなりますが、しばらく試行錯誤した結果、10ページ単位ぐらいでスキャンするのが確実だ、というあたりに落ちつきました。

図3 今回の設定
図3 今回の設定

「10ページ単位」の場合、一度にセットする原稿は5枚ずつになり、原稿の追加はかなり頻繁に行う必要があります。紙質がいい単行本等の場合はもうすこし多めにセットしてもよさそうですが、紙質のあまりよくない雑誌の類いは原稿の重送が発生しがちなので、5枚ずつくらいにしておくのが確実なようです。また、10ページ単位ぐらいだとスキャンミスのチェックや再スキャンも簡単なので、結局は1冊全体のスキャンを早く終えることができます。

スキャンした画像データは指定したディレクトリに保存されます。最近のデスクトップ環境だと、ファイラーのプレビュー機能を使えば、ディレクトリにある画像データの一覧を確認することができるので、スキャンミスが発生していないかのチェックも簡単でしょう。

図4 スキャン画像のプレビュー
図4 スキャン画像のプレビュー

スキャンした画像データは、PDF形式に変換して一つのファイルにまとめる方法もありますが、最近の画像ビューワはzipやtar+gzip等でまとめたアーカイブファイルをそのまま表示することができるので、手元ではPDF化せずに、アーカイブファイルの形で保存しています。

$ ~/Scans$ zip ../italian_201204.zip *.jpeg
 adding: italian_201204_0001.jpeg (deflated 1%)
 adding: italian_201204_0002.jpeg (deflated 1%)
 adding: italian_201204_0003.jpeg (deflated 2%)
 adding: italian_201204_0004.jpeg (deflated 2%)
 ...
$ gwenview ../italian_201204.zip
図5 zipアーカイブの内部が表示できる
図5 zipアーカイブの内部が表示できる

富士通のScanSnap S1500は、一枚の原稿の両面を同時にスキャンしてくれる便利なスキャナなものの、原稿をセンサの間を通してスキャンする、という構造上、厚みのある原稿や折り返しのある原稿、カバーと帯のような重なった部分を持つ原稿などはスキャンできません。そのため、その種の原稿はフラットベッドでスキャンできるHPの複合機を使っています。sane-backendが複数のスキャナを正しく認識していれば、xsaneの起動時にそれらを選択することができます。

図6 スキャナの選択画面
図6 スキャナの選択画面

xsaneはsane-backendからの情報を元に機種ごとにメニューを切り替えてくれるので、HPの複合機の場合はデータ読み取り先のドロップダウンリストに「フラットベッド」が表示されるようになりました。

図7 HP複合機を選択した場合のメニュー
図7 HP複合機を選択した場合のメニュー

自炊雑感

以上、sane-backendが対応しているスキャナを使えば、LinuxでもWindowsやMacOSとそう変わらない自炊環境が構築できることを紹介しました。画像データをファイルにしてしまえば、ファイル名の変更や画像形式の変換といった後処理は各種ツールが充実しているLinux上の方が簡単かも知れません。

もっとも、実際に自炊をやってみた経験から言うと、自炊で一番時間がかかるのは本をページに分解する前処理の作業なので、専用の裁断器等を利用しないと、まとまった数の自炊は困難でしょう。

また、使用するスキャナもかなり重要です。手もとにあるHPの複合機には両面対応のADFが搭載されているので、当初はこれを使ってスキャンしていましたが、両面印刷装置を流用したようなADFは読み込み速度も遅いし、紙詰まりがしばしば発生して作業が進まないので、改めてスキャナ専用機であるScanSnap S1500を導入しました。

ScanSnap S1500は、上下についた2つのセンサーで原稿の表裏を同時にスキャンできるようになっており、スキャン速度も高速で原稿へのダメージも少なく、自炊用の定番として評価されているだけのことはある、という印象です。

残念なことにScanSnap S1500は昨年の11月末に販売が終了し、iX500という新機種に更新されました。今回利用した、sane-backendの安定版である1.0.23では、この新機種には対応していませんが、gitのログを見ると開発版では対応するためのコードが追加されつつあるので、sane-backendの次のバージョンではiX500も利用可能になりそうです。一方、同じScanSnapを名乗っていても、EpsonからのOEMであるS1100やS1300iは、sane-backend的には全く異なるドライバ(epjitsu)になっていて、S1500に比べると機能等にかなり制限があるようです。

本好きな人間としては、紙を束ねた「本」という形態に愛着があるため、蔵書の電子化はなかなか進みませんが、電子化することで新しい使い方が可能になった本もあります。次回はそのあたりを紹介してみましょう。

おすすめ記事

記事・ニュース一覧