場所を特定できるカメラLocatable camera

HoloLens には、デバイスの前面に取り付けられている世界中のカメラが搭載されています。これにより、アプリはユーザーに表示される内容を確認できます。HoloLens includes a world-facing camera mounted on the front of the device, which enables apps to see what the user sees. スマートフォン、ノートブック、またはデスクトップのカラーカメラの場合と同じように、開発者はカメラのアクセスと制御を行うことができます。Developers have access to and control of the camera, just as they would for color cameras on smartphones, portables, or desktops. モバイルおよびデスクトップで動作する同じユニバーサル windows media capture および windows Media foundation Api が HoloLens で動作します。The same universal windows media capture and windows media foundation APIs that work on mobile and desktop work on HoloLens. Unity では、 これらの Windows api をラップ して、HoloLens でのカメラの単純な使用を抽象化し、(ホログラムの有無にかかわらず) 通常の写真やビデオを撮影したり、カメラの位置をシーン上で検索したりするなどのタスクを実行しました。Unity has also wrapped these windows APIs to abstract simple usage of the camera on HoloLens for tasks such as taking regular photos and videos (with or without holograms) and locating the camera's position in and perspective on the scene.

デバイスカメラ情報Device camera information

HoloLens (最初世代)HoloLens (first-generation)

  • 自動白バランス、自動露出、およびフルイメージ処理パイプラインを使用して、フォーカスされたフォト/ビデオ (PV) カメラを修正します。Fixed focus photo/video (PV) camera with auto white balance, auto exposure, and full image processing pipeline.

  • 世界中のホワイトプライバシー LED は、カメラがアクティブになるたびに点灯しますWhite Privacy LED facing the world will illuminate whenever the camera is active

  • カメラは、30、24、20、15、および 5 fps で、次のモード (すべてのモードが16:9 の縦横比) をサポートしています。The camera supports the following modes (all modes are 16:9 aspect ratio) at 30, 24, 20, 15, and 5 fps:

    ビデオVideo [プレビュー]Preview それでもなおStill ビューの水平方向のフィールド (H 視界)Horizontal Field of View (H-FOV) 推奨される使用方法Suggested usage
    1280 x 7201280x720 1280 x 7201280x720 1280 x 7201280x720 45度45deg (ビデオ安定化を使用した既定のモード)(default mode with video stabilization)
    該当なしN/A 該当なしN/A 2048x11522048x1152 67deg67deg 高解像度の静止画像Highest resolution still image
    1408x7921408x792 1408x7921408x792 1408x7921408x792 48度48deg ビデオ安定化前のオーバースキャン (埋め込み) 解像度Overscan (padding) resolution before video stabilization
    1344x7561344x756 1344x7561344x756 1344x7561344x756 67deg67deg オーバースキャンによる大規模な視界のビデオモードLarge FOV video mode with overscan
    896x504896x504 896x504896x504 896x504896x504 48度48deg イメージ処理タスクの低電力/低解像度モードLow power / Low resolution mode for image processing tasks

