QR コード追跡の概要

QR コードのサンプルの GitHub リポジトリにアクセスするには、次のリンクをクリックします。

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

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

デバイス サポート

機能 HoloLens 第 1 世代 HoloLens 2 イマーシブ ヘッドセット
QR コードの検出 ✔️ ✔️

注意

デスクトップ 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 コード 20+
  • 変形されたモジュール (円形のモジュール、反射、反転 (黒/白) など)。
  • ロゴ
  • 構造化された追加

    QR コードの検出のベスト プラクティス

    QR コードの周りの非表示ゾーン

    QR コードを正しく読み取るには、コードのすべての周りに余白が必要です。 この余白には、印刷されたコンテンツを含めることはできません。また、4 つのモジュール (コード内の 1 つの黒い四角形) の幅にする必要があります。

    QR 仕様には、非表示ゾーンに関するより詳細な情報が含まれています。

    照明と背景

    QR コード検出の品質は、さまざまな照明や背景によって影響を受けます。

    • 通常の照明条件下では、パフォーマンスを向上させるために、黒/白モジュールが十分なコントラストを持つようにします。

    • 明るい照明や暗い背景がある極端な照明条件では、コントラストを下げて調整すると、QR コードの検出率を向上させることができます。 QR コード内の白い背景は、255 から減らすことができます。

    QR コードのサイズ

    Windows Mixed Reality デバイスでは、各辺が 5 cm 未満の QR コードを処理できません。

    5 cm から 10 cm までの辺の QR コードの場合、コードを検出するためにはデバイスをかなり近づける必要があります。 コードを検出するのにより長く時間がかかる場合があります。

    コードを正確に検出する時間は、QR コードのサイズだけでなく、コードからどれだけ離れているかによって異なります。 サイズの問題を解決するには、コードにより近づける必要があります。

    QR コードからの距離と角度

    追跡カメラでは、特定の詳細度しか検出できません。 小さなコード (側面に沿って 10 cm 未満) の場合は、かなり近い必要があります。 バージョン 1 の QR コードのサイズが 10 cm から 25 cm の場合、最小検出距離は 0.15 メートルから 0.5 メートルです。

    サイズに対して検出距離は比例して増加しますが、サポートされる QR のバージョンとモジュールのサイズによっても異なります。 バージョンが高くなるほど、モジュールは小さくなり、より近い位置からしか検出できなくなります。 検出距離をより長くする必要がある場合は、マイクロ QR コードを試すこともできます。 QR 検出は、コードの検出に適切な解像度を確保するために、+= 45° の範囲で動作します。

    その他の検出に関する考慮事項:

    • 曲面上の QR コードはサポートされません。
    • 面配向がサポートされます。 より良い検出のためには、面外が正面から見て <= +-45 である必要があります。
    • QR コードの物理サイズには、2/3 ピクセル以上のモジュールがある必要があります。 注: 上位バージョンの QR コードには、より小さなモジュールがあります。

    最適な検出のための QR コードの距離とサイズのトレードオフの関係については、次のグラフを参照してください。

    QR コード サイズの距離グラフ

    重要

    十分なコントラストと適切な境界線が確保されていることを必ず確認してください。

    QR コード データの管理

    Windows Mixed Reality デバイスは、ドライバーのシステム レベルで QR コードを検出します。 デバイスが再起動されるか、ドライバーが再起動されると、検出された QR コードの履歴がクリアされます。 再検出された QR コードは、新しいオブジェクトとして扱われます。

    特定のタイムスタンプよりも古い QR コードを無視するようにアプリを構成することをお勧めします。これはアプリ内で指定できます。 QR Code API は、最後の検出が行われた時刻を指定します。 ほとんどのアプリ開発者は、アプリが起動されたときのシステム時刻を使用して、QR コードが検出された時刻を判断します。

    QR コードのデータは、アプリ固有ではありません。 アプリの起動時には、提供されている使用可能な QR コードのリストがあります。 アプリ開発者は、このアプリに関連する QR コードを判別します。

    特定のスペースにおける QR コードの配置

    QR コードを配置する場所と方法に関する推奨事項については、「HoloLens の環境に関する考慮事項」を参照してください。

    トラブルシューティングと FAQ

    どのような機能が必要ですか?

    Web カメラ機能がマニフェストに追加されている必要があります (Unity の機能のチェックボックス)。 標準の UWP プロジェクトとしてビルドする場合も、ソリューション プロジェクトの package.appxmanifest に含めます。

    次の関数を呼び出してアクセスを要求します。

    #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 プラグインのファイルはどこで入手できますか?

    必要なすべてのファイルとドキュメントは、次の場所にあります。

    https://www.nuget.org/packages/Microsoft.MixedReality.QR

    Microsoft.MixedReality.QR.QRCodeWatcher を使用するには、UWP をどのように準備すればよいですか?

    • NuGet パックを使用して、必要なファイルをアンパックします。

    • プロジェクトに Microsoft.MixedReality.QR.winmd への参照を追加し、API の使用を開始します。

    • 正しいアーキテクチャ バージョンのプラグインを追加して、ビルドでそれらを使用します。

    Microsoft.MixedReality.QR.QRCodeWatcher を使用するように Unity を準備するには、どのようにすればよいですか?

    Unity に NuGet を使用して、上記の NuGet パックを指すようにします。

    QR コードを作成するにはどうすればよいですか?

    QR コード ジェネレーターを確認します。1 つの例を次に示します

    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 メートルから 0.5 メートルの範囲です。 これらから検出できる最も遠いものは、最小コードの場合は約 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 でどのようにアプリをデバッグすればよいですか?

    Microsoft.MixedReality.QR.dll のシンボルの読み込みがスキップされたのは、含まれるモジュールのリストに指定されていないためです。

    再現方法

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

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

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

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

    シンボルが追加されるように、次のリリースに対して作業を行っています。 それまでの間は、Visual Studio のオプションで DLL を除外することで、アプリをデバッグできます。

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

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

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

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

    QR コードの平滑化プロセスは変更されましたか?

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

    関連項目