デジタルカメラをUSB経由でRaspberryPiと接続し、コマンドラインから写真を撮ったりあれこれできるgphoto2を使ってみた話。
パソコンからデジタルカメラのシャッターを切る
デジタルカメラをPCから操る技術は、室内で写真を扱うスタジオ/業界では当たり前の機能(Adobe Lightroomなどを使ったテザー撮影)で、PCでホワイトバランス、絞り、露光量など、各種設定を調節しPCでシャッターを切り、確認は大きなPCの画面…といった感じで使われているようです。
とは言え、そんな機能を自宅PCで使う予定は無いのですが、この機能をLinux(Raspberry Pi)から使えたら、
- RaspberryPiにつけた各種センサーと組み合わせてシャッターを切る
人感、傾き、光・音、温度センサーなどと組み合わせる - 離れた場所のスマートフォンなどからWeb経由でシャッターを切る
- cronなどで定期的にシャッターを切って(カメラ内蔵のインターバル設定より長い1日単位とか)RaspberryPiでタイムラプス動画にする
- 時刻や曜日、周囲の状況など、カメラ本体についていない機能でカメラの設定(iso、シャッタースピード、絞りなど)を自動変更しシャッターを切る
- 何らかのプログラムと組み合わせてシャッターを切り、画像をどこかに転送したり自動加工する
とかができて、なんだか面白そう。
上記のことはUSB Webカメラを使えばお手軽にできますが、今回は「もう少し画質+ちゃんとしたズーム」が欲しかった+家に古いデジタル一眼レフカメラが転がっていたので、googleさんに聞いた所、gphoto2と言うソフトを教えてもらいました。
gphoto2の機能
コマンドライン(黒い画面)、ライブラリ(libgphoto2)で下記のようなことができます。
- カメラのシャッターをきる(写真)
- 動画を取り込む(対応機種のみ)
- カメラの設定情報(ISO、絞り、ホワイトバランス、シャッタースピード、クオリティ、フラッシュ、バッテリー情報、などなど)を読み取る
- カメラの設定情報(カメラのメニューから変更できる部分)を変更する
- ズームイン・アウト(コンデジなど)
- カメラ内のデータをコンピュータ側にダウンロード
- カメラ内のデータを削除
- などなど
- 対応OS
Linux、Mac OSX
- Gphoto2 公式ページ
http://www.gphoto.org/
対応機種
機種によりできない機能もありますが、キヤノンとニコンのデジタル一眼レフで新しすぎないもの以外はたいてい対応しているように思います。
オークション等でかなり安価に取引されているちょっと古めのコンデジや、最近の高めのコンデジも対応しているので、その辺りでも遊べます。
RaspberryPiへのインストール
新しいバージョンのgphotoを普通に入れようとすると結構面倒らしいのですが、RaspberryPi用(Ubuntuでも動くようです)のインストールスクリプトを作ってくださってる方が居ますので、それを使います。
- gphoto2-updater
https://github.com/gonzalo/gphoto2-updater
今回はOSMCに入れましたが、普通のRaspbianでも同じだと思います。上記のページに書いてあるように、
$ wget https://raw.githubusercontent.com/gonzalo/gphoto2-updater/master/gphoto2-updater.sh && chmod +x gphoto2-updater.sh && sudo ./gphoto2-updater.sh
すると、結構時間はかかります(20分くらい)が、無事最新のgphotoが使えるようになりました。
カメラのUSBモード変更(準備)
最近のカメラは多分そのままでも大丈夫ですが、今回使ったNikon D70はカメラのメニューからUSBの転送モードをPTPにする必要がありました。下記のページを見る感じだと古いカメラは設定変更が要る感じです。
- テザー撮影を行うときのヒント@apple
https://support.apple.com/ja-jp/HT202063
接続/動作確認
カメラとRaspberryPiを接続し、カメラの電源を入れると/var/log/messagesに下記のようなメッセージが流れると思います。
動作確認は基本、公式マニュアルのチュートリアルにしたがいますが、一点気をつけるのはRaspberryPiではsudoで実行すること。
- Using the gphoto2 command line interface (CLI) / 公式ページ
http://www.gphoto.org/doc/manual/using-gphoto2.html
$ sudo gphoto2 --list-ports 検出したデバイス数: 4 パス名 説明 -------------------------------------------------------------- ptpip: PTP/IP Connection usb:001,012 Universal Serial Bus usb:001,006 Universal Serial Bus usb:001,003 Universal Serial Bus $ sudo gphoto2 --auto-detect 型式 ポート ---------------------------------------------------------- Nikon DSC D70 (PTP mode) usb:001,012 $ sudo gphoto2 --summary 現在の設定状態、対応コマンド、設定可能な数値などがダラダラと出る。
ISOに関することだとこんな感じ
$ sudo gphoto2 --summary | grep ISO 露出のインデックス (フィルム速度 ISO)(0x500f):(readwrite) (type=0x4) Enumeration [200,250,320,400,500,640,800,1000,1250,1600] value: ISO 400 (400) 自動 ISO(0xd054):(readwrite) (type=0x2) Range [0 - 1, step 1] value: Off (0) Auto ISO P/A/DVP Setting(0xd164):(readwrite) (type=0x2) Range [0 - 12, step 1] value: 1/30 (2)
シャッターをきる
撮影&カメラ内蔵メモリに保存
$ sudo gphoto2 --capture-image
撮影&RaspberryPiに保存
$ sudo gphoto2 --capture-image-and-download
撮影&ファイル名をhoge.jpgにしてRaspberryPiの/tmpに保存
$ sudo gphoto2 --capture-image-and-download --filename /tmp/hoge.jpg
カメラ設定の確認/変更
設定可能なリスト一覧
$ sudo gphoto2 --list-config
設定情報の確認/設定可能な値の表示
例)isoの場合
$ sudo gphoto2 --list-config | grep iso /main/imgsettings/iso /main/imgsettings/autoiso
$ sudo gphoto2 --get-config iso Label: ISO スピード Type: RADIO Current: 400 Choice: 0 200 Choice: 1 250 Choice: 2 320 Choice: 3 400 Choice: 4 500 Choice: 5 640 Choice: 6 800 Choice: 7 1000 Choice: 8 1250 Choice: 9 1600
設定情報の変更
例)isoを500へ変更する
$ sudo gphoto2 --set-config iso=500
$ sudo gphoto2 --get-config iso | grep Current Current: 500
例えばこんな感じで
#!/bin/bash DATE=`date +"%Y%m%d-%H%M%S"` sudo /usr/local/bin/gphoto2 --set-config autofocusdrive=1 --capture-image-and-download --filename /home/osmc/Pictures/$DATE.jpg sudo chown osmc.osmc /home/osmc/Pictures/$DATE.jpg
シェルスクリプトを実行するとOSMCのPicturesに日付.jpgで保存され、(OSMCの機能で)テレビに映したり、DLNA経由でスマートフォンから見たりできます。
また、Pythonライブラリの方を使えば、プログラムからいい感じに撮ることも可能です。
参考
- Python interface to libgphoto2
https://pypi.python.org/pypi/gphoto2/
- コンピュータによるカメラのリモート制御を可能とするgPhoto / ITmedia
http://www.itmedia.co.jp/enterprise/articles/0806/10/news082.html - gphoto2を使ってみた / mieki256’s diary
http://blawat2015.no-ip.com/~mieki256/diary/201303171.html - 可能性は無限大(かも) gphoto2 / Todos os Tons
http://ameblo.jp/delphinus1024/entry-12018016756.html
バッテリーで運用するのは厳しい
撮影する内容にもよると思うのですが、長時間カメラの電源をつけっぱなしで何かしたい場合は内蔵バッテリーでは厳しいのです。純正品も売っていますが結構高いので、安価にAC電源化しました。
最後に
単なるインターバル撮影などであればカメラの機能を使えば良いだけですが、RaspberryPiにつなげた各種センサーを使い「一眼レフでないと撮れない写真」を撮ったり、何らかのプログラムと組み合わせたりと、RaspberryPiを使うことで医療や農業など色んな分野で楽しいものがよりお手軽に作れるんじゃないかなぁと思いました。
我が家でのこれの利用法は… また別の記事を書きますね(24時間つけっぱなしで2週間ほど使っていますが、良い感じに撮れています)
2017/7追記
我が家では1年半ほど電源つけっぱなしで毎朝記念撮影→Slackへ通知に使っていますが問題ない感じです。詳細は↓。
コメント
初めまして!
本記事、大変助かりました。
一点だけ(ライブラリの更新のせいかもしれませんが)間違いがあったので連絡いたします。
http://gphoto.org/doc/manual/ref-gphoto2-cli.html
[–filename FILENAME]
filenameオプションは=ではなく’ ‘ (空白)で繋ぐそうです。
本記事を流用させていただいた折に私がハマってしまったので、展開させていただきます。
もしお手すきでしたら、記事自体を更新してくださるとこれからの人も助かるかと思います。
ありがとうございます。
うちの環境では=をつけても付けなくても動いていますが、
マニュアルは無しになってる&現在のバージョンでは動かないっぽいので情報修正しました。
[…] もやし工房 – 一眼レフカメラをRaspberryPiからリモート制御する話 […]