HoloLens 2HoloLens 2

  • 自動ホワイトバランス、自動露出、およびフルイメージ処理パイプラインを使用して、写真/ビデオ (PV) カメラを自動フォーカスします。Auto-focus photo/video (PV) camera with auto white balance, auto exposure, and full image processing pipeline.

  • 世界中のホワイトプライバシー LED は、カメラがアクティブになるたびに点灯します。White Privacy LED facing the world will illuminate whenever the camera is active.

  • HoloLens 2 では、さまざまなカメラプロファイルがサポートされています。HoloLens 2 supports different camera profiles. カメラの機能を検出して選択する方法について説明します。Learn how to discover and select camera capabilities.

  • カメラでは、次のプロファイルと解像度がサポートされています (すべてのビデオモードは16:9 縦横比です)。The camera supports the following profiles and resolutions (all video modes are 16:9 aspect ratio):

    プロファイルProfile ビデオVideo [プレビュー]Preview それでもなおStill フレーム レートFrame rates ビューの水平方向のフィールド (H 視界)Horizontal Field of View (H-FOV) 推奨される使用方法Suggested usage
    Legacy、0 BalancedVideoAndPhoto、100Legacy,0 BalancedVideoAndPhoto,100 2272x12782272x1278 2272x12782272x1278 15、3015,30 64.6964.69 高品質なビデオ記録High quality video recording
    Legacy、0 BalancedVideoAndPhoto、100Legacy,0 BalancedVideoAndPhoto,100 896x504896x504 896x504896x504 15、3015,30 64.6964.69 高品質の写真キャプチャ用のプレビューストリームPreview stream for high quality photo capture
    Legacy、0 BalancedVideoAndPhoto、100Legacy,0 BalancedVideoAndPhoto,100 3904x21963904x2196 64.6964.69 高品質な写真キャプチャHigh quality photo capture
    BalancedVideoAndPhoto、120BalancedVideoAndPhoto,120 1952x11001952x1100 1952x11001952x1100 1952x11001952x1100 15、3015,30 64.6964.69 長期間のシナリオLong duration scenarios
    BalancedVideoAndPhoto、120BalancedVideoAndPhoto,120 1504x84 61504x846 1504x84 61504x846 15、3015,30 64.6964.69 長期間のシナリオLong duration scenarios
    ビデオ会議、100VideoConferencing,100 1952x11001952x1100 1952x11001952x1100 1952x11001952x1100 15、30、6015,30,60 64.6964.69 ビデオ会議、長期間のシナリオVideo conferencing, long duration scenarios
    ビデオ会議、100Videoconferencing,100 1504x84 61504x846 1504x84 61504x846 5、15、30、605,15,30,60 64.6964.69 ビデオ会議、長期間のシナリオVideo conferencing, long duration scenarios
    ビデオ会議、100 BalancedVideoAndPhoto、120Videoconferencing,100 BalancedVideoAndPhoto,120 1920 x 10801920x1080 1920 x 10801920x1080 1920 x 10801920x1080 15、3015,30 64.6964.69 ビデオ会議、長期間のシナリオVideo conferencing, long duration scenarios
    ビデオ会議、100 BalancedVideoAndPhoto、120Videoconferencing,100 BalancedVideoAndPhoto,120 1280 x 7201280x720 1280 x 7201280x720 1280 x 7201280x720 15、3015,30 64.6964.69 ビデオ会議、長期間のシナリオVideo conferencing, long duration scenarios
    ビデオ会議、100 BalancedVideoAndPhoto、120Videoconferencing,100 BalancedVideoAndPhoto,120 1128x6361128x636 15、3015,30 64.6964.69 ビデオ会議、長期間のシナリオVideo conferencing, long duration scenarios
    ビデオ会議、100 BalancedVideoAndPhoto、120Videoconferencing,100 BalancedVideoAndPhoto,120 960 x 540960x540 15、3015,30 64.6964.69 ビデオ会議、長期間のシナリオVideo conferencing, long duration scenarios
    ビデオ会議、100 BalancedVideoAndPhoto、120Videoconferencing,100 BalancedVideoAndPhoto,120 760x428760x428 15、3015,30 64.6964.69 ビデオ会議、長期間のシナリオVideo conferencing, long duration scenarios
    ビデオ会議、100 BalancedVideoAndPhoto、120Videoconferencing,100 BalancedVideoAndPhoto,120 640 x 360640x360 15、3015,30 64.6964.69 ビデオ会議、長期間のシナリオVideo conferencing, long duration scenarios
    ビデオ会議、100 BalancedVideoAndPhoto、120Videoconferencing,100 BalancedVideoAndPhoto,120 500x282500x282 15、3015,30 64.6964.69 ビデオ会議、長期間のシナリオVideo conferencing, long duration scenarios
    ビデオ会議、100 BalancedVideoAndPhoto、120Videoconferencing,100 BalancedVideoAndPhoto,120 424x240424x240 15、3015,30 64.6964.69 ビデオ会議、長期間のシナリオVideo conferencing, long duration scenarios

