NTTドコモR&Dの技術ブログです。

HoloLens 2でOpenCVを使う!

※ 本記事は 2026/3/31 以前にNTTコノキューにて記載した記事になります

はじめに

こんにちは、NTTコノキュー 浅井です。

私はNTTコノキューでXRを使った新規事業を色々やってます。 現在は特に法人向けを多くやってますが、法人向けでMRだとまだまだHoloLens 2が強い印象です。

ということで、今回はHoloLens 2でOpenCVを使う方法を整理しました。

Open CVとは

説明不要な気もしますが、改めて以下の通りです。

出典:https://ja.wikipedia.org/wiki/OpenCV

OpenCV(オープンシーヴィ、英: Open Source Computer Vision Library)とはインテルが開発・公開したオープンソースのコンピュータビジョン向けライブラリ。

画像処理・画像解析および機械学習等の機能を持つC++、Java、Python、MATLAB用ライブラリ。様々なプラットフォームすなわち複数のオペレーティングシステム (OS) やCPUアーキテクチャに対応するクロスプラットフォームなライブラリであり、macOSやFreeBSD等全てのPOSIXに準拠したUnix系OS、Linux、Windows、Android、iOS等をサポートしている。

つまり、画像処理に使われる古の呪文OSSライブラリです。 ライセンスはApache License 2.0になります。

前提/本記事の対象

本記事は、以下の前提で執筆しています。

  • HoloLens 2向けのアプリをUnityで開発している
  • Unityライセンスを保有している
  • 有償でもOK

全体の流れ

本記事は、大きく以下の2つの流れとなります。

  1. UnityでOpenCVを使う
  2. HoloLens 2でOpenCVを使う

1. UnityでOpenCVを使う

以下の有償アセットが、Enox Software社から提供されています。

こちらを購入するのが、現時点では公式かつ最も安心して使えると思います。 買い切りで$95なので、金額も非常に良心的な設定だと思います。

OpenCV for Unity

  • サポートは現在も継続している
  • 2.の手順に出てくるHoloLens 2用のサンプルプロジェクトも現時点で使用可能

その他の手段としては OpenCV plus Unity か、自前で oepncvsharp で実装する、という方法があります。

以下の記事が非常に参考になります。「for」はAPIがJavaで記述されているようです。 参考:https://qiita.com/foka22ok/items/378e1fb337d4b29a75ac

本記事では、OpenCV for Unityを利用します!

2. HoloLens 2でOpenCVを使う

HoloLens 2でUnityアプリを作る場合、1. だけでも良いと思いますが、HoloLens 2のカメラ映像を取得してOpenCVに投げるアレコレを自分で作る必要があります。

そういう手順が手間だな、、という人のために、 HoloLens2WithOpenCVFroUnityExampleというサンプルプロジェクトが存在します。

こちらもOpenCV plus Unity提供元のEnoxSoftware社が提供しています。

サポートも恐らく継続しており、最新版のv1.0.7は2023.1.15リリースです。 ※HoloLens 2自体、ここ数年は大幅な更新が無いため、特に対応不要というのもありそう。

実装方法

基本的にはHoloLens2WithOpenCVFroUnityExampleSetupに記載があります。

1.HoloLensWithOpenCVForUnityExample.unitypackageをダウンロード

2.OepnCVForUnityをインポート ※HoloLens 2WithOpenCVFroUnityExample自体は無料ですが、これを使うためには有償のOpenCVForUnityが必要になります。

一旦全てのファイルをインポートしてから以下のSetupToolsからMove StreamingAssetsFolderを行った後、StreamingAssets/OpenCVForUnity/objdetect/フォルダから"haarcascadefrontalfacealt.xml", "lbpcascade_ frontalface.xml の2ファイルのみ残して、StreamingAssetsフォルダは空にします。

初期設定

3.HoloLensCameraStreamリポジトリをクローンして、HoloLensCameraStream/HoloLensVideoCaptureExample/Assets/CamStream/" folder を 自分のUnityプロジェクトのAssets/フォルダーにコピーしてください。

4.MRTK2のセットアップ Microsoft Learn を参考に進めてください。

Unit4の内容まで(Scene作成に入る手間まで)でOKです。

※現在MRTK3をベースにした記載に代わっています。MRTK2の場合はMRTK v2.8.3を参考に以下を選択してください。

MRTKセットアップ①

MRTKセットアップ②

5.HoloLensWithOpenCVForUnityExample.unitypackageを自分のUnityプロジェクトにインポート

6.Assets/HoloLensWithOpenCVForUnityExample/.unity* filesをBuildSettingsの "Scenes In Build" list にドラッグアンドドロップで追加。

BuildSettings

7.Project Settings>Player>Scripting Define SymbolsにXR_PLUGIN_OPENXRを追加。また、Settings>Player>Publishing settingsのWebCamにチェック。 ※MRTK2ではOpenXRを使用しているため。

Project Settings

Project Settings②

8.(オプション)公式ドキュメントを元に、HoloLens 2の環境に適した設定を行う。 ※私は以下の通り実施しました。

Project Settings③

Project Settings④

9.Unityでビルド 私の場合、以下エラーが出ました。
error CS0103: The name 'MatUtils' does not exist in the current context

該当ファイルを確認し、呼び出している変数の定義がMatUtils.csにあることを確認。 変数名を修正しました。

エラー画面

このエラー解消後も別のエラーが出ました。(メモ忘れ。。)

opencv2の読み込みが多数発生していることが問題という記載だったため、iOSのフォルダを修正。 ※これはどこかのドキュメントに記載があったかと思いますが、失念。

エラー画面②

10.slnファイルをビルド Microsoft LearnのUnit6を参考に実施してください。

これで完了です。あとは各種SampleSceneで遊べます。

ArUcoマーカーのサンプルアプリでは、トラッキングしたマーカー上部にCubeが配置され、画面上でトラッキングしている3軸が表示されます。

Cubeの配置は実際のマーカー位置と結構ズレていますが、画像上ではバッチリトラッキング出来ていることがわかります。

アプリキャプチャ

参考:ArUcoマーカーのトラッキングを試す場合

ArUcoCreateMarkerExampleというSceneがあるので、UnityEditorで実行するとマーカーをpngファイルで生成出来ます。

このマーカーをHoloLens 2で読み取ればトラッキングが可能です。

ArUcoマーカー生成