ずいぶん間が空いてしまいましたが、こちらの記事の続きです。
Sony製カメラにはCamera Remote API というのがあって、Wi-Fi接続したカメラに対してHTTPで撮影・コンテンツ取得などの遠隔操作を行うことが可能です。ただしライブラリの類は一切提供されていない為あらゆるシーケンスを自分で書く必要があり、これが利用する上で大きなハードルとなっていました(SDK無しでAmazon AWSを扱うようなもんですね)。
そのような状況なので、アプリケーション開発者がもっとお手軽にカメラ機能を活用できるようSony Camera Remote APIのラッパーライブラリを作成しました。**こちら**のレポジトリで公開しています。言語はRubyで、sony_camera_remote_api
という名前のRuby gemとして利用可能です。
特徴
- カメラとのWi-Fi接続をプログラム内から実行できる
- 撮影・コンテンツの取得がめっちゃ楽
- ライブビューの取得がめっちゃ楽
- カメラの設定変更がめっちゃ楽
- Wi-Fi接続が切れたら自動で再接続
- CLIがついてくる(Raspbery Piの
raspistill
みたいな感じ)
インストール
他のgemと同様です。Bundlerを利用している場合はGemfileに下記のように記述し、bundle install
を実行します。
gem 'sony_camera_remote_api'
もしくは下記のようにグローバルにインストールします。
$ gem install sony_camera_remote_api
使い方
ユーザーが利用するクラスはCamera
クラスとShelf
クラスの2つだけです。
クラス | 機能 |
---|---|
Camera | メインであるカメラ機能を提供するクラス |
Shelf | カメラのWi-Fi設定の管理と接続機能を提供するクラス。Wi-Fi接続機能はLinuxとMac OS Xのみ利用可能 |
Shelf
クラスの接続機能は内部で自作のこれとかあれといったシェルスクリプトを呼んでいるだけなので、環境によっては動かないかも知れません…(Ubuntu 14.04とOS X Yosemiteでは確認済みです)。
使い方の大まかな流れはこんな感じです。
-
SonyCameraRemoteAPI::Shelf
インスタンスを生成。引数はWi-Fi設定を保存するファイルのパスです。デフォルトでは~/.sonycam.shelf
が設定ファイルとして使用されます。 - 初回は設定が無いので、カメラのWi-Fi設定を
Shelf#add_and_select
で新規追加します。Wi-Fi接続はShelf#connect
で実行します。 -
SonyCameraRemoteAPI::Camera
インスタンスを生成。この時引数にShelf
インスタンスを与えるとSSDPの結果を保存してくれるので、 次回からインスタンス生成が早くなります。 - あとはお好きに!
下記のサンプルは静止画一枚を撮影し、即座にPCに転送するプログラムです。
require 'sony_camera_remote_api'
# お手持ちのカメラのWi-Fi設定
ssid = "DIRECT-xxxx:ILCE-QX1" # SSID
pass = "xxxxxxxx" # Passphrase
interface = "wlan0" # 接続に使うインターフェース名
# (1) Shelfインスタンスを生成
shelf = SonyCameraRemoteAPI::Shelf.new ".sonycam.shelf"
# (2) カメラ設定を追加し、接続
shelf.add_and_select ssid, pass, interface
shelf.connect
# (3) Cameraインスタンスを生成
cam = SonyCameraRemoteAPI::Camera.new shelf
# 静止画(一枚)撮影モードに変更
cam.change_function_to_shoot 'still', 'Single'
# 撮影&画像転送。返り値は保存した画像ファイルの相対パス
filename = cam.capture_still
puts filename #=> 'DSC_xxxxx.JPG'
ドキュメント&チュートリアル
各クラス・メソッドの詳細が知りたい方は、**こちら**のAPIドキュメントをご参照ください。Camera
クラスには全部で23個のラッパーメソッドがあり、それぞれの使用例も載っています。
また、レポジトリの**Wikiページから、本ライブラリの詳細なチュートリアル(英語)を利用できます。先頭から読んでいただくのが一番ですが、カメラ機能ごとに章を分けているので、興味のある機能だけ見ることも可能です。例えばライブビューの章**では、毎フレームのライブビュー画像を保存するサンプルなどを載せています。下記を実行すると、1.jpg, 2.jpg ...
といった連番の画像がPCに次々と保存されていきます。
# ライブビュースレッドを起動
th = cam.start_liveview_thread do |img|
# このブロックは毎フレームごとに呼び出され、画像をブロックパラメータから取得できる
filename = "#{img.sequence_number}.jpg"
# 画像を保存
File.write filename, img.jpeg_data
puts "wrote #{filename}."
end
th.join
Sony Camera Remote CLI
これは本ライブラリのインストール時に付いてくる、サンプルプログラムも兼ねたCLIアプリケーションです。Raspberry Piのカメラモジュールのように、コマンドラインからカメラへの接続・撮影・コンテンツ取得が可能です。sonycam
というコマンドで実行でき、下記のように撮影モードごとのサブコマンドを備えています。
サブコマンド | 説明 |
---|---|
still |
静止画の単写(一枚)撮影 |
rapid |
静止画の連写撮影 |
intstill |
静止画のインターバル撮影 |
movie |
動画の撮影 |
looprec |
動画のループ撮影 |
contents |
コンテンツ情報の取得・転送 |
shelf |
カメラのWi-Fi接続設定の管理・接続先の選択 |
例えば、sonycam still
と実行すると、下記のようにカメラへのWi-Fi接続を行い、静止画を一枚撮影してPCに転送します。
$ sonycam still
sudo bash /home/kota65535/sony_camera_remote_api/scripts/connect.sh DIRECT-5HH5:HDR-AZ1 9gkH5XW8 wlan3
...(wpa_supplicantのログがバーッと出る)...
Connected successfully.
Route added successfully.
Initializing camera...
Camera initialization finished.
I, [2016-10-05T03:39:20.639442 #27888] INFO -- Camera: Capturing...
I, [2016-10-05T03:39:24.449122 #27888] INFO -- Camera: Capture finished. (3.81 sec)
I, [2016-10-05T03:39:24.580379 #27888] INFO -- Camera: Transferring DSC03192.JPG...
I, [2016-10-05T03:39:26.509468 #27888] INFO -- Camera: Transferred DSC03192.JPG. (1.93 sec)
各サブコマンドはオプションを与えることで画質や連写速度などの設定を変更できます。例えば動画フォーマットをXAVC Sに変更するなら--format 'XAVC S'
といった感じです。どのようなオプションが存在するかは、sonycam help <COMMAND>
で確認することができます。また、--setting
オプションで各設定の現在の値と、設定可能な値を確認することができます。"=>"
で示された値が現在の設定値です。
$ sonycam movie --format 'XAVC S' --setting
Already connected.
Route already configured.
Initializing camera...
Camera initialization finished.
Movie File Format:
* MP4
=> XAVC S
Movie Quality:
* 50M 60p
=> 50M 30p
* 50M 24p
Steady Mode:
* on
=> off
Color Setting:
=> Neutral
* Vivid
...(省略)...
まだまだ発展途上です
本ライブラリは、本来ならばSony Camera Remote APIの対応機種全てでテストを行いたいところですが、体がいくつあっても足りないので4機種でテストを実施しています(HDR-AZ1, FDR-X1000V, DSC-RX100M4, ILCE-QX1)。もし何か不都合な動作などがありましたら、気軽にこちらへIssueを投げて下さい。
また、リモート再生機能などラッパーメソッドを未実装の機能がいくつかあるので、こちらも今後対応予定です。
自作ライブラリを公開するのは初なので、いろいろと未熟な部分があるかもしれませんが、今後ともよろしくお願いします。ここまで読んで下さりありがとうございました!