QR コードの追跡QR code tracking

QR コードの追跡は、没入型の (VR) ヘッドセットの Windows Mixed Reality ドライバーに実装されます。QR code tracking is implemented in the Windows Mixed Reality driver for immersive (VR) headsets. ヘッドセット ドライバーで QR コードの追跡ツールを有効にすると、ヘッドセットは QR コードのスキャンし、目的のアプリに報告されます。By enabling the QR code tracker in the headset driver, the headset scans for QR codes and they are reported to interested apps. この機能としての使用のみ、 Windows 10 年 2018年 10 月 Update (RS5 とも呼ばれます)します。This feature is only available as of the Windows 10 October 2018 Update (also known as RS5).

注意

この記事のコード スニペットは現在の使用を示すC++/CX ではなく c++ 17 に準拠していませんC++/WinRT で使用するため、 C++ holographic プロジェクト テンプレートします。The code snippets in this article currently demonstrate use of C++/CX rather than C++17-compliant C++/WinRT as used in the C++ holographic project template. 概念は、同等のC++/WinRT のプロジェクトがコードに変換する必要があります。The concepts are equivalent for a C++/WinRT project, though you will need to translate the code.

デバイスのサポートDevice support

機能Feature HoloLensHoloLens イマーシブ ヘッドセットImmersive headsets
QR コードの追跡QR code tracking ✔️✔️

有効/無効の QR コードの追跡、ヘッドセットをEnabling and disabling QR code tracking for your headset

注:このセクションではのみ有効ですWindows 10 年 2018年 10 月 Update (RS5 とも呼ばれます)します。Note: This section is only valid for Windows 10 October 2018 Update (also known as RS5). 19 h 1 ビルド以降からこれを行うことはありません。From 19h1 builds onwards you will not have to do this. 追跡するには、QR コードを利用する mixed reality アプリを開発している場合も、これらのアプリのいずれかのお客様は、QR コードの履歴をヘッドセットのドライバーを手動で有効にする必要があります。Whether you're developing a mixed reality app that will leverage QR code tracking, or you're a customer of one of these apps, you'll need to manually turn on QR code tracking in your headset's driver.

QR コードの履歴を有効にする没入型の (VR) ヘッドセットの。In order to turn on QR code tracking for your immersive (VR) headset:

  1. お使いの PC で複合現実のポータル アプリを閉じます。Close the Mixed Reality Portal app on your PC.
  2. お使いの PC からヘッドセットを取り外します。Unplug the headset from your PC.
  3. コマンド プロンプトで次のスクリプトを実行します。Run the following script in the Command Prompt:
    reg add "HKLM\SOFTWARE\Microsoft\HoloLensSensors" /v EnableQRTrackerDefault /t REG_DWORD /d 1 /F
  4. Pc、ヘッドセットを再接続します。Reconnect your headset to your PC.

QR コードの追跡をオフに没入型の (VR) ヘッドセットの。In order to turn off QR code tracking for your immersive (VR) headset:

  1. お使いの PC で複合現実のポータル アプリを閉じます。Close the Mixed Reality Portal app on your PC.
  2. お使いの PC からヘッドセットを取り外します。Unplug the headset from your PC.
  3. コマンド プロンプトで次のスクリプトを実行します。Run the following script in the Command Prompt:
    reg add "HKLM\SOFTWARE\Microsoft\HoloLensSensors" /v EnableQRTrackerDefault /t REG_DWORD /d 0 /F
  4. Pc、ヘッドセットを再接続します。Reconnect your headset to your PC. これにより、検出された、QR コード「以外の場所を特定できる」This will make any discovered QR codes "non-locatable."

印刷コードPrinting codes

何よりもまず、 QR コードの specという"QR コード シンボルの領域が必要です、余白または「quiet ゾーン」を使用するのには、します。First and foremost, the spec for QR codes says "The QR Code symbol area requires a margin or "quiet zone" around it to be used. 余白は、何も出力されませんシンボルに関する明確領域です。The margin is a clear area around a symbol where nothing is printed. QR コードが必要です、シンボルのすべての辺に 4 モジュール優勢。"QR Code requires a four-module wide margin at all sides of a symbol." これは、モジュールのコードに黒い四角を 1 つのサイズの 4 倍の各側で、幅がある必要があります。This needs to have a width, on every side, of four times the size of a module - a single black square in the code. 仕様のページには、QR コードを印刷し、特定サイズの QR コードのために必要な領域を把握する方法に関するアドバイスが含まれています。The spec page contains advice on how to print QR codes and figure out the area required to make a certain sized QR code.

現在 QR コードの品質の検出は、さまざまな照明と背景を受けやすくなります。Currently QR code detection quality is susceptible to varying illumination and backdrop. この、照明に注意してくださいし、適切なコードを印刷します。To combat this, note your illumination and print the appropriate code. 特に明るい光のシーンでは、グレーの背景の上に黒のコードを印刷します。In a scene with particularly bright lighting, print a code that is black on a gray background. で、光量不足シーン、白のしくみは黒です。Under a low-light scene, black on white works. 同様に、コードに背景が特にダークの場合は、お試しください灰色のコードには黒を検出、レートが低い場合。Likewise, if the backdrop to the code is particularly dark, try a black on gray code if your detection rate is low. それ以外の場合、背景が明るいの場合は、正規のコードは問題なく機能する必要があります。Otherwise, if the backdrop is lighter, a regular code should work fine.

QRTracking APIQRTracking API

QRTracking プラグインでは、QR コードを追跡するための Api を公開します。The QRTracking plugin exposes the APIs for QR code tracking. プラグインを使用する次の種類を使用する必要があります、 QRCodesTrackerPlugin名前空間。To use the plugin, you will need to use the following types from the QRCodesTrackerPlugin namespace.

 // QRTracker plugin namespace
 namespace QRCodesTrackerPlugin
 {
    // Encapsulates information about a labeled QR code element.
    public class QRCode
    {        
        // Unique id that identifies this QR code for this session.
        public Guid Id { get; private set; }
           
        // Version of this QR code.
        public Int32 Version { get; private set; }
        
        // PhysicalSizeMeters of this QR code.
        public float PhysicalSizeMeters { get; private set; }
        
        // QR code Data.
        public string Code { get; private set; }
        
        // QR code DataStream this is the error corrected data stream
        public Byte[] CodeStream { get; private set; }
        
        // QR code last detected QPC ticks.
        public Int64 LastDetectedQPCTicks { get; private set; }
    };
    
    // The type of a QR Code added event.
    public class QRCodeAddedEventArgs
    {   
        // Gets the QR Code that was added
        public QRCode Code { get; private set; }
    };
    
    // The type of a QR Code removed event.
    public class QRCodeRemovedEventArgs
    {
        // Gets the QR Code that was removed.
        public QRCode Code { get; private set; }
    };
    
    // The type of a QR Code updated event.
    public class QRCodeUpdatedEventArgs
    {
        // Gets the QR Code that was updated.
        public QRCode Code { get; private set; }
    };
    
    // A callback for handling the QR Code added event.
    public delegate void QRCodeAddedHandler(QRCodeAddedEventArgs args);
    
    // A callback for handling the QR Code removed event.
    public delegate void QRCodeRemovedHandler(QRCodeRemovedEventArgs args);
    
    // A callback for handling the QR Code updated event.
    public delegate void QRCodeUpdatedHandler(QRCodeUpdatedEventArgs args);
    
    // Enumerates the possible results of a start of QRTracker.
    public enum QRTrackerStartResult
    {
        // The start has succeeded.
        Success = 0,
        
        //  The currently no device is connected.
        DeviceNotConnected = 1,
        
        // The QRTracking Feature is not supported by the current HMD driver
        // systems
        FeatureNotSupported = 2,
        
        // The access is denide. Administrator needs to enable QR tracker feature.
        AccessDenied = 3,
    };
    
    // QRTracker
    public class QRTracker
    {
        // Constructs a new QRTracker.
        public QRTracker(){}
        
        // Gets the QRTracker.
        public static QRTracker Get()
        {
            return new QRTracker();
        }
        
        // Start the QRTracker. Returns QRTrackerStartResult.
        public QRTrackerStartResult Start()
        {
            throw new NotImplementedException();
        }
        
        // Stops tracking QR codes.
        public void Stop() {}

        // Not Implemented
        Windows.Foundation.Collections.IVector<QRCode> GetList() { throw new NotImplementedException(); }
        
        // Event representing the addition of a QR Code.
        public event QRCodeAddedHandler Added = delegate { };
        
        // Event representing the removal of a QR Code.
        public event QRCodeRemovedHandler Removed = delegate { };
        
        // Event representing the update of a QR Code.
        public event QRCodeUpdatedHandler Updated = delegate { };
    };
}

Unity での追跡、QR コードを実装します。Implementing QR code tracking in Unity

Unity シーン MRTK (Mixed Reality Toolkit) のサンプルします。Sample Unity scenes in MRTK (Mixed Reality Toolkit)

Mixed Reality toolkit QR 追跡 API を使用する方法の例が見つかりますGitHub サイトします。You can find an example for how to use the QR Tracking API in the Mixed Reality Toolkit GitHub site.

MRTK では、使用状況の追跡 QR simpilify に必要なスクリプトを実装しました。MRTK has implemented the needed scripts to simpilify the QR tracking usage. QR 追跡アプリを開発するために必要なすべての資産は、"QRTracker"フォルダーには。All necessary assets to develop QR tracking apps are in the "QRTracker" folder. 2 つのシーンがある: 1 つ目が検出され、2 つ目は QR コードにアタッチされている座標系を使用して、ホログラムを表示する方法を示します、単に QR コードの詳細を表示するサンプルに示します。There are two scenes: the first is a sample to simply show details of the QR codes as they are detected, and the second demonstrates how to use the coordinate system attached to the QR code to display holograms. Prefab"QRScanner"QRCodes を使用する処理に必要なすべてのスクリプトを追加します。There is a prefab "QRScanner" which added all the necessary scripts to the scenes to use QRCodes. QRCodeManager スクリプトは、QRCode API を実装するシングルトン クラスです。The script QRCodeManager is a singleton class that implements the QRCode API. これは、シーンに追加する必要があります。This needs to be added to your scene. スクリプト"AttachToQRCode"を使用して、QR コードの座標系にホログラムをアタッチする、このスクリプトは、ホログラムのいずれかに追加できます。The script "AttachToQRCode" is used to attach holograms to the QR Code coordinate systems, this script can be added to any of your holograms. "SpatialGraphCoordinateSystem"は、QRCode 座標系を使用する方法を示します。The "SpatialGraphCoordinateSystem" shows how to use the QRCode coordinate system. としてこれらのスクリプトを使用できるのプロジェクトでシーンまたは書き込める独自直接プラグインを使用して、前述のようです。These scripts can be used as-is in your project scenes or you can write your own directly using the plugin as described above.

QR コードが Unity MRTK なしで追跡を実装します。Implementing QR code tracking in Unity without MRTK

MRTK に依存することがなく、Unity で QR 追跡 API を使用することもできます。You can also use the QR Tracking API in Unity without taking a dependency on MRTK. API を使用するためには、次の命令を使用してプロジェクトを準備する必要があります。In order to use the API, you will need to prepare your project with the following instruction:

  1. 名前の unity プロジェクトの assets フォルダーに新しいフォルダーを作成します。「プラグイン」されます。Create a new folder in the assets folder of your unity project with the name: "Plugins".
  2. すべての必要なファイル コピーこのフォルダー作成したローカルの「プラグイン」フォルダーにします。Copy all the required files from this folder into the local "Plugins" folder you just created.
  3. スクリプトを追跡する QR を使用することができます、 MRTK scripts フォルダーまたは独自に作成します。You can use the QR tracking scripts in the MRTK scripts folder or write your own. 注:これらのプラグインは、専用ですWindows 10 年 2018年 10 月 Update (RS5 とも呼ばれます)をビルドします。Note: These plugins are only for Windows 10 October 2018 Update (also known as RS5) builds. プラグインは、次の windows リリースで更新されます。The plugins will be updated with the next windows release. 実験的な現在のプラグイン、windows の将来のバージョンに対しては機能しません。The current plugins were experimental and will not work for future version of the windows. 次の windows リリースから使用できる新しいプラグインが発行されますれされません下位互換および RS5 では動作しません)。New plugins will be published which can be used from next windows release and they will not be backwards compatable and will not work with RS5).

QR コードを DirectX での追跡を実装します。Implementing QR code tracking in DirectX

使用するには、QRTrackingPlugin Visual Studio では、.winmd に、QRTrackingPlugin の参照を追加する必要があります。To use the QRTrackingPlugin in Visual Studio, you will need to add reference of the QRTrackingPlugin to the .winmd. 検索することができます、ファイルにサポートされているプラットフォームをここで必要なします。You can find the required files for supported platforms here.