注意

混合 reality キャプチャを利用して、アプリのビデオや写真を撮ることができます。これには、ホログラムやビデオの安定化が含まれます。Customers can leverage mixed reality capture to take videos or photos of your app, which include holograms and video stabilization.

開発者にとっては、顧客がコンテンツをキャプチャしたときに可能な限り、アプリを作成する際に考慮する必要がある考慮事項があります。As a developer, there are considerations you should take into account when creating your app if you want it to look as good as possible when a customer captures content. また、アプリ内で直接、mixed reality キャプチャを有効 (およびカスタマイズ) することもできます。You can also enable (and customize) mixed reality capture from directly within your app. 詳細につい ては、「開発者向けの混合現実のキャプチャ」を参照してください。Learn more at mixed reality capture for developers.

デバイスカメラを世界中に配置するLocating the Device Camera in the World

HoloLens が写真やビデオを撮影する場合、キャプチャされたフレームには、世界中のカメラの位置と、カメラのレンズモデルが含まれます。When HoloLens takes photos and videos, the captured frames include the location of the camera in the world, as well as the lens model of the camera. これにより、アプリケーションは、イメージのシナリオを強化するために、実際の環境におけるカメラの位置を理解することができます。This allows applications to reason about the position of the camera in the real world for augmented imaging scenarios. 開発者は、お気に入りのイメージ処理またはカスタムコンピュータービジョンライブラリを使用して、独自のシナリオを独創ロールできます。Developers can creatively roll their own scenarios using their favorite image processing or custom computer vision libraries.

HoloLens ドキュメントの他の場所にある "カメラ" は、"仮想ゲームカメラ" (アプリがレンダリングするための、視錐) を指している場合があります。"Camera" elsewhere in HoloLens documentation may refer to the "virtual game camera" (the frustum the app renders to). 特に明記しない限り、このページの "カメラ" は実際の RGB カラーカメラを表します。Unless denoted otherwise, "camera" on this page refers to the real-world RGB color camera.

Unity の使用Using Unity

' CameraIntrinsics ' と ' CameraCoordinateSystem ' からアプリケーション/ワールド座標系に移行するには、 Unity の検索カメラ の記事に記載されている手順に従ってください。To go from the 'CameraIntrinsics' and 'CameraCoordinateSystem' to your application/world coordinate system, follow the instructions in the Locatable camera in Unity article. CameraToWorldMatrix は PhotoCaptureFrame クラスによって自動的に提供されるため、以下で説明する CameraCoordinateSystem の変換について心配する必要はありません。CameraToWorldMatrix is automatically provided by PhotoCaptureFrame class, and so you don't need to worry about the CameraCoordinateSystem transforms discussed below.

MediaFrameReference の使用Using MediaFrameReference

これらの手順は、 MediaFrameReference クラスを使用してカメラからイメージフレームを読み取る場合に適用されます。These instructions apply if you are using the MediaFrameReference class to read image frames from the camera.

各イメージフレーム (写真またはビデオ) には、キャプチャ時にカメラでルート化されたSpatialCoordinateSystemが含まれています。これには、 MediaFrameReferenceCoordinateSystemプロパティを使用してアクセスできます。Each image frame (whether photo or video) includes a SpatialCoordinateSystem rooted at the camera at the time of capture, which can be accessed using the CoordinateSystem property of your MediaFrameReference. さらに、各フレームには、カメラレンズモデルの説明が含まれています。これは、 CameraIntrinsics プロパティにあります。In addition, each frame contains a description of the camera lens model, which can be found in the CameraIntrinsics property. これらの変換は、ピクセルを生成した photons によって取得されたパスを表す3D 空間の光をピクセルごとに定義します。Together, these transforms define for each pixel a ray in 3D space representing the path taken by the photons that produced the pixel. これらの光線は、フレームの座標系から他の座標系 (例: 静止フレームから) への変換を取得することによって、アプリ内の他のコンテンツに関連付けることができます。These rays can be related to other content in the app by obtaining the transform from the frame's coordinate system to some other coordinate system (e.g. from a stationary frame of reference). 要約すると、各イメージフレームには次のものが表示されます。To summarize, each image frame provides the following:

