2013/03/17(日) [n年前の日記]
#1 [digital] gphoto2を使ってみた
コマンドラインでデジカメを制御・リモートコントロールできる、gphoto2 というツールを試しに使ってみた。VMWare Player を使って仮想PCを立ち上げ(?)、そこで Ubuntu Linux を動かしてテストをした。
- 環境は、Windows7 x64 + VMWare Player + Ubuntu Linux 12.04 + gphoto2。
- USB接続したデジカメは、Canon PowerShot A300。
◎ 使用例をメモ。 :
Ubuntu 上でshellを起動して、巷の記事を参考に入力。それぞれ何を指定してるのか、よく分かってないけど、一応動いてるように見える。
ヘルプ表示。
USB接続されてるデジカメを自動検出。
デジカメを撮影モードにする。
接続したデジカメの設定項目一覧を表示。
gphoto2 にはシェルモードとやらがあるそうで。そのモードにすると、コマンドだけをどんどん打ち込んでいけるので、動作確認が少し楽になる。TABキーを押せば、コマンド文字列の補完もできる。
各設定の状態確認、あるいは設定をするには、以下を使う。
set-config は、インデックス値、もしくは、値そのものを指定するらしい。
カメラ名の表示。
現在のISO値を確認。
項目名と内容についてメモ。
PowerShot A300の場合、shutterspeed は指定しても無視された。たぶん固定されてるか、別の項目値から自動で決定されてしまうのかなと。
撮影、かつ、PC側に撮影画像をDLするには、capture-image-and-download を使う。撮影すると一旦デジカメ内のカードメディアに画像が保存され、その画像をDL後、デジカメ側の画像を自動で削除してくれる模様。
撮影後、PC側に画像をダウンロードしないで、デジカメカード内に残しっぱなしにするなら、gphoto2 --capture-image でいいらしい。
デジカメカード内の画像を全取得するなら、gphoto2 --get-all-files。
露出の指定は、少しハマった。「=0」を指定したら「露出:+2」になるのかと思いきや、「露出:0」になったりして。「=0」の指定が、「露出=0にしろ」と解釈されてしまったらしい…。「=+2」を指定したら、「露出:+2」になってくれた。
ヘルプ表示。
$ gphoto2 --help $ gphoto2 --usage
USB接続されてるデジカメを自動検出。
$ gphoto2 --auto-detect 型式 ポート ---------------------------------------------------------- Canon PowerShot A300 (PTP mode) usb:002,004
デジカメを撮影モードにする。
$ gphoto2 --set-config capture=on
接続したデジカメの設定項目一覧を表示。
$ gphoto2 --list-config /main/actions/focuslock /main/actions/syncdatetime /main/settings/ownername /main/settings/capturetarget /main/settings/capture /main/status/model /main/status/firmwareversion /main/imgsettings/imagequality /main/imgsettings/imageformat /main/imgsettings/imagesize /main/imgsettings/iso /main/imgsettings/whitebalance /main/imgsettings/photoeffect /main/capturesettings/zoom /main/capturesettings/assistlight /main/capturesettings/exposurecompensation /main/capturesettings/flashmode /main/capturesettings/shootingmode /main/capturesettings/aperture /main/capturesettings/focusingpoint /main/capturesettings/shutterspeed /main/capturesettings/meteringmode /main/capturesettings/afdistance (以下略)
gphoto2 にはシェルモードとやらがあるそうで。そのモードにすると、コマンドだけをどんどん打ち込んでいけるので、動作確認が少し楽になる。TABキーを押せば、コマンド文字列の補完もできる。
$ gphoto2 --shell gphoto2: {/home/mieki256/Pictures} /> list-config /main/actions/focuslock /main/actions/syncdatetime /main/settings/ownername (以下略)
各設定の状態確認、あるいは設定をするには、以下を使う。
状態確認 | get-config 項目名 |
設定(インデックス値か値そのものを指定) | set-config 項目名=値 |
設定(インデックス値を指定) | set-config-index 項目名=インデックス値 |
設定(値そのものを指定) | set-config-value 項目名=値 |
カメラ名の表示。
gphoto2: {/home/mieki256/Pictures} /> get-config model Label: カメラの型式 Type: TEXT Current: Canon PowerShot A300
現在のISO値を確認。
gphoto2: {/home/mieki256/Pictures} /> get-config iso Label: ISO スピード Type: RADIO Current: 50 Choice: 0 50 Choice: 1 100 Choice: 2 200 Choice: 3 400 Choice: 4 自動
項目名と内容についてメモ。
model | カメラの型式 |
iso | ISO |
exposurecompensation | 露出 |
imageformat | 画像形式 |
imagequality | 画像品質 |
imagesize | 画像サイズ |
flashmode | フラッシュモード |
assistlight | 補助光 |
meteringmode | 測光モード |
focusingpoint | フォーカスの焦点 |
photoeffect | 写真の効果 |
zoom | ズーム |
shutterspeed | シャッター速度 |
撮影、かつ、PC側に撮影画像をDLするには、capture-image-and-download を使う。撮影すると一旦デジカメ内のカードメディアに画像が保存され、その画像をDL後、デジカメ側の画像を自動で削除してくれる模様。
gphoto2: {/home/mieki256/Pictures} /store_00010001/DCIM/411CANON> capture-image-and-download 新しいファイルの格納場所: /store_00010001/DCIM/411CANON/IMG_1107.JPG 'IMG_1107.JPG' をフォルダ '/store_00010001/DCIM/411CANON' からダウンロード中... ファイルを IMG_1107.JPG で保存します カメラ内のファイル /store_00010001/DCIM/411CANON/IMG_1107.JPG の削除をしています 'IMG_1107.JPG' をフォルダ '/store_00010001/DCIM/411CANON' から削除中...ちなみに上の事例では、「{/home/mieki256/Pictures}」がPC側のカレントディレクトリ、「/store_00010001/DCIM/411CANON」がデジカメ内メディアのカレントディレクトリを示している。
撮影後、PC側に画像をダウンロードしないで、デジカメカード内に残しっぱなしにするなら、gphoto2 --capture-image でいいらしい。
デジカメカード内の画像を全取得するなら、gphoto2 --get-all-files。
露出の指定は、少しハマった。「=0」を指定したら「露出:+2」になるのかと思いきや、「露出:0」になったりして。「=0」の指定が、「露出=0にしろ」と解釈されてしまったらしい…。「=+2」を指定したら、「露出:+2」になってくれた。
gphoto2: {/home/mieki256/Pictures} /store_00010001/DCIM/411CANON> get-config exposurecompensation Label: 露出度 Type: RADIO Current: 0 Choice: 0 +2 Choice: 1 +1 2/3 Choice: 2 +1 1/3 Choice: 3 +1 Choice: 4 +2/3 Choice: 5 +1/3 Choice: 6 0 Choice: 7 -1/3 Choice: 8 -2/3 Choice: 9 -1 Choice: 10 -1 1/3 Choice: 11 -1 2/3 Choice: 12 -2 gphoto2: {/home/mieki256/Pictures} /store_00010001/DCIM/411CANON> set-config exposurecompensation=12 gphoto2: {/home/mieki256/Pictures} /store_00010001/DCIM/411CANON> set-config exposurecompensation=-2 gphoto2: {/home/mieki256/Pictures} /store_00010001/DCIM/411CANON> set-config exposurecompensation=+2後になって、set-config-index 設定項目=インデックス値、を使えばよかったことに気付いたりして。
◎ 問題点。 :
時々、「デバイスがロックできない」と言われて制御できなくなった。
撮影画像にノイズが入ることにも気がついた。最初の頃の撮影画像は問題が無いけれど、時間が立つにつれ赤い点や白い点がポツポツと出始める。デジカメ側はずっと電源が入った状態になるのだけど、おそらくはそのせいで、デジカメ本体が熱を持ち、CCDに熱ノイズが発生するのではないかと想像。これは結構致命的。電源投入後に急いで作業をして、できるだけ早く電源をoffにする、といった注意が必要かもしれず。
電源on/offも制御出来たら嬉しいのだけど、そんなことはできるんだろうか? 電源on→offはともかく、電源off→onは難しそうだけど…。それができないと、熱の問題で、定点観測等にも使えない気がする。
露出を変えて3枚撮影するのに、約40秒かかった。仮に、電動雲台等を自作して全自動でパノラマ撮影するとなると、60枚ぐらい必要になるだろうから…。撮影時間だけでも単純計算で40分ぐらいかかってしまう。かなり厳しい。周りの風景がどんどん変わってしまう…。
自分が持ってる Canon PowerShot A300は、CCDが死にかけているぐらい古い機種なので、PCからリモート制御できるらしいのだけど。 _2009年以降のCanon製コンデジは制御機能が省かれている らしいので、古いデジカメじゃないと、こういう実験はできないっぽい。
$ gphoto2 --get-config flashmode *** エラー *** I/O ライブラリ ('デバイスをロックすることが出来ませんでした') でエラーが発生しました: 既にカメラは使用中です。 *** エラー (-60: 'デバイスをロックすることが出来ませんでした') ***デジカメの電源を再投入すれば、受け付けるようになるのだけど。何が起きているのか、ちょっとよく分からない。何か別のアプリと制御を取り合ってる?
撮影画像にノイズが入ることにも気がついた。最初の頃の撮影画像は問題が無いけれど、時間が立つにつれ赤い点や白い点がポツポツと出始める。デジカメ側はずっと電源が入った状態になるのだけど、おそらくはそのせいで、デジカメ本体が熱を持ち、CCDに熱ノイズが発生するのではないかと想像。これは結構致命的。電源投入後に急いで作業をして、できるだけ早く電源をoffにする、といった注意が必要かもしれず。
電源on/offも制御出来たら嬉しいのだけど、そんなことはできるんだろうか? 電源on→offはともかく、電源off→onは難しそうだけど…。それができないと、熱の問題で、定点観測等にも使えない気がする。
露出を変えて3枚撮影するのに、約40秒かかった。仮に、電動雲台等を自作して全自動でパノラマ撮影するとなると、60枚ぐらい必要になるだろうから…。撮影時間だけでも単純計算で40分ぐらいかかってしまう。かなり厳しい。周りの風景がどんどん変わってしまう…。
自分が持ってる Canon PowerShot A300は、CCDが死にかけているぐらい古い機種なので、PCからリモート制御できるらしいのだけど。 _2009年以降のCanon製コンデジは制御機能が省かれている らしいので、古いデジカメじゃないと、こういう実験はできないっぽい。
◎ とりあえず自動撮影はできそうだけど。 :
色々厳しい部分があるものの、Linux の入ったノートPCと、gphoto2 から制御できるデジカメを持ち歩けば、露出を変えて自動撮影、みたいなことができそうではあるなと。HDRI作成が少しは楽に…。
でも、RAW画像からHDR画像を生成、みたいな話をどこかで見かけた記憶も。それができるなら、RAW画像を取り出せるデジカメを入手して〜とかやったほうが楽なのかな…?
調べてみたら、RAWから作れるHDR画像は、「HDR風の画像」であって、HDRIではないっぽい。
そもそも今時のデジカメは、 _オートブラケット なる機能があったりするらしい。 _2011年度版 各社カメラのHDRオートブラケット撮影能力リスト を眺めた感じでは、gphoto2から露出を変えて撮影、なんてことをやるよりも、最初からオートブラケット機能を持ってるデジカメを使うほうが全然楽であろう予感も。
コンデジじゃなくて、Webカメラでこういうことはできないんだろうか。どうせPCを持ち歩いて制御するなら、Webカメラのほうが小さいし画像取得も速いのではないかと。もちろん、解像度と画質は、コンデジよりはるかに劣るだろうけど…。
でも、RAW画像からHDR画像を生成、みたいな話をどこかで見かけた記憶も。それができるなら、RAW画像を取り出せるデジカメを入手して〜とかやったほうが楽なのかな…?
調べてみたら、RAWから作れるHDR画像は、「HDR風の画像」であって、HDRIではないっぽい。
そもそも今時のデジカメは、 _オートブラケット なる機能があったりするらしい。 _2011年度版 各社カメラのHDRオートブラケット撮影能力リスト を眺めた感じでは、gphoto2から露出を変えて撮影、なんてことをやるよりも、最初からオートブラケット機能を持ってるデジカメを使うほうが全然楽であろう予感も。
コンデジじゃなくて、Webカメラでこういうことはできないんだろうか。どうせPCを持ち歩いて制御するなら、Webカメラのほうが小さいし画像取得も速いのではないかと。もちろん、解像度と画質は、コンデジよりはるかに劣るだろうけど…。
◎ テストに使ったシェルスクリプトをメモ。 :
capinit.sh。撮影前の初期化用。
caprun.sh。露出を変えて3枚撮影。
caprnd.sh。デジカメのカード内の全ファイルを取得、かつ、削除。
#!/bin/bash # 撮影モード有効化・設定初期化 echo gphoto2 on. echo -e "\n撮影モード有効化" gphoto2 --set-config capture=on gphoto2 --get-config capture echo -e "\nフラッシュ無効化" gphoto2 --set-config flashmode=0 gphoto2 --get-config flashmode echo -e "\n画像サイズ設定" gphoto2 --set-config imagesize=0 gphoto2 --get-config imagesize echo -e "\n画質設定" gphoto2 --set-config imagequality=2 gphoto2 --get-config imagequality echo -e "\nISO設定" gphoto2 --set-config iso=50 gphoto2 --get-config iso
caprun.sh。露出を変えて3枚撮影。
#!/bin/bash # 露出を変えて撮影 START=`date +%s` echo 露出 = 0 gphoto2 --set-config exposurecompensation=0 echo 撮影開始 gphoto2 --capture-image # gphoto2 --capture-image-and-download echo 露出 = -2 gphoto2 --set-config exposurecompensation=-2 echo 撮影開始 gphoto2 --capture-image echo 露出 = +2 gphoto2 --set-config exposurecompensation=+2 echo 撮影開始 gphoto2 --capture-image END=`date +%s` SS=`expr ${END} - ${START}` echo "${SS} sec."
caprnd.sh。デジカメのカード内の全ファイルを取得、かつ、削除。
#!/bin/bash # 撮影モード無効化・ファイル取得 echo -e "\n露出=0に設定" gphoto2 --set-config exposurecompensation=0 gphoto2 --get-config exposurecompensation echo -e "\n全ファイルをダウンロード" gphoto2 --get-all-files echo -e "\n撮影モード無効化" gphoto2 --set-config capture=off gphoto2 --get-config capture echo -e "\nカード内の全ファイルを一覧表示" gphoto2 -L echo -e "\nカード内の全ファイルを削除" gphoto2 --delete-all-files -R
[ ツッコむ ]
以上、1 日分です。