// MyClass.h
public ref class MyClass
{
    private:
      QRCodesTrackerPlugin::QRTracker^ m_qrtracker;
      // Handlers
      void OnAddedQRCode(QRCodesTrackerPlugin::QRCodeAddedEventArgs ^args);
      void OnUpdatedQRCode(QRCodesTrackerPlugin::QRCodeUpdatedEventArgs ^args);
      void OnRemovedQRCode(QRCodesTrackerPlugin::QRCodeRemovedEventArgs ^args);
    ..
};
// MyClass.cpp
MyClass::MyClass()
{
    // Create the tracker and register the callbacks
    m_qrtracker = ref new QRCodesTrackerPlugin::QRTracker();
    m_qrtracker->Added += ref new QRCodesTrackerPlugin::QRCodeAddedHandler(this, &OnAddedQRCode);
    m_qrtracker->Updated += ref new QRCodesTrackerPlugin::QRCodeUpdatedHandler(this, &OnUpdatedQRCode);
    m_qrtracker->Removed += ref new QRCodesTrackerPlugin::QRCodeRemovedHandler(this, &QOnRemovedQRCode);

    // Start the tracker
    if (m_qrtracker->Start() != QRCodesTrackerPlugin::QRTrackerStartResult::Success)
    {
      // Handle the failure
      // It can fail for multiple reasons and can be handled properly 
    }
}

void MyClass::OnAddedQRCode(QRCodesTrackerPlugin::QRCodeAddedEventArgs ^args)
{
    // use args->Code add to own list  
}

void MyClass::OnUpdatedQRCode(QRCodesTrackerPlugin::QRCodeUpdatedEventArgs ^args)
{
    // use args->Code update the existing one with the new one in own list 
}

void MyClass::OnRemovedQRCode(QRCodesTrackerPlugin::QRCodeRemovedEventArgs ^args)
{
    // use args->Code remove from own list.
}

座標系を取得します。Getting a coordinate system

左上の高速検出正方形の左上隅にある QR コードに揃えて配置右手座標系を定義します。We define a right-hand coordinate system aligned with the QR code at the top left corner of the fast detection square in the top left. 座標系は、以下に示します。The coordinate system is shown below. (非表示)、ホワイト ペーパーには z 軸が指しているが、Unity、z 軸は、用紙と左手座標系。The Z-axis is pointing into the paper (not shown), but in Unity the z-axis is out of the paper and left-handed.

示すように配置される、SpatialCoordinateSystem が定義されます。A SpatialCoordinateSystem is defined that is aligned as shown. この座標系は、API を使用して、プラットフォームから取得できますWindows::Perception::Spatial::Preview::SpatialGraphInteropPreview::CreateCoordinateSystemForNodeします。This coordinate system can be obtained from the platform using the API Windows::Perception::Spatial::Preview::SpatialGraphInteropPreview::CreateCoordinateSystemForNode.

QR コードの座標系

QRCode から ^ コード オブジェクトを次のコードは、四角形を作成して QR 座標系に配置する方法を示します。From QRCode^ Code object, the following code shows how to create a rectangle and put it in QR coordinate system:

// Creates a 2D rectangle in the x-y plane, with the specified properties.
std::vector<float3> SpatialStageManager::CreateRectangle(float width, float height)
{
    std::vector<float3> vertices(4);

    vertices[0] = { 0,  0, 0 };
    vertices[1] = { width,  0, 0 };
    vertices[2] = { width,  height, 0 };
    vertices[3] = { 0,  height, 0 };

    return vertices;
}

物理サイズを使用すると、QR 四角形を作成します。You can use the physical size to create the QR rectangle:

std::vector<float3> qrVertices = CreateRectangle(Code->PhysicalSizeMeters, Code->PhysicalSizeMeters); 

座標系は、QR コードを描画するか、場所にホログラムをアタッチを使用できます。The coordinate system can be used to draw the QR code or attach holograms to the location:

Windows::Perception::Spatial::SpatialCoordinateSystem^ qrCoordinateSystem = Windows::Perception::Spatial::Preview::SpatialGraphInteropPreview::CreateCoordinateSystemForNode(Code->Id);

QRCodesTrackerPlugin::QRCodeAddedHandlerは次のようになります。Altogether, your QRCodesTrackerPlugin::QRCodeAddedHandler may look something like this:

