一眼レフカメラをRaspberryPiからリモート制御する話

デジタルカメラを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
黒い画面でシャッターを切る事ができます

ココを見てる人は大好きであろう黒い画面で、シャッターを切る事ができます

対応機種

機種によりできない機能もありますが、キヤノンとニコンのデジタル一眼レフで新しすぎないもの以外はたいてい対応しているように思います。

オークション等でかなり安価に取引されているちょっと古めのコンデジや、最近の高めのコンデジも対応しているので、その辺りでも遊べます。

RaspberryPiへのインストール

新しいバージョンのgphotoを普通に入れようとすると結構面倒らしいのですが、RaspberryPi用(Ubuntuでも動くようです)のインストールスクリプトを作ってくださってる方が居ますので、それを使います。

今回は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にする必要がありました。下記のページを見る感じだと古いカメラは設定変更が要る感じです。

接続/動作確認

カメラとRaspberryPiを接続し、カメラの電源を入れると/var/log/messagesに下記のようなメッセージが流れると思います。

Feb 27 07:12:16 osmc kernel: [1082322.281536] usb 1-1.2.4.2: new full-speed USB device number 12 using dwc_otg
Feb 27 07:12:16 osmc kernel: [1082322.386160] usb 1-1.2.4.2: New USB device found, idVendor=04b0, idProduct=0406
Feb 27 07:12:16 osmc kernel: [1082322.386195] usb 1-1.2.4.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
Feb 27 07:12:16 osmc kernel: [1082322.386214] usb 1-1.2.4.2: Product: NIKON DSC D70
Feb 27 07:12:16 osmc kernel: [1082322.386231] usb 1-1.2.4.2: Manufacturer: NIKON

動作確認は基本、公式マニュアルのチュートリアルにしたがいますが、一点気をつけるのはRaspberryPiではsudoで実行すること。

$ 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経由でスマートフォンから見たりできます。

参考

 

バッテリーで運用するのは厳しい

撮影する内容にもよると思うのですが、長時間カメラの電源をつけっぱなしで何かしたい場合は内蔵バッテリーでは厳しいのです。純正品も売っていますが結構高いので、安価にAC電源化しました。

一眼レフデジカメ用の外部電源を自作した話

最後に

単なるインターバル撮影などであればカメラの機能を使えば良いだけですが、RaspberryPiにつなげた各種センサーを使い「一眼レフでないと撮れない写真」を撮ったり、何らかのプログラムと組み合わせたりと、RaspberryPiを使うことで医療や農業など色んな分野で楽しいものがよりお手軽に作れるんじゃないかなぁと思いました。

我が家でのこれの利用法は… また別の記事を書きますね(24時間つけっぱなしで2週間ほど使っていますが、良い感じに撮れています)

2017/7追記

我が家では1年半ほど電源つけっぱなしで毎朝記念撮影→Slackへ通知に使っていますが問題ない感じです。詳細は↓。

子どもがいる家庭で使うRaspberryPi&Slack

子どもがいる家庭で使うRaspberryPi&Slack

このエントリーをはてなブックマークに追加

同一タグの最新記事:

同一カテゴリ(IT)の最新記事:

最近投稿された記事:

他のカテゴリの記事も読んでみる: