先日購入した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インチのタブレットで行いました。