QR コード追跡の概要
QR コード サンプルの GitHub リポジトリにアクセスするには:
Windows Mixed Realityと HoloLens ヘッドセットを使用すると、アプリはヘッドセット周辺の環境内の QR コードを検出し、各コードの実際の場所に座標系を確立できます。 また、複数のデバイスで同じ場所にホログラムをレンダリングして、共有エクスペリエンスを作成することもできます。 デバイスの Web カメラを有効にすると、最新バージョンのプロジェクトで QR コードが認識されます。 運用環境に最適な結果を得るには、 ベスト プラクティス のセクションを確認することをお勧めします。
この記事では、次について説明します。
- QR コード追跡でサポートされているデバイス
- サポートされている QR コードバージョン
- QR コード検出のベスト プラクティス
-
トラブルシューティングと FAQ
- 必要な機能は何ですか?
- HoloLens 2デバイスで QR コード追跡機能を機能させるには、操作方法ですか?
- API プラグイン ファイルはどこにありますか?
- ARMarkerManager を使用して QR コードを検出するようにUnity アプリを準備操作方法。
- openXR を使用して QR コードを検出するために、Unity以外のアプリを準備操作方法。
- Microsoft.MixedReality.QR.QRCodeWatcher を使用するように UWP を準備操作方法?
- 操作方法 Microsoft.MixedReality.QR.QRCodeWatcher でUnityを準備しますか?
- QR コードを作成するにはどうすればよいですか?
- QR コードの追跡が一般的に機能しない場合は、どうすればよいですか?
- 精度は何ですか?
- QR コードを検出するには、どの程度近くにいる必要がありますか?
- ロゴ付きの QR コードを読み取ることができないのはなぜですか?
- QR コードが検出されるため、データが取得されないのはなぜですか?
- QR コードは "スペース" レベルまたはアプリ レベルで保存されますか?
- これは基になるプラットフォームでどのように機能しますか? それらはどこで保持されますか?
-
"
Microsoft.MixedReality.QR.pdb
が見つかりません" というエラー メッセージが表示されたら、Visual Studio でアプリをデバッグ操作方法。
デバイスのサポート
製品 | HoloLens 第 1 世代 | HoloLens 2 | イマーシブ ヘッドセット |
---|---|---|---|
OpenXR | ✔️ (OpenXR Runtime バージョン 113 と OpenXR XR_MSFT_scene_marker 拡張機能) | ||
Mixed Reality Unity プラグイン | ✔️ (OpenXR Runtime バージョン 113 および Mixed Reality Unity プラグイン ARMarkerManager ) |
||
レガシ QR SDK | ✔️ | ✔️ | ✔️ |
注:
以下は、従来の QR コード API に固有のものです。 代わりに、QR コードに OpenXR 実装を使用することをお勧めします。
従来の QR コード SDK を使用して、デスクトップ PC 上のイマーシブ Windows Mixed Reality ヘッドセットを使用した QR コード追跡は、Windows 10 バージョン 2004 以降でサポートされています。
Microsoft.MixedReality.QRCodeWatcher.IsSupported()
API を使用して、機能が現在のデバイスでサポートされているかどうかを判断します。
サポートされている QR コードバージョン
次の表に、サポートされている QR コードバージョンとサポートされていない QR コードのバージョンを示します。
QR コードのバージョン | |
---|---|
サポート: |
|
サポートされていません。 |
|
QR コード検出のベスト プラクティス
QR コード周辺の静かなゾーン
正しく読み取るために、QR コードにはコードのすべての辺に余白が必要です。 この余白には、印刷されたコンテンツを含めず、4 つのモジュール (コード内の 1 つの黒い四角形) 幅にする必要があります。
公式の QR コード ドキュメントには、静かなゾーンに関する詳細情報が含まれています。
照明と背景
QR コード検出の品質は、さまざまな照明と背景の影響を受けやすいです。
通常の照明条件下では、パフォーマンスを向上させるために、黒/白モジュールに十分なコントラストを提供します。
明るい照明や暗い背景を持つ極端な照明条件では、QRコード検出率を向上させる可能性のあるコントラストを減らし、調整することができます。 QRコード内の白い背景は255から下向きに減らすことができます。
QR コードのサイズ
Windows Mixed Realityおよび HoloLens デバイスは、辺が 5 cm 未満の QR コードでは動作しません。
5 cm から 10 cm までの辺を持つ QR コードの場合、コードを検出するには、デバイスがかなり近い必要があります。 コードを検出するには、平均より長い時間がかかる場合があります。
コードを検出する正確な時間は、QR コードのサイズだけでなく、コードからどれだけ離れているかによって異なります。 コードに近づくと、サイズに関する問題を解決するのに役立ちます。
QR コードからの距離と角度の位置
追跡カメラは、特定の詳細レベルのみを検出できます。 小さなコード (辺に沿って 10 cm 未満) の場合は、かなり近い必要があります。 バージョン 1 の QR コードのサイズが 10 cm から 25 cm の場合、最小検出距離は 0.15 m から 0.5 m です。
サイズの検出距離は直線的に増加しますが、 サポートされている QR バージョン またはモジュール のサイズにも依存します。 バージョンが大きいほどモジュールが小さくなり、より近い位置からのみ検出できます。 検出距離を長くしたい場合は、マイクロQRコードを試すこともできます。 QR 検出は、角度 += 45 度の範囲で動作し、コードを検出するための適切な解像度を確保します。
その他の検出に関する考慮事項:
- 曲面の QR コードはサポートされていません。
- 面内の向きがサポートされています。 平面外は <= +-45 より良い検出を持つ真っ直ぐに見ている必要があります。
- QR コードの物理サイズには、少なくとも 2/3 ピクセルのモジュールが必要です。 注: より高いバージョンの QR コードでは、モジュールが小さくなります。
最適な検出のための QR コードの距離とサイズのトレードオフの関係については、次のグラフを参照してください。

