Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

RICOH THETA プラグイン開発 ワークショップ #1

1,326 views

Published on

2018年10月20日に開催されました、第1回RICOH THETA プラグイン開発ワークショップで使用した資料です。

Published in: Technology
  • Be the first to comment

  • Be the first to like this

RICOH THETA プラグイン開発 ワークショップ #1

  1. 1. RICOH THETA プラグイン開発 ワークショップ #1 プラグイン開発で360°カメラの RICOH THETAをカスタマイズ 2018/10/20 @fabbit京橋 Smart Vision事業本部 THETA事業部 庄原 誠 2018/10/23 1
  2. 2. 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. 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. 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
  5. 5. はじめに バージョンアップをしよう 2018/10/23 6
  6. 6. 工場出荷時設定へのリセット方法 VysorでTHETA Vに接続する。 設定アプリ(Settings)から”RESET PHONE”を選択する。 撮影画像・プラグイン・設定など、全て削除されます。(*) 2018/10/23 7 (*) 時刻設定もクリアされるので、時刻設定のため一度スマホアプリで接続してください。 システムの時刻が更新されなくなり、プラグインが正常動作しない可能性があります。
  7. 7. 使ってみる “File Cloud Upload”プラグインの場合 2018/10/23 8
  8. 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. 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
  10. 10. PLUG-IN STORE 2018/10/23 11 プラグインインストールページ https://pluginstore.theta360.com ← 選択してインストール
  11. 11. プラグインのインストール 2018/10/23 12 クリックしてインストール開始 ↓ “RICOH THETA”アプリが起動
  12. 12. プラグインのインストール 2018/10/23 13 カメラを接続して、 OKでインストール開始 ↓ “File Cloud Upload”プラグインが THETA Vにインストールされる ここで、 ・APKのダウンロード ・APKのインストール ・権限の付与 が行われる。
  13. 13. プラグインを起動する PCから起動設定→Modeボタン長押しで起動 2018/10/23 14
  14. 14. プラグインを使う 詳細はWebで。 2018/10/23 15 https://theta360.com/ja/ricoh_plugins/cloud/
  15. 15. デモ(File Cloud Uploadの例) 2018/10/23 16
  16. 16. THETA Vについて ハード・ソフトウエア構成 2018/10/23 17
  17. 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. 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. 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等
  20. 20. TYPE_APPLICATION 撮影アプリの特殊性 イベントは撮影アプリが受け取る – キーイベントはプラグインで受け付けできない – キーイベントはCallbackで受け取る • https://api.ricoh/docs/theta-plugin-reference/broadcast-intent/ 2018/10/23 21 撮影アプリ (TYPE_SYSTEM_ALERT) プラグイン (TYPE_APPLICATION) イベント Callback (KeyReceiverに登録) TYPE_TOAST TYPE_SYSTEM_ALERT TYPE_SYSTEM_ERROR 優先度高 優先度低 ← キーボードなどのイベントはプラグ インへ飛ばず、Callback経由となる。
  21. 21. カメラの操作方法 以下から2択 – WebAPIを利用する • 撮影アプリを利用して撮影する。 • 静止画・動画のメタデータを含めて製品同等の画像を得られる。 – Camera APIを利用する • Android のCamera APIを利用して撮影する。 • メタデータなどは最小限しか付与されない。 • 高速連写など撮影アプリでは不可能な多様な撮影を行うことができる。 2018/10/23 22 Plug-in Camera API Web API Camera API WebAPI経由の場合は 撮影アプリがCameraAPIを 使って撮影する。
  22. 22. 作ってみる(その1) Plug-in SDKをビルドする 2018/10/23 23
  23. 23. はじめに(情報源) Plugin SDK – https://github.com/ricohapi/theta-plugin-sdk ドキュメント – https://api.ricoh/docs/theta-plugin/ サンプルコード(github) – https://github.com/topics/theta-plugin 2018/10/23 24
  24. 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. 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
  26. 26. Plugin SDK (“theta-plugin-sdk”) 2018/10/23 27 https://github.com/ricohapi /theta-plugin-sdk ↑をダウンロードして、 Android Studioでビルド、 THETA Vで動作させてみま しょう。
  27. 27. Plugin SDKの構成 2つの部分から構成 2018/10/23 28 ← app: プラグインの機能実装 (主にプラグインとして開発する部分) SDKはサンプル的に以下の機能を実装: ・シャッターボタンを押したら撮影する ・キーを押されたらLEDを点滅する ・WebAPIを利用するためのユーティリティクラス ← plugin library: THETA独自の機能を実装 (必要に応じて修正する部分、 基本的には変更しなくて良い) 実装されている機能: ・Broadcastの定義(LED制御、既定音制御、WLAN 制御、撮影アプリのCameraリリース) ・モードボタン長押しでの終了処理
  28. 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より引用
  29. 29. 作ってみる(その2) Tensorflow™ のサンプルをプラグイン化 2018/10/23 30
  30. 30. Tensorflowのリポジトリ (“tensorflow-theta”) 2018/10/23 31 https://github.com/mkts hhr/tensorflow- theta/tree/feature/works hop181020_step1_start ・上記をダウンロード ・ tensorflow- theta/tensorflow/exam ples/android/を Android Studioでビルド ・THETA Vで動作させて みましょう。 オリジナルhttps://github.com/tensorflow/tensorflow からforkして プラグイン向けに修正を加えたプロジェクト(“tensorflow-theta”)を使用。 Workshop向けのブランチ(workshop181020_step1_start)を使います。
  31. 31. Tensorflowとは? “TensorFlowとは、Googleが開発しオープンソースで公開している、 機械学習に用いるためのソフトウェアライブラリである。”(ウィキペ ディア) 今回用いるのはTensorflow for Mobileというモバイル向けに最適化 されたライブラリのサンプル(Tensorflow Demo)。 – tensorflow/examples/android/ 機械学習の流れ 2018/10/23 32 学習 データ 正解 ルール (model) 新しい データ 正解(予測)推論 今回はTensorflowによって 学習されたモデルを利用して、 THETA V上で推論を行う。
  32. 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
  33. 33. Tensorflow Demoプラグインの構成 2018/10/23 34 PluginActivity CameraActivity ClassifierActivity DetectorActivity StylizeActivity SpeechActivity TensorFlowObje ctDetectionAPI Model TensorFlowMult iBoxDetector TensorFlowYolo Detector TensorFlowInferenceIn terface ---------------------- graph(): モデルのグラフ feed(): 画像入力 run(): 推論実行 fetch(): 結果取得 TF Detect TF Speech TF Classify TF Stylize TensorFlowImag eClassifier LegacyCameraConne ctionFragmentクラス (Camera API)が使わ れる。
  34. 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. 35. Step1: THETA Vで動作させる 開始時コード(タグ): WS_START_STEP1 概要 – 起動するとPPPとエラー音で止まってしまうところから開始。 – Camera APIの対応を行なって動作するように修正する。 作業内容 – ビルドして動かす • PPPと言って止まる→設定アプリで権限設定 • まだ、PPPと言って止まる→カメラリソースを開けずエラー終了 • “Step1”のコメントに従う 2018/10/23 36
  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. 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. 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. 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. 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. 41. Step4: PluginLibraryを修正する 通常のプラグインの場合 – 単体で完結 – onResume で初期化、onPauseで終了処理 • できるだけ撮影アプリに影響を与えたくないのでonPauseで終了処理。 他のプラグインと連携する場合 – startActivityForResult呼び出しで、onStopまで呼ばれてしまう。 – モードボタン長押しで確実にプラグインを終了させる。 – onPause()時にバックグラウンド処理を行わないようにする。 • handlerThreadを終了している。 2018/10/23 42 developer.android.comより
  42. 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
  43. 43. おつかれさまでした! 2018/10/23 44
  44. 44. 2018/10/23 45

×