Weitere ähnliche Inhalte Ähnlich wie RICOH THETA プラグイン開発 ワークショップ #1 (20) Kürzlich hochgeladen (12) RICOH THETA プラグイン開発 ワークショップ #12. THETAの歴史
2013 2014 2015 2016
RICOH
THETA
RICOH
THETA m15
RICOH
THETA S
RICOH
THETA SC
2017
世界初
360 °カメラ
画質改善モデル スタンダードモデル 最新モデル
RICOH
THETA V
動画記録対応
第1世代 光学系 第2世代 光学系
第一世代 システム(RTOS) 新システム(Android)
高速、4K動画対応
2011 2012
プロトタイプ開発
3. 本日の流れ
1. 使ってみる
– “File Cloud Upload” plug-in を例に。
• Google Photosにアクセス可能な(テスト用)アカウントが必要です。
• CLモードを利用します。
2. THETA Vについて
– 構成と特徴
3. 作ってみる(1)
– Plug-in SDKをビルド
4. 作ってみる(2)
– Tensorflow™ のサンプル(TF Detect)をTHETA向けに改造する
随時、質問を受け付けます。
2018/10/23 4
4. 本日の動作環境
macOS 10.13.6
Android Studio 3.2
Build #AI-181.5540.7.32.5014246, built on September 18, 2018
JRE: 1.8.0_152-release-1136-b06 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
com.android.tools.build:gradle:3.2.0
$ adb version
– Android Debug Bridge version 1.0.40
– Version 4986621
2018/10/23 5
8. File Cloud Upload プラグイン
2018/10/23
9
https://theta360.com/ja/ricoh_
plugins/cloud/
https://github.com/ricohapi/t
heta-cloud-upload-plugin
ソースコード公開中
使い方ページ↓
9. 無線LANクライアント(CL)モードの設定
2018/10/23 10
簡易的なルータへの接続方法
1. WLAN -> ONする
2. WLANボタン-> Modeボタン->シャッターボタン
の順に同時押し
3. WLANルータ側の簡単接続設定を行う
注意: THETA Vの対応チャンネル
– 2.4GHz:1-11ch
– 5GHz: W52(36,40,44,48ch)
https://support.theta360.com/ja/manu
al/v/content/prepare/prepare_08.html
マニュアルのURL
↓
• THETA VのIPアドレスを知る
DNS-SD/mDNSによるデバイス探索 (macOSの場合)
$ dns-sd -B _osc._tcp → THETA V探索
$ dns-sd -L "THETAYL01234567" _osc._tcp
$ dns-sd -q THETAYL01234567.local → IPアドレスが得られる
$ host 192.168.100.010
• USB接続しながら無線LANを使う
$ adb shell settings put global usb_debug true
17. ハード・ソフト構成
2018/10/23 18
ハードウエア
– Qualcomm® APQ8053 (Snapdragon 625)
• CPU: Cortex A-53 x8
• GPU: Adreno™ 506
– 3GB LPDDR3 SDRAM (Max: 7.4GB/s; 933MHz * 32bit * 1ch)
– 32GB eMMC
– WLAN/BLE
• 2.4GHz(1-11ch)
• 5GHz(W52)
– 12MP CMOS x2, 4ch MEMS microphones, 1ch speaker
ソフトウエア (ver.2.41.1)
– Android™ 7.1.2, API Level25
• android.hardware.camera APIが利用可能
• OpenGL ES 3.1+, OpenCL 2.0
← 豊富な計算リソースを活用できる
← 5GHzの方が高速
←camera2 APIは非サポート
← 最新のFW を利用してください
18. 撮影アプリ(RICOH THETA)
2018/10/23 19
撮影(基本)アプリ
• RICOH THETA
パッケージ名
• com.theta360.receptor
機能
• システム権限で動作
• カメラ全体を管理
• 通常モードでの撮影
• プラグインの起動制御
• WebAPIなどの通信
<撮影アプリ終了>
adb shell am force-stop com.theta360.receptor
<撮影アプリ起動>
adb shell am start -n com.theta360.receptor/.activity.MainActivity
もしくは シャッターボタン長押し
19. プラグインと撮影アプリ
撮影アプリ(com.theta360.receptor)の役割
– システム権限を持つアプリ
– WebAPI(撮影など)を受け付ける
• WLANなどカメラをスマホアプリ同様に制御できる
• プラグイン開発でCameraAPIを知らなくても良いので簡便に開発できる
– カメラリソースの管理
• カメラリソースは一つのアプリしかOpenできない
– ボタン・LEDの制御
Plugin Library (SDK)の役割
– https://github.com/ricohapi/theta-plugin-sdk
– 撮影アプリとのインターフェース
– THETA固有の機能に対応
2018/10/23 20
Plugin SDK
(= サンプルPlugin)
Plugin
Library
撮影アプリ
(com.theta360.
receptor)
Broadcast・Event等
21. カメラの操作方法
以下から2択
– WebAPIを利用する
• 撮影アプリを利用して撮影する。
• 静止画・動画のメタデータを含めて製品同等の画像を得られる。
– Camera APIを利用する
• Android のCamera APIを利用して撮影する。
• メタデータなどは最小限しか付与されない。
• 高速連写など撮影アプリでは不可能な多様な撮影を行うことができる。
2018/10/23 22
Plug-in
Camera API
Web API
Camera API
WebAPI経由の場合は
撮影アプリがCameraAPIを
使って撮影する。
24. Gitの使い方(メモ)
取得
– git clone https://github.com/ricohapi/theta-plugin-sdk.git
タグ(TagName)のコードを取得
– git checkout refs/tags/TagName
現在のチェックアウト状態
– git reflog
修正内容の確認
– git diff
Commit間の差分確認と適用
– git diff 40517da...8236694 > git_diff.txt
– patch -p1 < git_diff.txt
タグ(TagName)の情報を得る
– git show TagName
2018/10/23 25
25. ソースコード(github)公開プロジェクト
プロジェクト プラグイン 機能等 カメラ操作 API Web UI有無
theta-plugin-sdk ソースコードのみ 開発用SDK Web API 無
theta-plugin-
web-api-sample
ソースコードのみ Web API撮影プラ
グインサンプル
Web API 無
theta-plugin-
camera-api-
sample
ソースコードのみ Camera API撮影
プラグインサンプ
ル
Camera API 無
theta-automatic-
face-blur-plugin
Automatic Face
Blur BETA
顔ぼかし撮影 Web API 有
theta-cloud-
upload-plugin
File Cloud
Upload
Googleフォトへ
アップロード
無し 有
theta-wireless-
live-streaming-
plugin
Wireless Live
Streaming
Youtubeへライブ
配信
Camera API 有
theta-plugin-
ricoh-live-
streaming-
sample
ソースコードのみ WebRTCと RICOH
Live Streaming
APIを利用するサ
ンプル
Camera API 無
2018/10/23 26
27. Plugin SDKの構成
2つの部分から構成
2018/10/23 28
← app: プラグインの機能実装
(主にプラグインとして開発する部分)
SDKはサンプル的に以下の機能を実装:
・シャッターボタンを押したら撮影する
・キーを押されたらLEDを点滅する
・WebAPIを利用するためのユーティリティクラス
← plugin library: THETA独自の機能を実装
(必要に応じて修正する部分、
基本的には変更しなくて良い)
実装されている機能:
・Broadcastの定義(LED制御、既定音制御、WLAN
制御、撮影アプリのCameraリリース)
・モードボタン長押しでの終了処理
28. Plugin Library (pluginlibrary)の構成
THETAのプラグインとして実装しておいてほしい
ことが実装されている。
実装内容
– PluginActivityクラス
• AppCompatActivityの継承クラス
• モードボタン長押し時はclose()が呼び出される。
• 継承先で終了処理が必要な場合は、
setAutoClose(false)として、pluginlibraryでclose()が
自動的に呼ばれないようにする。
• onCreate()
– UncaughtExceptionクラスの登録
» 何か例外が発生すると、エラーとなってプラグインが終
了させる。
• onResume()
– キーイベント(KeyReceiverクラス)の登録。
• onPause()
– 終了処理が呼び出される。
2018/10/23 29
Androidアプリ(プラグイン)のライフサイクル
developer.android.comより引用
32. Tensorflow Demoのプラグイン対応
Tensorflow Demo
– TF Detect (今日のメイントピック)
• 画像に写っている物体を検出
– TF Speech
• 音声認識
– TF Stylize
• 画像のスタイル変換
– TF Classify
• 画像から物体を識別
プラグイン対応
– カメラ(Camera API)が動作するようにする
– マイクを使えるようにする
– PluginSDKを組み込む
– 固有の機能を追加する
• 今回は“person”を検出したら、撮影、Googleフォトにアップロードする。
2018/10/23 33
TF StylizeTF SpeechTF Detect
TF Classify
34. TF Detectを動かす
Step1: THETA Vで動作させる
– Camera APIの対応を行なって動作するように修正する。
Step2: PluginLibraryを組み込む
– Importして、pluginlibraryを組み込む
Step3: 物体検出して撮影する
– PluginSDKを参考に実装
• Camera APIでの推論→推論停止→WebAPIで撮影→ Camera APIで推論再開
Step4: PluginLibraryを修正する
– Google Photosにアップロードする機能を追加
– Plugin Libraryの修正
2018/10/23 35
35. Step1: THETA Vで動作させる
開始時コード(タグ): WS_START_STEP1
概要
– 起動するとPPPとエラー音で止まってしまうところから開始。
– Camera APIの対応を行なって動作するように修正する。
作業内容
– ビルドして動かす
• PPPと言って止まる→設定アプリで権限設定
• まだ、PPPと言って止まる→カメラリソースを開けずエラー終了
• “Step1”のコメントに従う
2018/10/23 36
36. Step1: THETA Vで動作させる
Camera APIを使う
– notificationCameraClose();
• sendBroadcast(new Intent(“com.theta360.plugin.ACTION_MAIN_CAMERA_CLOSE”)
• 撮影アプリが占有しているカメラを解放させる
– カメラリソースは一つのアプリしか開けない
Cameraパラメータ設定
– parameters.set("RIC_SHOOTING_MODE", "RicMoviePreview1024");
• カメラの動作モードを設定する。(デフォルトはRicStillCaptureStd)
• 必要に応じて“RIC_PROC_STITCHING”などの設定を変更する
– 静的つなぎ(高速): “RicStaticStitching”
– 動的つなぎ(高精度): “RicDynamicStitchingAuto”
– つなぎ無し(魚眼出力): “RicNonStitching”
マイクを使う
– AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
am.setParameters("RicUseBFormat=false");
• リアルタイム処理するためモノラル(1ch)で音を取得する
• アンビソニクスB-format (4ch) の場合、WAVファイルとして記録される
2018/10/23 37
37. Step2: PluginLibraryを組み込む
開始時コード(タグ): WS_START_STEP2
概要
– Camera APIの対応を行なって動作するように修正する。
– LED、ボタンなどが動作するようになる。
作業内容
– Importして、pluginlibraryを組み込む
1. SDKの“pluginlibrary” をインポート(“File”-“New”-“Import Module...”)
2. “settings.gradle”ファイルに文字列(“include ‘:pluginlibrary’”)を追加
3. Sync (“File”-“Sync Project with Gradle Files”)
– CameraActivityクラスとSpeechActivityクラスの継承元をAppCompatActivityから、
PluginActivityに変更。
• “WARNING: Configuration ‘compile’ is obsolete and has been replaced with ‘implementation’ and
‘api’.”が出るときは、build.gradleの
– compile project(path: ‘:pluginlibrary’) を
– implementation project(path: ‘:pluginlibrary‘) に置き換え
• KeyCallback, LedTargetクラス定義はimportする。
– 残りは”Step2”のコメントに従う
参考: https://github.com/ricohapi/theta-plugin-sdk/issues/32018/10/23 38
38. Step3: 物体検出して撮影する
開始時コード(タグ): WS_START_STEP3
概要
– Camera APIの対応を行なって動作するように修正する。
– “person”を検出して、静止画撮影されるようになる。
作業内容
– PluginSDKを参考にWebAPIでの撮影を実装
• Camera APIでの推論→推論停止→WebAPIで撮影→ Camera APIで推論再開
– ”Step3”のコメントに従う。
• TakePictureTaskなど、task, network, modelフォルダごとSDKのコードをコピーする。
– package com.theta360.pluginapplication.task; から
– package org.tensorflow.demo.task; に置換(ファイルコピー後全置換)
– mThreashIgnore_msecの設定で15秒ごとに”person”を見つけると撮影してい
る。設定を変えて動かしてみましょう。
2018/10/23 39
39. Step3: 物体検出して撮影する
物体検出のステップ
1. CameraActivity::onPreviewFrame()でプレビュー画像を取得
2. DetectorActivity::processImage()のrunInBackground内が別ス
レッド(“inference”)で動作。
3. TensorFlowObjectDetectionAPIModel:: recognizeImage()で物体
検出
• TensorFlowInferenceInterface::feed() 画像入力
• TensorFlowInferenceInterface::run() 物体検出処理
• TensorFlowInferenceInterface::fetch() 検出結果取得
検出性能について
– 通常の歪みのない画像で学習しているため、歪みの影響を受
ける。
– 汎化性能が高いため、全天球画像のままでもある程度、検出可
能。
– 間違いが多いが検出できる、というレベル。
– 全天球画像で学習させるか、歪み補正してから推論すれば性
能向上可能。
2018/10/23 40
Deep Learningによる
学習結果を用いて
推論実施
40. Step4: PluginLibraryを修正する
開始時コード(タグ): WS_START_STEP4
概要
– 他のプラグイン(File Cloud Upload)を呼び出して、Google Photosにアップロー
ドする機能を追加する。
作業内容
– “Step4”のコメントに従う
– Plugin Libraryを修正(startActivityForResultを呼び出しても動くようにする)
• onResumeの内容をonCreateへ
• onPauseの内容をonDestroyへ
– Google Photosにアップロードしない場合は、以下を設定する。
• ENABLE_CLOUD_UPLOAD = false; // in CameraActivity.java
最終コード(タグ): WS_END
2018/10/23 41
41. Step4: PluginLibraryを修正する
通常のプラグインの場合
– 単体で完結
– onResume で初期化、onPauseで終了処理
• できるだけ撮影アプリに影響を与えたくないのでonPauseで終了処理。
他のプラグインと連携する場合
– startActivityForResult呼び出しで、onStopまで呼ばれてしまう。
– モードボタン長押しで確実にプラグインを終了させる。
– onPause()時にバックグラウンド処理を行わないようにする。
• handlerThreadを終了している。
2018/10/23 42
developer.android.comより
42. まとめ
Tensorflowを使ったディープラーニングによる物体認識をTHETA本
体で実施できた
実装上の主な注意点
– Camera APIを動作させるときの注意点
• sendBroadcast(new
Intent("com.theta360.plugin.ACTION_MAIN_CAMERA_CLOSE"));
• Camera.Parameters.set("RIC_SHOOTING_MODE", "RicMoviePreview1024");
– マイクを使う時の注意点
• AudioManager.setParameters("RicUseBFormat=false");
THETA Vを使ったコンピュテーショナルフォトグラフィー、エッジコン
ピューティング、機械学習、IoTなど分野での応用に期待
リリース済み・予定プラグイン
– https://theta360.com/ja/about/theta/v/roadmap.html
2018/10/23 43