Камера с определяемым местоположением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 и Windows Media Foundation, которые работают с мобильными и рабочим столами в HoloLens.The same universal windows media capture and windows media foundation APIs that work on mobile and desktop work on HoloLens. Unity переносит эти API Windows в абстрактные функции использования камеры в HoloLens.Unity has wrapped these windows APIs to abstract camera usage features on HoloLens. К задачам функций относятся обычные фотографии и видеоролики (с голограммами или без них), а также расположение камеры в и перспективы на сцене.Feature tasks include 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)

  • Фиксированная камера с фокусировкой или видео (ПС) с автобалансом белого, автоматической экспозицией и полным конвейером обработки образов.Fixed focus photo/video (PV) camera with auto white balance, auto exposure, and full image-processing pipeline.

  • Белый индикатор конфиденциальности, направленный на мир, будет загораться каждый раз, когда камера активнаWhite Privacy LED facing the world will illuminate whenever the camera is active

  • Камера поддерживает следующие режимы (все режимы — 16:9 пропорций) в 30, 24, 20, 15 и 5 кадров/с.The camera supports the following modes (all modes are 16:9 aspect ratio) at 30, 24, 20, 15, and 5 fps:

    ВидеоVideo Preview (Предварительный просмотр)Preview МогутStill Горизонтальное поле представления (H-фов)Horizontal Field of View (H-FOV) Предлагаемое использованиеSuggested usage
    1280 x 7201280x720 1280 x 7201280x720 1280 x 7201280x720 45 градусов45 deg (режим по умолчанию с видео стабилизации)(default mode with video stabilization)
    Н/ДN/A Н/ДN/A 2048x11522048x1152 67 градусов67 deg Изображение с наивысшим разрешением по-прежнемуHighest resolution still image
    1408x7921408x792 1408x7921408x792 1408x7921408x792 48 градусов48 deg Разрешение перепроверки (заполнения) перед видео стабилизацииOverscan (padding) resolution before video stabilization
    1344x7561344x756 1344x7561344x756 1344x7561344x756 67 градусов67 deg Крупный фов видеорежим с пересканированиемLarge FOV video mode with overscan
    896x504896x504 896x504896x504 896x504896x504 48 градусов48 deg Режим низкого уровня питания и низкого разрешения для задач обработки изображенийLow power / Low-resolution mode for image-processing tasks

