コンピュータによるカメラのリモート制御を可能とするgPhoto

 世界の一眼レフカメラ(SLR:Single-Lens Reflex)市場における2大メーカであるCanonとNikonからは、USBケーブルを介したPCによるカメラ制御を可能にするソフトウェアが提供されている。こうしたツールが役立つのは、手作業によるシャッターの押し下げ時に発生する手ブレを抑制したり(特に長時間露光をするような場合)、一定間隔でのインターバル撮影を自動実行させたい場合だ。しかしながら例によってこうしたカメラメーカも、先のソフトウェアをフリーなオペレーティングシステムにまでは対応させていないのだが、それでもやはりオープンソースの世界を探すとこのギャップを埋めてくれるソフトウェアが作成されており、本稿で解説する gPhoto もそうしたリモート操作ツールの1つである。

 gPhotoというソフトウェアはあまりに見事に動作する完成度に到達しており、実際に使っているとかえってその存在を忘れ去ってしまいそうなくらいである。それと言うのも事前に、F-Spot、digikam、gtkamなど自分が好みとする写真管理用アプリケーションを指定しておけば、後はデジタルカメラをPCに接続するだけでカメラのタイプまでもが自動認識され、写真データはほとんどトラブルフリーで抽出されるようになるのだ。しかもgPhotoの場合はそれだけに止まらず、個々のカメラにファームウェア形態で組み込まれた独自の機能すらもサポートしているケースが多いのである。そのため、例えばUSBイメージキャプチャといった通常は固定式のWebカメラで用いられる機能が、より高性能なデジタルカメラにて利用可能となるのだ。

 こうした機能を利用するには、サポート対象のカメラと(状況に応じて)比較的最近にビルドされたgPhotoを用意する必要がある。gPhotoによる写真データのアップロード/ダウンロード機能は1,000種類近くのカメラモデルをカバーしているが、USB経由のカメラ制御についてはすべてのカメラがこの機能をサポートしている訳ではなく、またgPhotoの開発チームに対応機種すべての把握を期待するのも酷な話であろう。とりあえず各自のカメラについては、同プロジェクトのwikiにアクセスし、カメラ制御のページにある対応機種一覧に掲載されているかを確認していただきたい。

 私自身は、完全オートマチック型のCanon S2 ISおよび一眼レフ(SLR)式のCanon EOS 5Dという2台のカメラを使用している。いずれもリモート制御の対応機種としてサポートリストに掲載されているが、5Dに関する注釈によるとバージョン2.4.0以降のgPhotoが必要のようだ。gPhotoはデスクトップ用Linuxシステムの大半において標準コンポーネントの1つとされているので、各自のディストリビューションにおけるオフィシャルパッケージに含まれている可能性が高い。なお歴史的な理由によりこのパッケージ名はgphotoではなくgphoto2とされている。

事前の準備と機種別の対応度

 私の環境の場合、必要とされる比較的新しいバージョンのgphoto2をインストールした後、5DカメラをUSBケーブル経由でPCに接続して電源をオンにしたところ、いつものようにメッセージボックスがポップアップしてカメラが認識された旨が報告され、また最新の写真データをPC側にダウンロードするか何もしないかの指定が求められた。ただし事前の設定として、写真データのダウンロードをシステムに自動実行させるよう指定しておいた場合、カメラの接続時にこうしたダイアログボックスは表示されない。また写真データの抽出処理をユーザの指示で停止できない場合は、ダウンロードが終了するまで待つしかないはずだ。

 gphoto2パッケージにはコマンドラインおよびncursesを介した操作に対応したgphoto2というクライアントプログラムが同梱されている。このクライアントプログラムについては、カメラのメモリカードにある写真データをダウンロードさせるだけに止まらず、カメラ固有の各種機能にアクセスできる点が特に有用だ。例えばbashプロンプトに続けて「gphoto2 -a」というコマンドを実行すると当該カメラにおけるサポート機能が一覧されるが、これらのうち本稿で主として用いるのは–capture-image–capture-previewである。なお私の所有する5Dは動画や音声を記録することはできないが、そうした機能を有する機種の場合は–capture-movieおよび–capture-soundというコマンドが利用できるかもしれない。

 ただし先の操作をした際にgphoto2からは、gPhotoのWebサイトによる説明ではサポートされているはずの機能(例えば–capture-imageなど)がこのカメラでは使用できないと表示されるかもしれない。そうした場合に最初に疑われる原因は接続モードであり、カメラによってはUSB経由の接続が画像転送プロトコル(PTP:Picture Transport Protocol)モードでしか行えないモデルが存在するのである(特に完全オート型の機種)。それに対して高級な機種になるとその他の追加モードが利用可能なものもあり、結局は個々のモデル次第ということになるが、gphoto2を介した固有機能へのアクセスをするにはこうした追加モードへの切り換えが必要となる場合もあるのだ。

 例えば5Dの場合もPTPモードと“PC Connection”モードという2つのオプションが利用できるが、gphoto2でのリモート制御には後者のモードを使わなくてはならない。また5Dでのモード切り換えは、カメラ側の液晶画面を使ったメニュー操作でのみ行えるようになっている。実際に私のカメラでも接続モードをPC Connectionに切り換えてみると、gphoto2からは–capture-imageと–capture-previewの2つが利用可能である旨がレポートされた。

