Che-ez! SPYZ買っちゃった

安価なデジカメとして Che-ez!シリーズ が巷に出回っていますね。
というわけで私も、 Che-ez! SPYZ(スパイシー) を買っちゃいました。
このシリーズのデジカメは、記録メディアが内蔵のSDRAMだったりするので、USBを使って画像データを吸い出すようになっています。
…で、当然吸い出す専用のソフトが付属してくるわけですが、Windows/Machintosh用のソフトしか無いわけです。 そこで、このページではどうやったらFreeBSDとChe-ez!シリーズが仲よくできるかについて書いてみます。

Che-ez!って何で出来てるの?

このChe-ez!シリーズで使われているのは、 STマイクロエレクトロニクス社STV0680 というワンチップLSIです。
こいつは、CCD, ボタン, beep音, (USB|Serial)など全ての制御を行っています。 というわけで、画像データを吸い出すには STV0680 と USB 経由で通信できればいいわけです。

用意するもの

…で、STV0680と通信するソフトを書こうかな〜と思っていたところ、gphoto2というソフトが対応していることが分りました。 というわけで、意外とさっくり動きました。

作り方

libusb

まずは libusbをインストールしておく必要があります。 libusb-0.1.4.tar.gzを展開します。
# tar xvfz libusb-0.1.4.tar.gz
libusb-0.1.4
libusb-0.1.4/Makefile.in
libusb-0.1.4/README
libusb-0.1.4/stamp-h.in
         :
あとはお約束の./configureを走らせて、make install でOKです。
# cd libusb-0.1.4
# ./configure
checking for a BSD compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking whether make sets ${MAKE}... yes
         :
# make install

gphoto2

次に gphoto2 のインストール。 こちらも、まずはgphoto-2.0beta3.tar.gzを展開します。
# tar xvfz gphoto-2.0beta3.tar.gz
gphoto-2.0beta3
gphoto-2.0beta3/intl/
gphoto-2.0beta3/intl/ChangeLog
gphoto-2.0beta3/intl/Makefile.in
         :
…で、./configureに適当なオプションを付けます。 gphoto2は、さまざまなデジカメに対応していて、それぞれのドライバを必要に応じて組み込むようになっています。 今回はstv0680だけで動けばいいので、ドライバはstv0680のみを組み込みました。 そのあとは、make installでOK。 この際に、makeコマンドは、GNUのmakeを使わないとうまくコンパイルできないようです。
# cd gphoto-2.0beta3
# ./configure --disable-nls --with-included-gettext --with-drivers=stv0680
checking for a BSD compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for mawk... awk
checking whether make sets ${MAKE}... yes
         :
# gmake install

使ってみる

インストールが完了したら、早速デジカメから画像を吸い出してみます。

デジカメの中の画像の枚数の確認

USBのケーブルでPCとデジカメを接続しておきます。 また、/dev/ugen0へのアクセス権が一般ユーザにはないので、 私はsudoを使っています。
各種オプションについては、gphoto2をオプションなしで実行すると、説明が表示されますので、これを参考にしましょう。 -nオプションが、画像の枚数を表示するためのオプションです。
% sudo gphoto2 --port usb: --speed 115200 --camera stv0680 -n
Status: Initializing 'STV0680'...
ping ok
Status: Listing files in '/'...
STV: getting file count
GFI OK, count = 3
Number of pictures in folder /: 3
というわけで、3枚の画像があることがわかりました。

画像を吸ってみる

全ての画像を吸い出すには、-Pオプションを使います。
% sudo gphoto2 --port usb: --speed 115200 --camera stv0680 -P
Status: Initializing 'STV0680'...
ping ok
Status: Listing files in '/'...
STV: getting file count
GFI OK, count = 3
Files in /:
Status: Getting 'image01.pnm' from folder '/'...
Image is 644x484 (311696l bytes)
Read bytes!
Saving file as image01.pnm
Status: Getting 'image02.pnm' from folder '/'...
Image is 644x484 (311696l bytes)
Read bytes!
Saving file as image02.pnm
Status: Getting 'image03.pnm' from folder '/'...
Image is 644x484 (311696l bytes)
Read bytes!
Saving file as image03.pnm
これで、3枚の画像が、カレントディレクトリに保存されました。
% ls
image01.pnm     image02.pnm     image03.pnm
-pオプションを使うと、指定した画像だけ吸い出すことができます。

デジカメ内の画像を消去してみる

デジカメの中に記録されている画像を全て消去するには、-Dオプションを使います。 -dオプションで、指定した画像だけ消去できます。

画像補正をする

che-ez!シリーズのCCDカメラで取れる画像は、結構色が片寄っていたり画像自体も荒いのです。 che-ez!シリーズに付属の画像転送ソフトはそこらへんの画像補正もやってくれています。 gphoto2でも、ある程度の補正はかけてくれますが色の補正が甘いようなので、吸いだしたあとに補正をかけてやると良いでしょう。

gimpを使った方法

gimp を使って、画像補正をします。ただし、大量にある場合にGUIで操作するのは大変なので、script-Fuを書いてそれをバッチで処理しましょう。
以下のScript-Fu を、~/.gimp-1.2/scripts/以下に、auto-sharpen.scmというファイル名で保存しておきます。
(define (auto-sharpen iFilename oFilename)
  (set! img (car (gimp-file-load 0 iFilename iFilename)))
  (set! drawable (car (gimp-image-active-drawable img)))
  (plug-in-sharpen 1 img drawable 50)
  (gimp-hue-saturation drawable 0 -6 50 -25)
  (file-pnm-save 1 img drawable oFilename oFilename 1))
あとは、コマンドラインで、以下のように gimp を起動すると、画像処理を施して終了します。
% gimp -i -b '(auto-sharpen "input.pnm" "output.pnm")' '(gimp-quit 0)'
batch command: executed successfully.

画像の比較

それぞれの画像を比較してみます。 (WEBに張るために JPEGに変換してあります。)

Windows

まず、Windowsで吸い出したものが、これです。

gphoto2

次に、gphoto2で吸い出したものが、これ。

gphoto2 + gimpフィルタ

最後に、gphoto2で吸い出したものに、前述のgimpによる画像処理を施したものが、これ。

Yukimitsu Izawa
Last modified: Mon Nov 19 09:49:23 JST 2001