重要
常に十分なコントラストと適切な境界線があることを確認してください。
QR コード データの管理
Windows Mixed Realityおよび HoloLens デバイスは、ドライバーのシステム レベルで QR コードを検出します。 デバイスが再起動されるか、ドライバーが再起動すると、検出された QR コードの履歴がクリアされます。 再検出された QR コードは、新しいオブジェクトとして扱われます。
アプリ内で指定できる特定のタイムスタンプより古い QR コードを無視するようにアプリを構成することをお勧めします。 QR コード API は、最後の検出が行われた時刻を指定します。 ほとんどのアプリ開発者は、アプリが起動されたときのシステム時刻を使用して、QR コードが検出された時刻を決定します。
QR コード データはアプリ固有ではありません。 アプリの起動時に、利用可能な QR コードの一覧が提供されます。 アプリ開発者は、このアプリに関連する QR コードを決定します。
空間内の QR コードの配置
QR コードを配置する場所と方法に関する推奨事項については、「 HoloLens の環境に関する考慮事項」を参照してください。
トラブルシューティングと FAQ
必要な機能は何ですか?
HoloLens アプリケーションで QR コード追跡を有効にするには、Web カメラ機能をアプリケーションのマニフェストに追加します。 Unityで開発している場合は、プレイヤー設定からこれを構成できます。
さらに、アプリ Web カメラのアクセス許可を付与するように、アクセス許可ダイアログによってユーザーに求められる場合があります。 これは、アプリの有効期間中に 1 回だけ発生します。 アプリが Web カメラへのアクセスを明示的に要求している場合など、ダイアログは再表示されません。
WebCam 機能Unityアプリの場合、シーンでARMarkerManager
を有効にすると、Web カメラのアクセス許可ダイアログが表示されます。
ネイティブの OpenXR C++ アプリの場合、XR_SCENE_COMPUTE_FEATURE_MARKER_MSFT
を含むXrNewSceneComputeInfoMSFT::requestedFeatures
を使用して xrComputeNewSceneMSFT を最初に呼び出すことにより、アクセス許可ダイアログをトリガーできます。
注:
以下は、従来の QR コード API に固有のものです。 代わりに、QR コードに OpenXR 実装を使用することをお勧めします。
マニフェストに Web カメラ機能を追加する必要があります (Unity機能のチェックボックス)。 標準の UWP プロジェクトとしてビルドする場合は、ソリューション プロジェクトの package.appxmanifest にも含まれます。
レガシ QR コード SDK で、次のメソッドを呼び出してアクセスを要求します。
#if WINDOWS_UWP
async QRCodeWatcher.RequestAccessAsync();
#endif
アクセス状態は (status == QRCodeWatcherAccessStatus::Allowed)
する必要があります。
アクセスが拒否された場合、 QRTracking
を開始すると、この機能はアクセス拒否を返します。
この API は、 QRCodeWatcher
オブジェクトを構築する前に呼び出す必要があります。
Unityからプロジェクトを実行している場合は、UI スレッドからを呼び出していることを確認する必要もあります。 それ以外の場合、API は常に拒否を返します。 詳細については、「Unity マニュアル」の「AppCallbacks クラス」を参照してください。
Unity用にプロジェクトを設定する方法の詳細については、「Windows Mixed RealityのUnityを構成する」を参照してください。
HoloLens 2デバイスで QR コード追跡機能を機能させるには、操作方法ですか?
QR 追跡はHoloLens 2で自動的に行われ、アプリに "web カメラ" 機能を追加する必要があります。
API プラグイン ファイルはどこにありますか?
アプリケーションでは、QR コードを検出するために HoloLen の OpenXR ランタイムを使用する必要があります。 OpenXR for Windows Mixed Reality (113.2403.5001 以降) では、HoloLens デバイスで QR コードがサポートされます。
Unityアプリの場合、MIXED REALITY OpenXR プラグインで提供されるARMarkerManager
コンポーネントを介して QR コードのサポートが提供されます。
Unity以外のアプリで QR コードをサポートする場合は、OpenXR XR_MSFT_scene_marker 拡張機能を使用します。
注:
以下は、従来の QR コード API に固有のものです。 代わりに、QR コードに OpenXR 実装を使用することをお勧めします。
必要なすべてのファイルとドキュメントは、NuGet のこちらにあります。
ARMarkerManager を使用して QR コードを検出するようにUnity アプリを準備操作方法。
Unity アプリでは、ARMarkerManager
コンポーネントを使用して、物理環境内の QR コード検出がシーンでどのように表されるかを処理します。
ARMarkerManager
は次の機能を提供します。
検出された QR コードがマネージャーに追加、更新、または削除されたときにサブスクライバーに通知するイベント。
検出中の QR コードの
ARMarker
追跡可能なコレクション。追跡可能な ID で指定された QR コードのデータを返すメソッド。
アプリでARMarkerManager
を使用するには、Mixed Reality OpenXR プラグイン パッケージをインポートする必要があります。
パッケージをインポートするには:
ツールの使用方法の詳細については、「Mixed Reality機能ツールへようこそ」を参照してください。
次の一般的な手順は次のとおりです。
- Unity プロジェクトで、WebCam 機能を有効にします。
- プレハブを作成し、次のように
ARMarker
コンポーネントをアタッチします。
- 実行中に QR コードを検出するシーンを開きます。
- シーン内の GameObject に
ARMarkerManager
をアタッチし、 マーカー プレハブ を作成したプレハブに設定します。
詳細な手順と情報については、Unityの QR コードに関するページを参照してください。
Unity アプリで QR コードを使用する方法の例については、GitHub の QR コード サンプル シナリオを参照してください。
openXR を使用して QR コードを検出するために、Unity以外のアプリを準備操作方法。
OpenXR での QR コード検出は、 XR_MSFT_scene_marker 拡張機能を通じて提供されます。 この拡張機能を使用すると、複数の QR コードを追跡でき、検出された QR コードのサイズ、位置、最終検出タイムスタンプ、UUID、およびバッファーされた QR コード データを提供できます。
QR コードのサポートを有効にするには、XR_MSFT_scene_markerとXR_MSFT_scene_understandingの両方 の 拡張機能を有効にする必要があります。
詳細な手順については、OpenXR 1.0 仕様の XR_MSFT_scene_marker 拡張機能の概要に関するページを参照してください。
QR コードの使用方法の例については、GitHub の SceneUnderstandingUwp サンプルの「Scene_QRCode.cpp」を参照してください。
Microsoft.MixedReality.QR.QRCodeWatcher を使用するように UWP を準備操作方法?
注:
以下は、従来の QR コード API に固有のものです。 代わりに、QR コードに OpenXR 実装を使用することをお勧めします。
NuGet パックを使用して、必要なファイルをアンパックします。
プロジェクト内の
Microsoft.MixedReality.QR.winmd
への参照を追加し、API の使用を開始します。適切なアーキテクチャ バージョンのプラグインを追加し、ビルドで適切に使用します。
操作方法 Microsoft.MixedReality.QR.QRCodeWatcher でUnityを準備しますか?
注:
以下は、従来の QR コード API に固有のものです。 代わりに、QR コードに OpenXR 実装を使用することをお勧めします。
Unityには NuGet を使用し、上記の NuGet パックをポイントします。
QR コードを作成するにはどうすればよいですか?
任意の QR コード ジェネレーターを確認してください。
QR コードの追跡が一般的に機能しない場合は、どうすればよいですか?
QR コードのバージョンはサポートされているバージョンですか? バージョン 40 のような高密度バージョンはサポートされていません。 バージョン 10 を超えるものは保証されません。20 を超えるバージョンはサポートされていません。
QR コードに十分近いですか? QR コードからの距離と角度の位置を確認します。
照明はどうですか? QR コードが暗い環境の背景にあると検出が困難になる既知の問題があります。コントラストが高いため、QR コードがカメラに洗い流されて表示されます。 詳細については、「 照明と背景」を参照してください。
精度は何ですか?
1 つのフレームで検出された場合、サイズは実際のサイズから最大で 1% のエラーが発生すると予想されます。 たとえば、10 cm のコードは、測定されたサイズで最大 +/- 1 mm オフである可能性があります。 継続的検出では、コードの位置が最大 +/- 2.5 mm までドリフトする可能性があります。 検出範囲外に移動すると、以前の検出の位置はマップ エラーの慈悲に任されます。
QR コードを検出するには、どの程度近くにいる必要がありますか?
距離は明らかにQRコードのサイズと、それがどのようなバージョンであるかによって異なります。 詳細については、 QR コードからの距離と角度の位置に関するページを参照してください。
HoloLens 2では、バージョン 1 の QR コードが 5 cm 辺から 25 cm 辺に変化する場合、最小検出距離は 0.25 m から 0.5 m です。 これらから検出できる最も遠いものは、最小コードの場合は約 0.5 m から、大きい場合は 2 メートルです。
Windows Mixed Realityでは、サイズのこれらの距離は半分になります。
より大きいコードの場合は、外挿 --サイズの検出距離が線形に増加します。 コードが小さい場合、検出は発生しません--4-5 cm は検出できる最小です。
ロゴ付きの QR コードを読み取ることができないのはなぜですか?
ロゴを含む QR コードはサポートされていません。
QR コードが検出されるため、データが取得されないのはなぜですか?
プラットフォームで QR コードをデコードできない場合、データは存在しません。 ストリームを使用し、オープンソース コードを使用してデータを解釈できます。
構造体の追加など、一部の機能はサポートされていません。
詳細については、 サポートされている QR コードのバージョンに関するページを参照してください。
QR コードは "スペース" レベルまたはアプリ レベルで保存されますか?
QR コードは、ドライバー セッションまたは HoloLens のブート セッションでシステム レベルで保存されます。 詳細については、「 QR コード データの管理」を参照してください。
これは基になるプラットフォームでどのように機能しますか? それらはどこで保持されますか?
検出された QR コードは、ドライバーによってメモリに保持されます。
"Microsoft.MixedReality.QR.pdb
が見つかりません" というエラー メッセージが表示されたら、Visual Studio でアプリをデバッグ操作方法。
注:
以下は、従来の QR コード API に固有のものです。 代わりに、QR コードに OpenXR 実装を使用することをお勧めします。
含まれているモジュールの一覧で指定されていないため、 Microsoft.MixedReality.QR.dll
のシンボルの読み込みはスキップされました。
再現するには
注:
以下は、従来の QR コード API に固有のものです。 代わりに、QR コードに OpenXR 実装を使用することをお勧めします。
この動作を再現するには、次の手順に従います。
- Microsoft.MixedReality.QR (NuGet) と MRTK をインストールする
- デバッグを試みる
Microsoft.MixedReality.QR.dll を使用してアプリをデバッグできますが、DLL が見つかりません。

推奨されるソリューション
注:
以下は、従来の QR コード API に固有のものです。 代わりに、QR コードに OpenXR 実装を使用することをお勧めします。
次のリリースでは、シンボルの追加に取り組んでいます。 その間も、Visual Studio オプションで DLL を除外することで、アプリをデバッグできます。

詳細については、「 Visual Studio の設定の構成」を参照してください。
セッションでスキャンできる QR コードの数に制限はありますか?
ドライバーのシステム レベルで保存される QR コードは、10 分以内に 100 個に制限されています。
QR コードのスムージング プロセスが変更されましたか?
20H2の後に変更されたQRコードスムージングプロセスは、ポーズスムージングからサイズスムージングに変わった。 以前のスムージング プロセスに動作を戻すには、新しい QR コードポーズ データが以前に検出されたフレームの 5 秒以内または 10 cm 以内に検出された場合、スムージング アルゴリズムが適用されます。 変換データは、前のフレームの 10% を持つ現在のフレームの 90% の重み付け比率を介してブレンドされます。