HolographicFaceTracking サンプルは、カメラの座標系と独自のアプリケーション座標系との間の変換をクエリするための非常に簡単な方法を示しています。The HolographicFaceTracking sample shows the fairly straightforward way to query for the transform between the camera's coordinate system and your own application coordinate systems.

メディアファンデーションの使用Using Media Foundation

カメラからイメージフレームを読み取るためにメディアファンデーション直接使用している場合は、次のサンプルコードに示すように、各フレームの MFSampleExtension_CameraExtrinsics 属性MFSampleExtension_PinholeCameraIntrinsics 属性 を使用して、アプリケーションの他の座標系を基準としたカメラフレームを見つけることができます。If you are using Media Foundation directly to read image frames from the camera, you can use each frame's MFSampleExtension_CameraExtrinsics attribute and MFSampleExtension_PinholeCameraIntrinsics attribute to locate camera frames relative to your application's other coordinate systems, as shown in this sample code:

#include <winrt/windows.perception.spatial.preview.h>
#include <mfapi.h>
#include <mfidl.h>
 
using namespace winrt::Windows::Foundation;
using namespace winrt::Windows::Foundation::Numerics;
using namespace winrt::Windows::Perception;
using namespace winrt::Windows::Perception::Spatial;
using namespace winrt::Windows::Perception::Spatial::Preview;
 
class CameraFrameLocator
{
public:
    struct CameraFrameLocation
    {
        SpatialCoordinateSystem CoordinateSystem;
        float4x4 CameraViewToCoordinateSytemTransform;
        MFPinholeCameraIntrinsics Intrinsics;
    };
 
    std::optional<CameraFrameLocation> TryLocateCameraFrame(IMFSample* pSample)
    {
        MFCameraExtrinsics cameraExtrinsics;
        MFPinholeCameraIntrinsics cameraIntrinsics;
        UINT32 sizeCameraExtrinsics = 0;
        UINT32 sizeCameraIntrinsics = 0;
        UINT64 sampleTimeHns = 0;
 
        // query sample for calibration and validate
        if (FAILED(pSample->GetUINT64(MFSampleExtension_DeviceTimestamp, &sampleTimeHns)) ||
            FAILED(pSample->GetBlob(MFSampleExtension_CameraExtrinsics, (UINT8*)& cameraExtrinsics, sizeof(cameraExtrinsics), &sizeCameraExtrinsics)) ||
            FAILED(pSample->GetBlob(MFSampleExtension_PinholeCameraIntrinsics, (UINT8*)& cameraIntrinsics, sizeof(cameraIntrinsics), &sizeCameraIntrinsics)) ||
            (sizeCameraExtrinsics != sizeof(cameraExtrinsics)) ||
            (sizeCameraIntrinsics != sizeof(cameraIntrinsics)) ||
            (cameraExtrinsics.TransformCount == 0))
        {
            return std::nullopt;
        }
 
        // compute extrinsic transform
        const auto& calibratedTransform = cameraExtrinsics.CalibratedTransforms[0];
        const GUID& dynamicNodeId = calibratedTransform.CalibrationId;
        const float4x4 cameraToDynamicNode =
            make_float4x4_from_quaternion(quaternion{ calibratedTransform.Orientation.x, calibratedTransform.Orientation.y, calibratedTransform.Orientation.z, calibratedTransform.Orientation.w }) *
            make_float4x4_translation(calibratedTransform.Position.x, calibratedTransform.Position.y, calibratedTransform.Position.z);
 
        // update locator cache for dynamic node
        if (dynamicNodeId != m_currentDynamicNodeId || !m_locator)
        {
            m_locator = SpatialGraphInteropPreview::CreateLocatorForNode(dynamicNodeId);
            if (!m_locator)
            {
                return std::nullopt;
            }
 
            m_frameOfReference = m_locator.CreateAttachedFrameOfReferenceAtCurrentHeading();
            m_currentDynamicNodeId = dynamicNodeId;
        }
 
        // locate dynamic node
        auto timestamp = PerceptionTimestampHelper::FromSystemRelativeTargetTime(TimeSpan{ sampleTimeHns });
        auto coordinateSystem = m_frameOfReference.GetStationaryCoordinateSystemAtTimestamp(timestamp);
        auto location = m_locator.TryLocateAtTimestamp(timestamp, coordinateSystem);
        if (!location)
        {
            return std::nullopt;
        }
 
        const float4x4 dynamicNodeToCoordinateSystem = make_float4x4_from_quaternion(location.Orientation()) * make_float4x4_translation(location.Position());
 
        return CameraFrameLocation{ coordinateSystem, cameraToDynamicNode * dynamicNodeToCoordinateSystem, cameraIntrinsics };
    }

private:
    GUID m_currentDynamicNodeId{ GUID_NULL };
    SpatialLocator m_locator{ nullptr };
    SpatialLocatorAttachedFrameOfReference m_frameOfReference{ nullptr };
};

