次の方法で共有


QR コード追跡の概要

QR コード サンプルの GitHub リポジトリにアクセスするには:

Windows Mixed Realityと HoloLens ヘッドセットを使用すると、アプリはヘッドセット周辺の環境内の QR コードを検出し、各コードの実際の場所に座標系を確立できます。 また、複数のデバイスで同じ場所にホログラムをレンダリングして、共有エクスペリエンスを作成することもできます。 デバイスの Web カメラを有効にすると、最新バージョンのプロジェクトで QR コードが認識されます。 運用環境に最適な結果を得るには、 ベスト プラクティス のセクションを確認することをお勧めします。

この記事では、次について説明します。

デバイスのサポート

製品 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 コード バージョン 1 ~ 10
  • マイクロQRコードM1-M4
  • すべてのエンコード
サポートされていません。
  • QR コード 10 から 20 (完全にはサポートされていません)
  • QR コード バージョン 21 以降
  • 調整されたモジュール (円形モジュール、反射、反転 (黒/白) など)。
  • ロゴス
  • 構造化された追加

    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 コード サイズの距離グラフ

    重要

    常に十分なコントラストと適切な境界線があることを確認してください。

    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 のこちらにあります。

    Microsoft.MixedReality.QR

    ARMarkerManager を使用して QR コードを検出するようにUnity アプリを準備操作方法。

    Unity アプリでは、ARMarkerManager コンポーネントを使用して、物理環境内の QR コード検出がシーンでどのように表されるかを処理します。 ARMarkerManager は次の機能を提供します。

    • 検出された QR コードがマネージャーに追加、更新、または削除されたときにサブスクライバーに通知するイベント。

    • 検出中の QR コードの ARMarker 追跡可能なコレクション。

    • 追跡可能な ID で指定された QR コードのデータを返すメソッド。

    アプリでARMarkerManagerを使用するには、Mixed Reality OpenXR プラグイン パッケージをインポートする必要があります。

    パッケージをインポートするには:

    1. Mixed Reality機能ツールをダウンロードして実行します。
    2. OpenXR プラグインをインストールします。

    ツールの使用方法の詳細については、「Mixed Reality機能ツールへようこそ」を参照してください。

    次の一般的な手順は次のとおりです。

    1. Unity プロジェクトで、WebCam 機能を有効にします。
    2. プレハブを作成し、次のように ARMarker コンポーネントをアタッチします。
      プレハブの構成
    3. 実行中に QR コードを検出するシーンを開きます。
    4. シーン内の 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 実装を使用することをお勧めします。

    この動作を再現するには、次の手順に従います。

    1. Microsoft.MixedReality.QR (NuGet) と MRTK をインストールする
    2. デバッグを試みる

    Microsoft.MixedReality.QR.dll を使用してアプリをデバッグできますが、DLL が見つかりません。

    Microsoft.MixedReality.QR.pdb が見つかりませんというエラー メッセージ

    注:

    以下は、従来の QR コード API に固有のものです。 代わりに、QR コードに OpenXR 実装を使用することをお勧めします。

    次のリリースでは、シンボルの追加に取り組んでいます。 その間も、Visual Studio オプションで DLL を除外することで、アプリをデバッグできます。

    Visual Studio のオプションで DLL を除外する

    詳細については、「 Visual Studio の設定の構成」を参照してください。

    セッションでスキャンできる QR コードの数に制限はありますか?

    ドライバーのシステム レベルで保存される QR コードは、10 分以内に 100 個に制限されています。

    QR コードのスムージング プロセスが変更されましたか?

    20H2の後に変更されたQRコードスムージングプロセスは、ポーズスムージングからサイズスムージングに変わった。 以前のスムージング プロセスに動作を戻すには、新しい QR コードポーズ データが以前に検出されたフレームの 5 秒以内または 10 cm 以内に検出された場合、スムージング アルゴリズムが適用されます。 変換データは、前のフレームの 10% を持つ現在のフレームの 90% の重み付け比率を介してブレンドされます。

    関連項目