HoloLens 2HoloLens 2

  • Автоматическое фокусирование фотографии и Видеокамеры (ПС) с автобалансом белого, автоматической экспозицией и полным конвейером обработки образов.Auto-focus photo/video (PV) camera with auto white balance, auto exposure, and full image-processing pipeline.

  • Белый индикатор конфиденциальности, направленный на мир, будет освещен всякий раз, когда камера активна.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 (Предварительный просмотр)Preview МогутStill Частота кадровFrame rates Горизонтальное поле представления (H-фов)Horizontal Field of View (H-FOV) Предлагаемое использованиеSuggested usage
    Прежние, 0 Баланцедвидеоандфото, 100Legacy,0 BalancedVideoAndPhoto,100 2272x12782272x1278 2272x12782272x1278 15,3015.30 64,6964.69 Высококачественная запись видеоHigh-quality video recording
    Прежние, 0 Баланцедвидеоандфото, 100Legacy,0 BalancedVideoAndPhoto,100 896x504896x504 896x504896x504 15,3015.30 64,6964.69 Предварительный просмотр потока для записи фотографий высокого качестваPreview stream for high-quality photo capture
    Прежние, 0 Баланцедвидеоандфото, 100Legacy,0 BalancedVideoAndPhoto,100 3904x21963904x2196 64,6964.69 Высококачественная запись фотографийHigh-quality photo capture
    Баланцедвидеоандфото, 120BalancedVideoAndPhoto, 120 1952x11001952x1100 1952x11001952x1100 1952x11001952x1100 15,3015.30 64,6964.69 Сценарии длительной длительностиLong duration scenarios
    Баланцедвидеоандфото, 120BalancedVideoAndPhoto, 120 1504x8461504x846 1504x8461504x846 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 1504x8461504x846 1504x8461504x846 5, 15, 30, 605,15,30,60 64,6964.69 Видеоконференции, сценарии длительной длительностиVideo conferencing, long duration scenarios
    Видеоконференции, 100 Баланцедвидеоандфото, 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 Баланцедвидеоандфото, 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 Баланцедвидеоандфото, 120Videoconferencing,100 BalancedVideoAndPhoto,120 1128x6361128x636 15, 3015,30 64,6964.69 Видеоконференции, сценарии длительной длительностиVideo conferencing, long duration scenarios
    Видеоконференции, 100 Баланцедвидеоандфото, 120Videoconferencing,100 BalancedVideoAndPhoto,120 960x540960x540 15, 3015,30 64,6964.69 Видеоконференции, сценарии длительной длительностиVideo conferencing, long duration scenarios
    Видеоконференции, 100 Баланцедвидеоандфото, 120Videoconferencing,100 BalancedVideoAndPhoto,120 760x428760x428 15, 3015,30 64,6964.69 Видеоконференции, сценарии длительной длительностиVideo conferencing, long duration scenarios
    Видеоконференции, 100 Баланцедвидеоандфото, 120Videoconferencing,100 BalancedVideoAndPhoto,120 640 x 360640x360 15, 3015,30 64,6964.69 Видеоконференции, сценарии длительной длительностиVideo conferencing, long duration scenarios
    Видеоконференции, 100 Баланцедвидеоандфото, 120Videoconferencing,100 BalancedVideoAndPhoto,120 500x282500x282 15, 3015,30 64,6964.69 Видеоконференции, сценарии длительной длительностиVideo conferencing, long duration scenarios
    Видеоконференции, 100 Баланцедвидеоандфото, 120Videoconferencing,100 BalancedVideoAndPhoto,120 424x240424x240 15, 3015,30 64,6964.69 Видеоконференции, сценарии длительной длительностиVideo conferencing, long duration scenarios

Примечание

Клиенты могут использовать запись смешанной реальности , чтобы принимать видео или фотографии приложения, включая голограммы и видео стабилизации.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. Вы также можете включить (и настроить) запись смешанной реальности непосредственно в приложении.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 and 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.

Использование UnityUsing Unity

Чтобы перейти от "Камераинтринсикс" и "Камеракурдинатесистем" к своей системе координат приложения или мира, следуйте инструкциям в статье о камере размещаемые в 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 is automatically provided by PhotoCaptureFrame class, and so you don't need to worry about the CameraCoordinateSystem transforms discussed below.

Использование МедиафрамереференцеUsing MediaFrameReference

Эти инструкции применяются, если йоу'р использует класс медиафрамереференце для чтения кадров изображения с камеры.These instructions apply if you'r using the MediaFrameReference class to read image frames from the camera.

Каждый кадр изображения (фото или видео) включает в себя спатиалкурдинатесистем с корнем на камере во время записи, доступ к которому можно получить с помощью свойства курдинатесистем медиафрамереференце.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. Каждый кадр содержит описание модели линзы, которое можно найти в свойстве камераинтринсикс .Each frame contains a description of the camera lens model, which can be found in the CameraIntrinsics property. Вместе эти преобразования определяются для каждого пикселя в трехмерном пространстве, представляющем путь, взятый фотоны, который создал пиксель.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).

Каждый кадр изображения предоставляет следующие сведения:Each image frame provides the following:

Образец холографикфацетраккинг показывает довольно простой способ запроса преобразования между системой координат камеры и собственными системами координат приложения.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.

Использование Media FoundationUsing Media Foundation

Если вы используете 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 поток видео и все еще не искажается в конвейере обработки образов системы до того, как фреймы становятся доступными для приложения (в предварительной версии потока содержатся исходные искаженные кадры).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). Поскольку доступны только Камераинтринсикс, приложения должны предположить, что кадры изображения представляют собой идеальную пинхоле камеру.Because only the CameraIntrinsics are made available, applications must assume image frames represent a perfect pinhole camera.