ディストーションエラーDistortion Error

HoloLens では、アプリケーションでフレームを利用できるようになる前に、ビデオストリームと静止画像ストリームがシステムのイメージ処理パイプラインで undistorted されます (プレビューストリームには、元のゆがんだフレームが含まれます)。On HoloLens, the video and still image streams are undistorted in the system's image processing pipeline before the frames are made available to the application (the preview stream contains the original distorted frames). 使用できるのは CameraIntrinsics だけなので、アプリケーションではイメージフレームが完全な pinhole カメラを表すものと想定する必要があります。Because only the CameraIntrinsics are made available, applications must assume image frames represent a perfect pinhole camera.

HoloLens (第1世代) では、イメージプロセッサのディストーション関数は、フレームメタデータで CameraIntrinsics を使用しているときに最大10ピクセルのエラーを引き続き発生させる場合があります。On HoloLens (first-generation), the undistortion function in the image processor may still leave an error of up to 10 pixels when using the CameraIntrinsics in the frame metadata. 多くのユースケースでは、このエラーは問題にはなりませんが、たとえば、ホログラムを実際のポスター/マーカーに整列させている場合、<10px オフセット (2 m の位置にあるホログラムの場合は約 11 mm) が発生した場合、この歪みエラーが原因である可能性があります。In many use cases, this error will not matter, but if you are aligning holograms to real world posters/markers, for example, and you notice a <10px offset (roughly 11mm for holograms positioned 2 meters away), this distortion error could be the cause.

お持ちのカメラの使用シナリオLocatable Camera Usage Scenarios

キャプチャされた場所で写真またはビデオを表示するShow a photo or video in the world where it was captured

デバイスカメラのフレームには、イメージがどこで撮影されたかを正確に示すために使用できる "カメラからワールドへの変換" 変換が付属しています。The Device Camera frames come with a "Camera To World" transform, that can be used to show exactly where the device was when the image was taken. たとえば、小さな holographic アイコンをこの場所 (CameraToWorld (Vector3)) に配置して、カメラが直面している方向に小さな矢印を描画する (CameraToWorld Yvector (Vector3)) ことができます ()。For example, you could position a small holographic icon at this location (CameraToWorld.MultiplyPoint(Vector3.zero)) and even draw a little arrow in the direction that the camera was facing (CameraToWorld.MultiplyVector(Vector3.forward)).