写真撮影用の基本コマンド

 –capture-imageはシャッターを切るためのコマンドであり、要はカメラのシャッターを人間が直接押し下げるなり、無線ないし有線式のリモートレリーズを介した撮影を行うのと同じ操作を実行するものである。ただしこの場合、シャッター速度、絞り、オートフォーカス、解像度といった撮影用の諸設定はカメラ側の指定値がそのまま適用されるようになっている。よって当該コマンドを用いてgphoto2にシャッターを押させる際には、事前にこれらの諸設定を撮影に適した値に合わせておかなくてはならない。また–capture-imageで撮影された写真の格納先は通常の撮影時と同様にカメラの内蔵メモリないしはメモリカードとされるので、このコマンドを使用するメリットは、PC側からの信号送信でカメラのシャッターを切れるというただ一点に尽きることになる。

 ただしこの–capture-imageコマンドに関しては、引数指定による若干の動作制御を施すことができる。その1つ--intervalおよびその省略形である-Iは、カメラの撮影間隔を指定するための引数である。そしてこの-I引数には、当該コマンド実行時の撮影フレーム数を指定する--framesないし-Fを併用することもできる。なお-F指定を省略した場合gphoto2による写真撮影は、ここでの指定間隔による撮影データでカメラのメモリが満杯になるまで繰り返し実行される。

 一部のgphoto2ユーザからは、–capture-imageコマンドで指定した撮影の終了後もgphoto2からのコマンド送信が停止されないというバグが報告されている。最新のgphoto2では既にこの問題についての修正が施されているが、このアップデートを取り込んでいないディストリビューションの場合は、最新版のソースコードを入手して自力でビルドを実行する必要がある。そうした手間を厭うのであれば、この問題に遭遇した場合、Ctrl-Cのキーボード操作によってgphoto2を安全に中断すればいい。

 こうした–capture-imageとは対照的に–capture-previewは、撮影した写真をカメラ側のメモリに保持することなく直接PCにダウンロードするコマンドである。つまりこのコマンドの場合、-F-Iの引数指定を併用したインターバル撮影が、カメラ側のメモリ容量に制限されることなく連続実行できるのだ。

より高度な使用法

 先に見た--capture-imageコマンドで行えるのは、現状の設定を何も変更せずに単にシャッターを切るという操作だけだが、多くのカメラでは--set-configに引数を指定することで、絞り、シャッター速度、ISOなどの設定が変更できるようになっている。各自の所有するカメラにおいて、実際にgphoto2がどのパラメータ変更を行えるかを確認するには、「gphoto2 --list-config」というコマンドを実行すればいい。また各パラメータにおける現在の設定値については、「gphoto2 --get-config attribute 」にて確認できる。なおこのコマンドにより返されるのは現在の設定値だけでなく当該パラメータにて指定可能なすべての値の一覧も出力されるようになっており、高機能なカメラ(ないし交換レンズを用いた場合)の絞り設定のように覚えきれない程の細かな設定ができるパラメータを操作する場合、こうした情報は特に重宝することになる。なお指定値への変更は「gphoto2 --set-config attribute value 」にて行えばいい。

 こうしたコマンドラインでの操作が不便だと感じるのであれば、「gphoto2 --config」で呼び出すメニュー操作型のインタフェースによって同等の設定をインタラクティブに施すこともできる。もっとも後者の方式もncursesを用いてテキストオンリーで表示されるインタフェースに過ぎないのだが、多数の値を変更する場合にはgetやsetなどのコマンドを打ち込むよりも遥かに便利である。

 最後に紹介する--hook-scriptオプションは、非常に多様な可能性を秘めている。つまり--hook-script=/path/to/some/script.sh という指定を--capture-imageコマンドの末尾に追加しておくと、gphoto2は当該コマンドの実行終了後に指定されたシェルスクリプトを実行するようになるのだ。このオプションについては、例えば画像ディレクトリのrsync処理や電子メールによるユーザへのメッセージ送信など、あらゆる操作への応用が考えられる。

 コマンドラインで操作可能なgphoto2がこうしたスクリプト実行機能を有したことは、写真撮影という操作の完全自動化が行えることを示唆している。あるいはそれ以前に、カメラにケーブル接続されたコンピュータを介して何枚かのフレーム撮影がリモートで実行可能となったこと自体が、非常に意味ある出来事だと評しておくべきかもしれない。例えばカメラに与える振動を最小限化しながら長時間の露光ができるのはもとより、人間が姿をさらせば驚いて逃げてしまうであろう野鳥のクローズアップ撮影などもある程度離れた位置から操作できるのだ。それよりも興味をかき立てられるのは、何らかのハードウェアないしソフトウェア的な仕掛けを用意することにより、特定のイベントを検出させる形でgphoto2によって無人の写真撮影を行わせるという使い方であろう。

 とは言うものの寡聞にして私は、gphoto2のスクリプト実行機能をカメラリモート制御の分野において実際に役立てたという応用例を耳にしたことがない。そうした事例をご存じの方、特にそうした操作を自分で実際に行ったという方がおられたら、是非ともその詳細をお知らせ頂きたい。そうした報告が入るまでは、どこからか長めのUSBケーブルを調達して、カメラのリモート制御を各種試してみることにしよう。

Linux.com 原文