読者です 読者をやめる 読者になる 読者になる

フルスタックエンジニアを目指して

いろいろやってみるブログ

ScanSnap1500をネットワーク越しに利用する(1)

IoTに挑戦。

はじめに

2010年ごろ、タブレット電子書籍が普及し始め、いわゆる”自炊”が流行りました。私も自炊に魅力を感じた人間の一人で、当時は学生でお金もありませんでしたが、ScanSnap1500という高価なスキャナ(当時4万円くらいだったと記憶)を購入しました。

最近は、Kindleにはまっちゃって自炊もほとんどしなくなりましたので、ScanSnapは部屋の片隅に追いやられてしまっていましたが、もったいないので活用してみようというのがこの企画です。

今回は下記が実現できればOK。

  1. 領収書などのペーパーレス化
  2. 雑誌の電子書籍化(自炊)
  3. 手軽にスキャンできる環境

3が最も大切な点です。なんだかんだで、ScanSnapは大きく、場所を取りますので、一人暮らしの部屋にはなかなか邪魔です。また、メインではSurface Pro 3を使用していますが、いちいちScanSnapを接続するという行動がめんどくさく感じていました。そこで、今回は「ネットワーク経由で利用できる」環境を実現するため小型PCであるRasberry Piを利用します。

用意するもの

  • ScanSnap1500
  • rasberry pi type-B
  • コントロール用のPC(rasberry piへのログイン用)
  • TeraTerm(rasberry piへのログイン用)
  • ファイルサーバ

構成はこんな感じ。ラズパイがScanSnapの菅理サーバとなります。ちなみにラズパイはScanSnapの側面にテープでくっつけました。Wi-Fiでラズパイを接続するので、PCの場所に縛られずどこにでもScanSnapを置くことができるようになります。

f:id:naoto408:20160131013732j:plain

設定

接続設定

Wi-Fi子機とScanSnapをラズパイにUSB接続し、lsusbで認識されているか確認します。

# lsusb
Bus 001 Device 004: ID 04c5:11a2 Fujitsu, Ltd
Bus 001 Device 005: ID 0411:01a2 BUFFALO INC. (formerly MelCo., Inc.) WLI-UC-GNM Wireless LAN Adapter [Ralink RT8070]

wpa_supplicant.confを編集します。

## added on 20160129
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
    ssid="SSID"
    psk="パスワード"
    # 0: default, 1: stealth
    scan_ssid=0
}

/etc/network/interfacesでインターフェース設定

auto wlan0
iface wlan0 inet static
address 192.168.10.7
netmask 255.255.255.0
gateway 192.168.10.1
allow-hotplug wlan0
iface wlan0 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

インターフェースを再起動

# /etc/init.d/networking restart
[....] Restarting networking (via systemctl): networking.service
. ok

 ifconfigでインターフェースが更新されていることを確認します。今回はWi-Fi不調時にもLAN線つなぐだけでラズパイにログインできるよう固定IPを振っています。

# ifconfig
eth0     inet addr:192.168.10.7  Bcast:192.168.10.255  Mask:255.255.255.0

wlan0   inet addr:192.168.10.8  Bcast:192.168.10.255  Mask:255.255.255.0
※表示はいろいろ省略

Wi-Fi経由でssh接続できれば設定完了です。

scanimageをインストール

次に、スキャンを実行できる環境を整えます。

まずはパッケージのインストール。

aptitude update
aptitude install xinetd sane-utils

必要なソフトのインストール

sudo apt-get install sane-utils

 ScanSnapを認識できるか確認

#scanimage -L

とりあえずスキャンできるか、ScanSnapに紙をセットしsacanimageを実行。スキャンが実行され、ファイルが出来上がっていれば成功です。

# scanimage > output_file

スクリプトの作成

次は、運用に耐えられるよう自動化スクリプトを書きます。

今回はとりあえず、スキャン⇒scpでファイルサーバへ転送までを実現しますのでこんな感じで書いてみました。

#!/bin/bash
home=/home/pi/scripts
date=$(date "+%Y%m%d-%H%M%S")
output=/home/pi/scripts/${date}
destdir=/mnt/share/disk1/ドキュメント/スキャン

mkdir ${date}
cd ${date}
sudo scanimage --batch=${output}/${date}-%d.tiff --format=tiff --mode Color --source "ADF Duplex"

cd ${home}
expect -c "
  spawn scp -r ${date} ユーザ名@192.168.10.10:${destdir}/
  expect {
  \"Are you sure you want to continue connecting (yes/no)?\" {
    send \"yes\r\"
    expect \"password:\"
    send \"パスワード\r\"
  } \"password:\" {
    send \"パスワード\r\"
  }
}
interact
"

scanimageのオプションは下記の通り。

batchオプションをつけることで連番保存が可能です。%dで番号がつきます。

  • --batch=${output}/${date}-%d.tiff

formatオプションで保存するファイル形式を指定できます。今回はTIFFで保存してます。

カラーモードを指定します。カラー以外にグレースケールや白黒が指定できます。

  • --mode Color

両面印刷できるようにADFを指定しています。

  • --source "ADF Duplex"

あとは完成したTIFFファイルをscpコマンドでファイルサーバに転送しています。

これで、シェルスクリプトを実行すればファイルサーバにファイルができるようになりました。

今後の課題

とりあえず、一通りの環境は整いましたので、今後は改良を進めようと思います。

  1. TIFF保存しているので、JPEG圧縮で容量削減
  2. 複数枚の画像を1つのPDFにまとめる
  3. 自動トリミングの実装

③について、今ははがきをスキャンするとこんな感じになってしまいます。これだと、無駄なスペースが多く、スキャナ機能としては半人前ですよね。

f:id:naoto408:20160131021628j:plain

今後は、サイズにかかわらず勝手にトリミングして背景削除できるようにしたいです。ImageMagik使えばできるかな?

 

参考

Raspbian の初期設定 その2 (無線LANの設定) - こまけぇこたぁいいんだよ!!

UbuntuでScanSnap S1500を使う | Way2Go

pi3g Blog – Raspberry Pi: Sharing a scanner with the Network – even Windows!

Ubuntu 12.04上のSaneによってスキャナを共有 - notes plastiques

またたびりなっくす scanimageでGT-X820を使う

ScanSnap fi-5110EOXをDebian/Ubuntuで使う | d.sunnyone.org