タグ/パターン/ポスター/オブジェクトの追跡Tag / Pattern / Poster / Object Tracking

多くの mixed reality アプリケーションでは、認識可能なイメージまたはビジュアルパターンを使用して、空間内の追跡可能なポイントを作成します。Many mixed reality applications use a recognizable image or visual pattern to create a trackable point in space. その後、そのポイントを基準としてオブジェクトをレンダリングしたり、既知の場所を作成したりするために使用されます。This is then used to render objects relative to that point or create a known location. HoloLens の使用例としては、fiducials でタグ付けされた現実世界のオブジェクト (QR コードを使用したテレビモニターなど) の検索、fiducials に対するホログラムの配置、および Wi-fi を介して HoloLens と通信するように設定されているタブレットなどの非 HoloLens デバイスとの視覚的な組み合わせがあります。Some uses for HoloLens include finding a real world object tagged with fiducials (e.g. a TV monitor with a QR code), placing holograms over fiducials, and visually pairing with non-HoloLens devices like tablets that have been setup to communicate with HoloLens via Wi-Fi.

ビジュアルパターンを認識し、そのオブジェクトをアプリケーションのワールド空間に配置するには、次のものが必要です。To recognize a visual pattern, and then place that object in the applications world space, you'll need a few things:

  1. 画像パターン認識ツールキット (QR コード、AR タグ、顔ファインダー、サークルトラッカー、OCR など)。An image pattern recognition toolkit, such as QR code, AR tags, face finder, circle trackers, OCR etc.
  2. 実行時にイメージフレームを収集して認識レイヤーに渡すCollect image frames at runtime, and pass them to the recognition layer
  3. 画像の位置を、世界中や世界中の写真に戻すことができます。Unproject their image locations back into world positions, or likely world rays.
  4. これらの世界の場所に仮想モデルを配置するPosition your virtual models over these world locations

いくつかの重要な画像処理リンク:Some important image processing links:

対話型アプリケーションのフレームレートを維持することは、特に長時間実行されるイメージ認識アルゴリズムを扱う場合に重要です。Keeping an interactive application frame-rate is critical, especially when dealing with long-running image recognition algorithms. このため、一般的には次のパターンを使用します。For this reason, we commonly use the following pattern:

  1. メインスレッド: カメラオブジェクトを管理しますMain Thread: manages the camera object
  2. メインスレッド: 新しいフレームの要求 (非同期)Main Thread: requests new frames (async)
  3. メインスレッド: 新しいフレームを追跡スレッドに渡しますMain Thread: pass new frames to tracking thread
  4. 追跡スレッド: キーポイントを収集するためのイメージの処理Tracking Thread: processes image to collect key points
  5. メインスレッド: 検出されるキーポイントに一致するように仮想モデルを移動しますMain Thread: moves virtual model to match found key points
  6. メインスレッド: 手順2の繰り返しMain Thread: repeat from step 2

一部のイメージマーカーシステムは、1ピクセルの位置のみを提供します (他のユーザーが完全変換を提供するため、このセクションは必要ありません)。これは、可能な場所の射線に相当します。Some image marker systems only provide a single pixel location (others provide the full transform in which case this section will not be needed), which equates to a ray of possible locations. 1つの3d 位置に移動するには、複数の光線を活用し、最終的な結果をおおよその交点で見つけることができます。To get to a single 3d location, we can then leverage multiple rays and find the final result by their approximate intersection. そのために必要な作業を次に示します。To do this, you'll need to:

  1. 複数のカメライメージの収集を開始するループを取得するGet a loop going collecting multiple camera images
  2. 関連する特徴ポイントとそのワールド光線を検索するFind the associated feature points, and their world rays
  3. 特徴のディクショナリ (それぞれが複数のワールド線を持つ) がある場合は、次のコードを使用して、これらの光線の交差部分を解決できます。When you have a dictionary of features, each with multiple world rays, you can use the following code to solve for the intersection of those rays:
