contentTHETAの中でOpenCVを動かす【プレビューフレーム取得編】OpenCVThetaTHETAPluginはじめにこんにちは、リコーの@roohii_3です。以前、「THETAの中でOpenCVを動かす」という記事を書きました。今回は、THETAからプレビュー映像を取得し、OpenCVでリアルタイムに処理してみたのでノウハウを紹介します。下のような感じで、プレビュー画面を取得してリアルタイムで二値化してみるものを作ってみました。コードは以下で公開しています。今回のコードでは、画像処理後のデータの保存は行っていません。プレビュー画面を確認するには、Vysorを使ってください。V以下のリンクを参考にして、THETAを開発者モードにしておきます。SDKをベースに作っていきます。以下からダウンロードします。pack"をダウンロードします。OpenCV4も出てますが、APIレベルがTHETAに合っていないため、THETA上で動かない可能性があります。そのためOpenCV3を入れました。Vysorプレビュー画面を確認するために、Vysorを利用します。以下からインストールしておきます。アプリケーションIDや、お好みでパッケージ名・プラグイン名を変更します(→参考)。プロジェクトにOpenCVをインポートする前回の記事では、NDK(C/C++)でOpenCVを使う方法を紹介しましたが、今回はjava上でOpenCVを使ってみます。ライブラリを静的リンクさせる方法」に当たります。dependency”で"openCVLibrary345"を選択→"OK"本記事の方法でOpenCVを呼び出すには、OpenCVLoader.initDebug()を使います。Managerを使う場合は、OpenCVLoader.initAsync()を使います(→参考)。packには、いくつかサンプルアプリが用意されています。THETAでそのまま使うと以下のようなエラーが出てしまいます。APIが使われており、それによってカメラの制御を行います。APIがロックされているために、このような表示が出てしまいます。THETAでOpenCVを使うには、以下のポイントがあります。APIを使うと便利です。APIを使えるようになります。終了時には、"com.theta360.plugin.ACTION_MAIN_CAMERA_OPEN"を使ってカメラリソースを開放する必要があります。実際には、PluginActivityを継承したクラス内で、開始時にはnotificationCameraClose()を、終了時にはnotificationCameraOpen()あるいはclose()を使えばこれらのIntentを行ってくれます。APIで諸々の設定や操作がされているようです。THETAで使うには、THETA独自のパラメータを設定する必要があります。APIパラメータは、以下にまとまっています。https://api.ricoh/docs/theta-plugin-reference/camera-api/たとえばOpenCVのサンプルアプリでは、カメラ起動時に"RIC_SHOOTING_MODE"というパラメータに"RicMoviePreview1920"といった値を設定すると動くようになりました。ソースコード重要そうな部分だけ抜粋します。大枠はOpenCVのサンプルコードの"tutorial-x-xxx"を参考に作っています。ソースコードの詳細はGitHubをご覧ください。APIの有効化と無効化を行っています。onPause()内でclose()を呼ぶと失敗してしまうことがあり、「Modeボタン長押し(プラグイン終了の合図)」されたときにclose()を呼ぶようにしました。...略...}THETA独自のカメラ制御クラスJavaCameraViewをそのままTHETA用にアレンジしたThetaViewというクラスを追加しました。initializeCamera()メソッド以外はほぼJavaCameraViewのままです。initializeCamera()内も、ポイントに書いたように「"RIC_SHOOTING_MODE"というパラメータに"RicMoviePreview1920"を設定する」ことと、不必要そうな記述を省いただけの変更です。}画像処理部分CvCameraViewListener2をimplementsするクラスの、onCameraFrame()メソッドでプレビュー画面の1フレームを取得できます。rgba()でRGBAが、gray()ではグレースケールで取得できました。ここではグレースケースでフレームを取得し、OpenCVを使って2値化する処理を行っています。}実行USBでTHETAを接続し、Vysorを起動して実行してください。始めにプラグインを起動したときは、「パーミッション」に許可が入っていないためすぐプラグインが落ちてしまいます。Permissions"より、"Camera"の許可をONにしてください。パーミッション許可を入れ、再度プラグインを実行すると、以下のような画面が出てきます。おわりに今回のように簡単な処理だったら、遅延なくサクサク動きました。複雑な処理だとどうなるか見てみたいです。今回はプレビュー画面を取得するだけだったので、撮影処理もチャレンジしてみたいです。何かできたら記事書きます。THETAプラグインパートナープログラムについてTHETAプラグインに興味を持たれた方がいれば、以下の記事もぜひご覧ください。THETAプラグイン開発者コミュニティでは、他にも記事を書いています。THETAプラグインについてはこちら。興味を持たれた方はtwitterのフォローとTHETAプラグイン開発コミュニティ(slack)への参加もぜひどうぞ。THETAプラグイン技術情報の提供を目的としたコミュニティです。upLoginユーザーは見つかりませんでした。