void MyClass::OnAddedQRCode(QRCodesTrackerPlugin::QRCodeAddedEventArgs ^args)
{
    std::vector<float3> qrVertices = CreateRectangle(args->Code->PhysicalSizeMeters, args->Code->PhysicalSizeMeters);
    std::vector<unsigned short> qrCodeIndices = TriangulatePoints(qrVertices);
    XMFLOAT3 qrAreaColor = XMFLOAT3(DirectX::Colors::Aqua);

    Windows::Perception::Spatial::SpatialCoordinateSystem^ qrCoordinateSystem =  Windows::Perception::Spatial::Preview::SpatialGraphInteropPreview::CreateCoordinateSystemForNode(args->Code->Id);
    std::shared_ptr<SceneObject> m_qrShape =
        std::make_shared<SceneObject>(
            m_deviceResources,
            reinterpret_cast<std::vector<XMFLOAT3>&>(qrVertices),
            qrCodeIndices,
            qrAreaColor,
            qrCoordinateSystem);

    m_sceneController->AddSceneObject(m_qrShape);
}

トラブルシューティングとよく寄せられる質問Troubleshooting and FAQ

一般的なトラブルシューティングGeneral troubleshooting

  • Windows を実行しているは 10 年 2018年 10 月の更新ですか?Is your PC running the Windows 10 October 2018 Update?
  • レジストリ キーを設定するか。Have you set the reg key? その後、デバイスを再起動しますか。Restarted the device afterwards?
  • QR コードのバージョンのサポートされているバージョンですか。Is the QR code version a supported version? QR コードのバージョンの 20 まで現在の API のサポート。Current API supports up to QR Code Version 20. バージョン 5 を使用して一般的な使用をお勧めします。We recommend using version 5 for general usage.
  • QR コードに近づけるか。Are you close enough to the QR code? 近ければ近いほど、カメラは QR コードには、大きいほど、QR コードのバージョン、API をサポートできます。The closer the camera is to the QR code, the higher the QR code version the API can support.

近いか、QR コードを検出する必要があるのでしょうか。How close do I need to be to the QR code to detect it?

これは、QR コードのサイズに依存し、またどのようなバージョンが。This will depend on the size of the QR code, and also what version it is. 25 cm 辺を 5 cm 側からのさまざまなバージョン 1 の QR コードでは、最小検出間隔は 0.15 メーターから 0.5 m 範囲です。For a version 1 QR code varying from 5 cm sides to 25 cm sides, the minimum detection distance ranges from 0.15 meters to 0.5 meters. 最も遠い離れたから検出されたこれら小さい QR コードのターゲットの約 0.3 メーターからに移動の規模が大きいほど 1.4 メーターします。The farthest away these can be detected from goes from about 0.3 meters for the smaller QR code targets to 1.4 meters for the bigger. QR コードをよりも大きく、次を見積もることができます。サイズの検出間隔が直線的に増加します。For QR codes bigger than that, you can estimate; the detection distance for size increases linearly. 当社の追跡ツールでは機能しません辺の QR コード 5 cm より小さい。Our tracker does not work with QR codes with sides smaller than 5 cm.

ロゴの作業で QR コードを実行しますか。Do QR codes with logos work?

ロゴの QR コードがテストされていないは現在サポートされていません。QR codes with logos have not been tested and are currently unsupported.

クリアする方法は QR コード アプリからそれらが維持されないためですか。How do I clear QR codes from my app so they don't persist?

  • QR コードは、ブート セッションでのみ保存されます。QR codes are only persisted in the boot session. 再起動 (または再起動するドライバー) 後になったし、新しいオブジェクトの [次へ] の時刻として検出されます。Once you reboot (or restart the driver), they will be gone and detected as new objects next time.
  • QR コードの履歴はドライバー セッションで、システム レベルで保存されますが、QR コードの特定のタイムスタンプよりも古いを無視する場合に、アプリを構成することができます。QR code history is saved at the system level in the driver session, but you can configure your app to ignore QR codes older than a specific timestamp if you want. 現在、API で複数のアプリは、データの利用可能性があるクリアリング QR コードの履歴をサポートするは。Currently the API does support clearing QR code history, as multiple apps might be interested in the data.

RS5 および将来のバージョンのプラグインがないプレリリースRS5 バージョンのプラグインが RS5 に対してのみ機能し、将来のバージョンは機能しません。The plugins for RS5 and future versions are not compatable RS5 version of the plugin only works for RS5 and will not work for future versions. Expermental プラグインでは、実際のプラグインで置き換えられるしを使って、今後のバージョン、windows のものである必要があります。The expermental plugin will be replaced with the real plugin and should be the one that we can use in future versions of the windows.