public static Vector3 ClosestPointBetweenRays(
   Vector3 point1, Vector3 normalizedDirection1,
   Vector3 point2, Vector3 normalizedDirection2) {
   float directionProjection = Vector3.Dot(normalizedDirection1, normalizedDirection2);
   if (directionProjection == 1) {
     return point1; // parallel lines
   }
   float projection1 = Vector3.Dot(point2 - point1, normalizedDirection1);
   float projection2 = Vector3.Dot(point2 - point1, normalizedDirection2);
   float distanceAlongLine1 = (projection1 - directionProjection * projection2) / (1 - directionProjection * directionProjection);
   float distanceAlongLine2 = (projection2 - directionProjection * projection1) / (directionProjection * directionProjection - 1);
   Vector3 pointOnLine1 = point1 + distanceAlongLine1 * normalizedDirection1;
   Vector3 pointOnLine2 = point2 + distanceAlongLine2 * normalizedDirection2;
   return Vector3.Lerp(pointOnLine2, pointOnLine1, 0.5f);
 }

追跡タグの場所が2つ以上ある場合は、ユーザーの現在のシナリオに合わせてモデル化シーンを配置できます。Given two or more tracked tag locations, you can position a modelled scene to fit the user's current scenario. 重力を想定できない場合は、3つのタグ位置が必要になります。If you can't assume gravity, then you'll need three tag locations. 多くの場合、ホワイト球体がリアルタイムで追跡されるタグ位置を表し、blue 球体がモデル化タグの場所を表す単純な配色を使用します。In many cases, we use a simple color scheme where white spheres represent real-time tracked tag locations, and blue spheres represent modelled tag locations. これにより、ユーザーは配置品質を視覚的に測定できます。This allows the user to visually gauge the alignment quality. ここでは、すべてのアプリケーションで次のセットアップを想定しています。We assume the following setup in all our applications:

  • 2つ以上のモデル化タグの場所Two or more modelled tag locations
  • シーン内の1つの ' 調整スペース ' は、タグの親です。One 'calibration space' which in the scene is the parent of the tags
  • カメラの機能識別子Camera feature identifier
  • 調整領域を移動して、モデル化タグをリアルタイムタグに整列させる動作 (他の接続はその相対的な位置であるため、モデル化マーカー自体ではなく、親スペースを移動することは注意してください)。Behavior which moves the calibration space to align the modelled tags with the real-time tags (we are careful to move the parent space, not the modelled markers themselves, because other connect is positions relative to them).
// In the two tags case:
 Vector3 idealDelta = (realTags[1].EstimatedWorldPos - realTags[0].EstimatedWorldPos);
 Vector3 curDelta = (modelledTags[1].transform.position - modelledTags[0].transform.position);
 if (IsAssumeGravity) {
   idealDelta.y = 0;
   curDelta.y = 0;
 }
 Quaternion deltaRot = Quaternion.FromToRotation(curDelta, idealDelta);
 trans.rotation = Quaternion.LookRotation(deltaRot * trans.forward, trans.up);
 trans.position += realTags[0].EstimatedWorldPos - modelledTags[0].transform.position;

Led または他のレコグナイザーライブラリを使用して、タグ付き静止を追跡または特定したり、実際のオブジェクト/顔を移動したりします。Track or Identify Tagged Stationary or Moving real-world objects/faces using LEDs or other recognizer libraries

例 :Examples:

  • Led のある工業ロボット (または低速な移動オブジェクトの QR コード)Industrial robots with LEDs (or QR codes for slower moving objects)
  • ルーム内のオブジェクトを識別して認識するIdentify and recognize objects in the room
  • 部屋のメンバーを識別して認識します (たとえば、顔を holographic 連絡先カードを配置します)。Identify and recognize people in the room (e.g. place holographic contact cards over faces)

関連項目See also