mieki256's diary



2013/03/17() [n年前の日記]

#1 [digital] gphoto2を使ってみた

コマンドラインでデジカメを制御・リモートコントロールできる、gphoto2 というツールを試しに使ってみた。VMWare Player を使って仮想PCを立ち上げ(?)、そこで Ubuntu Linux を動かしてテストをした。
Ubuntu の場合、gphoto2 は標準で入ってない。apt-get その他を使ってインストールしないといけない。今回は、Ubuntuソフトウェアセンターを起動して、そこからインストールした。

使用例をメモ。 :

Ubuntu 上でshellを起動して、巷の記事を参考に入力。それぞれ何を指定してるのか、よく分かってないけど、一応動いてるように見える。

ヘルプ表示。
$ 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 項目名=値
set-config は、インデックス値、もしくは、値そのものを指定するらしい。

カメラ名の表示。
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カメラの型式
isoISO
exposurecompensation露出
imageformat画像形式
imagequality画像品質
imagesize画像サイズ
flashmodeフラッシュモード
assistlight補助光
meteringmode測光モード
focusingpointフォーカスの焦点
photoeffect写真の効果
zoomズーム
shutterspeedシャッター速度
PowerShot A300の場合、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 設定項目=インデックス値、を使えばよかったことに気付いたりして。

問題点。 :

時々、「デバイスがロックできない」と言われて制御できなくなった。
$ 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カメラのほうが小さいし画像取得も速いのではないかと。もちろん、解像度と画質は、コンデジよりはるかに劣るだろうけど…。

テストに使ったシェルスクリプトをメモ。 :

capinit.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 日分です。

過去ログ表示

Prev - 2013/03 - Next
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project