先日購入したRICOHの360度カメラ「THETA SC」がAPI公開されていたので
ちょっと触ってみた記録です。
公式サイト
THETA DEVELOPERS
https://developers.theta360.com/ja/
実行環境
OS: Windows 10 Pro
Poweshell: ver 5.1.14393.206
THETA API: v2.0
公式サイトをよく読めば書いてありましたが,
明示的にv2.1に切り替えを行わないとAPI v2.0になります。
PSコマンドの試し方
- THETA SCを立ち上げ、WIFIをONにする
- WindowsからTHETAにWIFI接続する(接続時のパスワードは説明書を参照)
- WindowsのPowerShellを立ち上げPSコマンドを実行
実行してみたAPIとPSコマンド
公式サイトみながら適当にAPI (v2.0)実行してみました。
なお、別の環境で実行する場合、コマンド中のsessionID、ファイル名などはお使いの環境に合わせて変更してください。
【Protocol】Info
カメラに関する基本情報や、サポートしている機能を取得
実行したPSコマンド
Invoke-RestMethod -Uri "http://192.168.1.1:80/osc/info" -Method GET
実行結果
manufacturer : RICOH
model : RICOH THETA SC
serialNumber : 30102839
firmwareVersion : 01.00
supportUrl : https://theta360.com/en/support/
apiLevel : {1, 2}
endpoints : @{httpPort=80; httpUpdatesPort=80}
gps : False
gyro : False
uptime : 536
api : {/osc/info, /osc/state, /osc/checkForUpdates, /osc/commands/execute...}
【Protocol】State
カメラの状態を取得
実行したPSコマンド
Invoke-RestMethod -Uri "http://192.168.1.1:80/osc/state" -Method POST
実行結果
fingerprint state
---------- -----
FIG_0004 @{sessionId=SID_0002; batteryLevel=0.33; storageChanged=False; _captureStatus=idle; _recordedTime=0; _re...
【protocols】checkForUpdates
現在の状態IDを取得し、Stateの状態変化を確認
実行したPSコマンド
Invoke-RestMethod -Uri http://192.168.1.1:80/osc/checkForUpdates -Method POST -Body (ConvertTo-Json @{"stateFingerprint"="FIG_0005"}) -ContentType "application/json"
実行結果
stateFingerprint throttleTimeout
---------------- ---------------
FIG_0004 1
【commands】camera.startSession
セッションを開始。セッションIDを発行
実行したPSコマンド
Invoke-RestMethod -Uri http://192.168.1.1:80/osc/commands/execute -Method POST -Body (ConvertTo-Json @{"name"="camera.startSession";"parameters"=@{}}) -ContentType "application/json"
実行結果
name state results
---- ----- -------
camera.startSession done @{sessionId=SID_0005; timeout=180}
【commands】camera.takePicture
静止画撮影を開始
実行したPSコマンド
Invoke-RestMethod -Uri http://192.168.1.1:80/osc/commands/execute -Method POST -Body (ConvertTo-Json @{"name"="camera.takePicture";"parameters"=@{"sessionId"="SID_0005"}}) -ContentType "application/json"
実行結果
name state id progress
---- ----- -- --------
camera.takePicture inProgress 1 @{completion=0.00}
【commands】camera.listImages
静止画ファイルリストを取得
実行したPSコマンド
Invoke-WebRequest -Uri http://192.168.1.1:80/osc/commands/execute -Method POST -Body (ConvertTo-Json @{"name"="camera.listImages";"parameters"=@{"entryCount"=50;"maxSize"=160;"includeThumb"="false"}}) -ContentType "application/json"
実行結果
StatusCode : 200
StatusDescription : OK
Content : {"name":"camera.listImages","state":"done","results":{"entries":[{"name":"R0010045.JPG","uri":"100R
ICOH/R0010045.JPG","size":4116645,"dateTimeZone":"2016:11:05 16:18:56+09:00","width":5376,"height":
26...
RawContent : HTTP/1.1 200 OK
Pragma: no-cache
Max-Age: 0
X-Content-Type-Options: nosniff
Connection: close
Accept-Ranges: bytes
Content-Length: 4778
Cache-Control: no-cache, no-store, max-age=0, must-revali...
Forms : {}
Headers : {[Pragma, no-cache], [Max-Age, 0], [X-Content-Type-Options, nosniff], [Connection, close]...}
Images : {}
InputFields : {}
Links : {}
ParsedHtml : mshtml.HTMLDocumentClass
RawContentLength : 4778
【commands】camera.getImage
静止画をPCにコピー
実行したPSコマンド
Invoke-RestMethod -Uri http://192.168.1.1:80/osc/commands/execute -Method POST -Body (ConvertTo-Json @{"name"="camera.getImage";"parameters"=@{"fileUri"="100RICOH/R0010044.JPG"}}) -ContentType "application/json" -OutFile C:\temp\test.jpg
実行結果
無し(C:\temp\にtest.jpgが作成されている)
感想
PowerShellでお気軽にTHETAを操作できるのが新鮮でした。
はまった点はTHETA SCのデフォルトAPIがv2.0だったこと。
発売されたばかりだしとAPIは最新のv2.1だと思い込んでました。
camera.takePicture
でエラーになり、おもむろにv2.0の引数で試すと成功。
公式サイトをよく読むとcamera.setOptions
をするとv2.1が使えることを発見しましたが、
時間ないのでv2.0で記事書いちゃいました
作業する上で大変だったのは、PCからTHETAにWIFIで接続するとPCでインターネットに接続できないこと。
1台のPCで「調べる&試す」の繰り返しをしようとすると都度接続先を変えるのが手間です。
自分の場合はPCはTHETAに接続しっぱなしで、調べ物はLAN接続させた7インチのタブレットで行いました。