0
0

More than 1 year has passed since last update.

gphoto2を使ってカメラから画像を自動で取り込む

Last updated at Posted at 2022-01-03

これはなに?

私は写真を取るのが好きです。でも、PCを立ち上げ、ログインして、コマンドを叩くなど行い、
写真をPCに取り込むのがめんどくさいです。紆余曲折、やっと簡単に取り込めるようになったので、ご紹介します。

想定する利用方法

  1. 写真をとる
  2. カメラを操作し、お家LAN(無線LAN インフラストラクチャーモード)につなぐ。IPアドレスはカメラ固定であること。
  3. PC上の常駐PGが、IPアドレスにつながったことを検知し、自動でgphoto2の機能を使って写真をPCに移動する。
  4. カメラの電源を切る。(もしくは勝手に電源が切れる)

つまり、PCに触ることなく、カメラの操作だけで、カメラ内の画像がPCに移動されます。
面倒なSDカードの抜き差しや、カメラメーカのツールを起動なしで、PCに取り込みができます。

これさえできれば、あとはイントラネット内でWEBで鑑賞など色々応用ができますね!

準備するもの

  • gphoto2 に関するライブラリ類
  • ffi-gphoto2
  • ruby   バージョン等は下の通り。
    
    webalbum@intra:~/work/autoTransFromCamera$ uname -a
    Linux intra 4.9.35-v7+ #1014 SMP Fri Jun 30 14:47:43 BST 2017 armv7l GNU/Linux
    webalbum@intra:~/work/autoTransFromCamera$ ruby -v
    ruby 2.4.1p111 (2017-03-22 revision 58053) [armv7l-linux-eabihf]
    webalbum@intra:~/work/autoTransFromCamera$ gem list |grep ffi
    ffi (1.15.4)
    ffi-gphoto2 (0.9.0)
    webalbum@intra:~/work/autoTransFromCamera$ gphoto2  -v
    gphoto2 2.5.11
     
    Copyright (c) 2000-2016 Lutz Mueller and others
    …<中略>… 
    photo2         2.5.11         gcc, popt(m), exif, cdk, aa, jpeg, readline
    libgphoto2      2.5.12         all camlibs, gcc, ltdl, EXIF
    libgphoto2_port 0.12.0         gcc, ltdl, USB, serial without locking
    webalbum@intra:~/work/autoTransFromCamera$
    

あとはこれ

ここに記載している通り、カメラ内の画像を移動させます。つまりカメラ内の画像を削除する
ことを意味しており、何らかの不具合で大切な写真が削除されることも否定できません。
そのため、自己責任 でお願いします。

なお、動作確認が取れたカメラは、EOSR,EOS 7DMarkII,PowerShotSX730HSですが、gphoto2が対応している
カメラなら同じかと思います。

備忘

gphoto2でハマった点 wifiでの接続の仕方

wifiでの接続方法がわかりませんでした。コマンドラインと同じくportにptpipと設定したのですが、
駄目で何かしらカメラのモデルを設定しないと動きませんでした。(なぜ)


 camera_model='Canon EOS 7D MarkII'
 <中略>
  camera = GPhoto2::Camera.new(camera_model,"ptpip:#{camera_ip_addres}")

理由はわかりませんが、カメラモデルに、EOSRを設定したところ、エラーになりました。
しかし、7DMarkIIを指定したら何故か動きました。(なぜ?)
対応カメラは、libgphoto2のバージョンによりますが、下の通りです。

gphoto2でハマった点 カメラが見えない。

当初コマンドラインから操作しようと思いました。ですが、一回コマンドを発行すると
カメラ側のIPアドレスにpingを打っても応答がなくなり、約10秒後に復活するようでした。
そのため、コマンドラインでは無理と思い、rubyのPGをより操作することを検討しました。

トランザクション

いつも悩むのがトランザクション?の単位です。
全量のファイルをカメラからPCのへコピーし、その後、カメラ内のファイルを消す方法が考えられますが、
慎重に行いたいため、1ファイルのコピーし、コピー先のファイルサイズが同じことを確認し、
カメラ内のファイルを削除しています。

ハマった点 Out of memory

カメラ内の大量の写真があったとき。。。


[13868762.678745] Normal: 113*4kB (MEC) 286*8kB (UMEC) 504*16kB (UMEC) 112*32kB (UMEC) 29*64kB (UMEC) 1*128kB (M) 0*
256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 16372kB
[13868762.678780] 4072 total pagecache pages
[13868762.678784] 248 pages in swap cache
[13868762.678789] Swap cache stats: add 17143743, delete 17143495, find 584280078/589530693
[13868762.678790] Free swap  = 0kB
[13868762.678793] Total swap = 1048572kB
[13868762.678795] 241664 pages RAM
[13868762.678797] 0 pages HighMem/MovableOnly
[13868762.678799] 5286 pages reserved
[13868762.678801] 2048 pages cma reserved
[13868762.678803] [ pid ]   uid  tgid total_vm      rss nr_ptes nr_pmds swapents oom_score_adj name
<中略>
[13868762.679616] Out of memory: Kill process 19132 (ruby) score 456 or sacrifice child
[13868762.679632] Killed process 19132 (ruby) total-vm:967264kB, anon-rss:691336kB, file-rss:0kB, shmem-rss:0kB

とのことです。

色々考えたのですが、最大100ファイルとして、そこで強制的にruby のPGを終了させ、次の処理で持ち越すようにしました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0