В HoloLens (первое поколение) функция undistortия в обработчике изображений может оставить ошибку размером до 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. Во многих случаях эта ошибка не имеет значения, но если вы выводите голограммы на настоящие плакаты и маркеры, то, например, заметите <10-px (примерно 11 мм для размещения с появлением 2 метров), эта ошибка может быть вызвана ошибкой искажения.In many use cases, this error won't matter, but if you're aligning holograms to real world posters/markers, for example, and you notice a <10-px offset (roughly 11 mm 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-значок в этом месте (Камератоворлд. Мултиплипоинт (Vector3. Zero)) и даже нарисовать маленькую стрелку в направлении, в котором была направлена камера (Камератоворлд. Мултипливектор (Vector3. Forward)).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

Многие приложения смешанной реальности используют распознаваемый образ или визуальный шаблон для создания отслеживающей точки в пространстве.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 включают поиск объекта в реальном мире с тегами фидуЦиалс (например, ТВ-монитор с QR-кодом), размещение голограмм на фидуЦиалс и визуальное связывание с устройствами, не являющимися HoloLens, например планшетами, настроенными для взаимодействия с HoloLens через Wi-Fi.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 set up to communicate with HoloLens via Wi-Fi.

Вам потребуется несколько вещей, чтобы распознать визуальный шаблон и поместить объект в мировое пространство приложений:You'll need a few things to recognize a visual pattern and place an object in the applications world space:

  1. Набор средств для распознавания шаблона изображения, например QR-код, Теги AR, поиск лиц, круговые инспекторы, распознавание текста и т. д.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. Основной поток: управляет объектом CameraMain 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. Основной поток: повторение из шага 2Main Thread: repeat from step 2

Некоторые системы меток изображений обеспечивают только одно место в пикселях (другие предоставляют полное преобразование, в котором этот раздел не будет нужен), что соответствует лучау из возможных расположений.Some image marker systems only provide a single pixel location (others provide the full transform in which case this section won't be needed), which equates to a ray of possible locations. Чтобы получить одно трехмерное расположение, можно использовать несколько лучей и найти окончательный результат по их приблизительному пересечением.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);
 }

Учитывая два или более расположений отслеживаний тегов, можно разместить смоделированную сцену в соответствии с текущим сценарием пользователя.Given two or more tracked tag locations, you can position a modeled scene to fit the user's current scenario. Если вы не можете предположить сила притяжения, вам потребуется три расположения тегов.If you can't assume gravity, then you'll need three tag locations. Во многих случаях мы используем цветовую схему, где белый шарик представляет расположение тегов, отслеживающихся в реальном времени, а синий шарик — расположения смоделированных тегов.In many cases, we use a color scheme where white spheres represent real-time tracked tag locations, and blue spheres represent modeled tag locations. Это позволяет пользователю визуально оценить качество выравнивания.This allows the user to visually gauge the alignment quality. Мы предполагаем, что во всех наших приложениях выполняется следующая настройка:We assume the following setup in all our applications:

  • Два или более расположения смоделированных теговTwo or more modeled tag locations
  • Одна область калибровки, которая в сцене является родителем тегов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 modeled tags with the real-time tags (we're careful to move the parent space, not the modeled 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;

Отслеживать или выявлять стационарные или переносить реальные объекты и лица с помощью индикаторов или других библиотек распознавателей;Track or Identify Tagged Stationary or Moving real-world objects/faces using LEDs or other recognizer libraries

Примеры:Examples:

  • Промышленные роботы с индикаторами (или QR-коды для более медленных движущихся объектов)Industrial robots with LEDs (or QR codes for slower moving objects)
  • Определение и распознавание объектов в комнатеIdentify and recognize objects in the room
  • Определение и распознавание людей в комнате, например размещение карточек контактных лиц с помощью лицIdentify and recognize people in the room, for example placing holographic contact cards over faces

См. также разделSee also