LoginSignup
27
17

More than 5 years have passed since last update.

Sony Camera Remote APIがめっちゃ使いやすくなるラッパーライブラリ作りました

Last updated at Posted at 2016-10-05

ずいぶん間が空いてしまいましたが、こちらの記事の続きです。

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接続機能はLinuxMac OS Xのみ利用可能

Shelfクラスの接続機能は内部で自作のこれとかあれといったシェルスクリプトを呼んでいるだけなので、環境によっては動かないかも知れません…(Ubuntu 14.04とOS X Yosemiteでは確認済みです)。

使い方の大まかな流れはこんな感じです。

  1. SonyCameraRemoteAPI::Shelfインスタンスを生成。引数はWi-Fi設定を保存するファイルのパスです。デフォルトでは~/.sonycam.shelfが設定ファイルとして使用されます。
  2. 初回は設定が無いので、カメラのWi-Fi設定をShelf#add_and_selectで新規追加します。Wi-Fi接続はShelf#connectで実行します。
  3. SonyCameraRemoteAPI::Cameraインスタンスを生成。この時引数にShelfインスタンスを与えるとSSDPの結果を保存してくれるので、 次回からインスタンス生成が早くなります。
  4. あとはお好きに!

下記のサンプルは静止画一枚を撮影し、即座に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を投げて下さい。
また、リモート再生機能などラッパーメソッドを未実装の機能がいくつかあるので、こちらも今後対応予定です。

自作ライブラリを公開するのは初なので、いろいろと未熟な部分があるかもしれませんが、今後ともよろしくお願いします。ここまで読んで下さりありがとうございました!

27
17
9

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
27
17