LoginSignup
6
8

More than 5 years have passed since last update.

Python で Sony Camera Remote API を試す (その1: 接続編)

Posted at

はじめに

Python から Sony のカメラ (α / Cyber-shot) を制御したい motivation があったので、その際の作業メモとして記述しています。

環境

カメラ

開発環境

カメラと PC の接続

まずは、カメラと開発環境となる PC を WiFi で接続します。

α7M2 の場合

  1. カメラの MENU を開く
  2. 設定項目一覧から、アプリ一覧 を選択 image.png
    • 「内蔵版」のアプリが表示される場合は、一旦スマートリモコンアプリのアップデートを推奨
    • 「内蔵版」の場合、APIから利用できる機能が制限される
  3. アプリ一覧から スマートリモコン を選択
  4. カメラの画面上に表示される SSID/パスワード のアクセスポイントへ PC を接続 image.png
    • ※ 画像は「内蔵版」の場合
    • 画面上に QR コードが表示されている場合は、カメラの削除ボタン (C4) を押すことでパスワード表示画面へ切り替わる
  5. カメラの表示が 接続中 に切り替われば、カメラと PC の接続が完了 image.png

REST API の動作確認

Python 上から API を叩く前に、まずは基本機能をコマンドライン上から実行し、動作確認をしてみます。
以下、PowerShell 上で実行する場合の手順を記載しますが、curl コマンド等からも同等の手順が行えるはずです。

共通事項

  • 接続先の URL は、 http://192.168.122.1:8080/sony/camera を利用する
    • API のリファレンスには SSDP を利用してカメラを探索する手順が記載されていますが、カメラと PC を1対1で接続する場合は不要です。
  • 原則 HTTP の POST メソッドを使用する
    • GETP 等では501 Not Implemented` が返りエラーとなります。

カメラを撮影モードに切り替える

startRecMode API を実行すると、カメラが撮影モードへ切り替わります。
通常、カメラと PC の接続を確立したら、まずはこれを実行しましょう。
カメラ側の画面がライブビューの映像に切り替われば成功です。

> Invoke-WebRequest -Uri http://192.168.122.1:8080/sony/camera -Method POST -Body '{"method":
 "startRecMode", "params": [], "id": 1, "version": "1.0"}'


StatusCode        : 200
StatusDescription : OK
Content           : {"result":[0],"id":1}
RawContent        : HTTP/1.1 200 OK
                    Connection: close
                    Content-Length: 21
                    Content-Type: application/json

                    {"result":[0],"id":1}
Forms             : {}
Headers           : {[Connection, close], [Content-Length, 21], [Content-Type, application/json]}
Images            : {}
InputFields       : {}
Links             : {}
ParsedHtml        : mshtml.HTMLDocumentClass
RawContentLength  : 21

写真を撮影する

actTakePicture API を実行すると、現在の設定で写真が1枚撮影されます。
復帰値の "result" に格納された URL へアクセスすると、撮影画像を取得することができます。

> Invoke-WebRequest -Uri http://192.168.122.1:8080/sony/camera -Method POST -Body '{"method":
 "actTakePicture", "params": [], "id": 1, "version": "1.0"}'


StatusCode        : 200
StatusDescription : OK
Content           : {"result":[["http:\/\/192.168.122.1:8080\/postview\/memory\/DCIM\/100MSDCF\/DSC0XXXX.JPG?size=Scn"]
                    ],"id":1}
RawContent        : HTTP/1.1 200 OK
                    Connection: close
                    Content-Length: 108
                    Content-Type: application/json

                    {"result":[["http:\/\/192.168.122.1:8080\/postview\/memory\/DCIM\/100MSDCF\/DSC0XXXX.JPG?size=Scn"]
                    ],"id":1}
Forms             : {}
Headers           : {[Connection, close], [Content-Length, 108], [Content-Type, application/json]}
Images            : {}
InputFields       : {}
Links             : {}
ParsedHtml        : mshtml.HTMLDocumentClass
RawContentLength  : 108

ホワイトバランスを変更する

setWhiteBalance API を実行すると、撮影時のホワイトバランスを変更することができます。
プリセットされたシーンの他、色温度を直接指定することもできます。

> Invoke-WebRequest -Uri http://192.168.122.1:8080/sony/camera -Method POST -Body '{"method":
 "setWhiteBalance", "params": ["Color Temperature", true, 2500], "id": 1, "version": "1.0"}'


StatusCode        : 200
StatusDescription : OK
Content           : {"result":[0],"id":1}
RawContent        : HTTP/1.1 200 OK
                    Connection: close
                    Content-Length: 21
                    Content-Type: application/json

                    {"result":[0],"id":1}
Forms             : {}
Headers           : {[Connection, close], [Content-Length, 21], [Content-Type, application/json]}
Images            : {}
InputFields       : {}
Links             : {}
ParsedHtml        : mshtml.HTMLDocumentClass
RawContentLength  : 21

次回

実際に Python 上から API を実行してみます。

6
8
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
6
8