Appareil photo localisableLocatable camera

HoloLens intègre une caméra universelle montée sur l’avant de l’appareil, ce qui permet aux applications de voir ce que l’utilisateur voit.HoloLens includes a world-facing camera mounted on the front of the device, which enables apps to see what the user sees. Les développeurs ont accès à l’appareil photo et le contrôle de ce dernier, tout comme pour les caméras couleur sur les smartphones, les ordinateurs portables ou les ordinateurs de bureau.Developers have access to and control of the camera, just as they would for color cameras on smartphones, portables, or desktops. Les mêmes API Universal Windows Media capture et Windows Media Foundation qui fonctionnent sur les appareils mobiles et de bureau sur HoloLens.The same universal windows media capture and windows media foundation APIs that work on mobile and desktop work on HoloLens. Unity a encapsulé ces API Windows sur les fonctionnalités d’utilisation d’appareil photo abstraites sur HoloLens.Unity has wrapped these windows APIs to abstract camera usage features on HoloLens. Les tâches de fonctionnalités incluent la mise en place de photos et vidéos normales (avec ou sans hologrammes) et la localisation de la caméra dans et la perspective sur la scène.Feature tasks include taking regular photos and videos (with or without holograms) and locating the camera's position in and perspective on the scene.

Informations sur l’appareil photoDevice camera information

HoloLens (première génération)HoloLens (first-generation)

  • Correction de l’appareil photo/vidéo (PV) avec une balance des blancs automatique, une exposition automatique et un pipeline de traitement d’image complet.Fixed focus photo/video (PV) camera with auto white balance, auto exposure, and full image-processing pipeline.

  • La lumière blanche sur la confidentialité dans le monde s’illumine quand l’appareil photo est actifWhite Privacy LED facing the world will illuminate whenever the camera is active

  • L’appareil photo prend en charge les modes suivants (tous les modes sont des proportions 16:9) à 30, 24, 20, 15 et 5 i/s :The camera supports the following modes (all modes are 16:9 aspect ratio) at 30, 24, 20, 15, and 5 fps:

    VidéoVideo PRÉVERSIONPreview SubsistStill Champ horizontal de l’affichage (H-angle d’affichage)Horizontal Field of View (H-FOV) Utilisation suggéréeSuggested usage
    1280 x 7201280x720 1280 x 7201280x720 1280 x 7201280x720 45 deg45 deg (mode par défaut avec stabilisation vidéo)(default mode with video stabilization)
    N/AN/A N/AN/A 2048x11522048x1152 67 deg67 deg Image toujours la plus haute résolutionHighest resolution still image
    1408x7921408x792 1408x7921408x792 1408x7921408x792 48 deg48 deg Résolution de suranalyse (remplissage) avant la stabilisation vidéoOverscan (padding) resolution before video stabilization
    1344x7561344x756 1344x7561344x756 1344x7561344x756 67 deg67 deg Mode vidéo grand angle avec suranalyseLarge FOV video mode with overscan
    896x504896x504 896x504896x504 896x504896x504 48 deg48 deg Mode faible puissance/basse résolution pour les tâches de traitement des imagesLow power / Low-resolution mode for image-processing tasks

HoloLens 2HoloLens 2

  • Appareil photo/vidéo (PV) de focalisation automatique avec balance des blancs automatique, exposition automatique et pipeline de traitement d’image complet.Auto-focus photo/video (PV) camera with auto white balance, auto exposure, and full image-processing pipeline.

  • La lumière blanche sur la confidentialité dans le monde s’illumine quand l’appareil photo est actif.White Privacy LED facing the world will illuminate whenever the camera is active.

  • HoloLens 2 prend en charge différents profils d’appareil photo.HoloLens 2 supports different camera profiles. Découvrez comment découvrir et sélectionner les fonctionnalités de l’appareil photo.Learn how to discover and select camera capabilities.

  • L’appareil photo prend en charge les profils et résolutions suivants (tous les modes vidéo sont des proportions 16:9) :The camera supports the following profiles and resolutions (all video modes are 16:9 aspect ratio):

    ProfilProfile VidéoVideo PRÉVERSIONPreview SubsistStill Fréquences d’imagesFrame rates Champ horizontal de l’affichage (H-angle d’affichage)Horizontal Field of View (H-FOV) Utilisation suggéréeSuggested usage
    Hérité, 0 BalancedVideoAndPhoto, 100Legacy,0 BalancedVideoAndPhoto,100 2272x12782272x1278 2272x12782272x1278 15,3015.30 64,6964.69 Enregistrement vidéo de haute qualitéHigh-quality video recording
    Hérité, 0 BalancedVideoAndPhoto, 100Legacy,0 BalancedVideoAndPhoto,100 896x504896x504 896x504896x504 15,3015.30 64,6964.69 Aperçu du flux pour la capture de photos de haute qualitéPreview stream for high-quality photo capture
    Hérité, 0 BalancedVideoAndPhoto, 100Legacy,0 BalancedVideoAndPhoto,100 3904x21963904x2196 64,6964.69 Capture photo de haute qualitéHigh-quality photo capture
    BalancedVideoAndPhoto, 120BalancedVideoAndPhoto, 120 1952x11001952x1100 1952x11001952x1100 1952x11001952x1100 15,3015.30 64,6964.69 Scénarios de longue duréeLong duration scenarios
    BalancedVideoAndPhoto, 120BalancedVideoAndPhoto, 120 1504x8461504x846 1504x8461504x846 15,3015.30 64,6964.69 Scénarios de longue duréeLong duration scenarios
    Visioconférence, 100VideoConferencing,100 1952x11001952x1100 1952x11001952x1100 1952x11001952x1100 15, 30, 6015,30,60 64,6964.69 Vidéoconférence, scénarios de longue duréeVideo conferencing, long duration scenarios
    Visioconférence, 100Videoconferencing,100 1504x8461504x846 1504x8461504x846 5, 15, 30, 605,15,30,60 64,6964.69 Vidéoconférence, scénarios de longue duréeVideo conferencing, long duration scenarios
    Visioconférence, 100 BalancedVideoAndPhoto, 120Videoconferencing,100 BalancedVideoAndPhoto,120 1920 x 10801920x1080 1920 x 10801920x1080 1920 x 10801920x1080 15, 3015,30 64,6964.69 Vidéoconférence, scénarios de longue duréeVideo conferencing, long duration scenarios
    Visioconférence, 100 BalancedVideoAndPhoto, 120Videoconferencing,100 BalancedVideoAndPhoto,120 1280 x 7201280x720 1280 x 7201280x720 1280 x 7201280x720 15, 3015,30 64,6964.69 Vidéoconférence, scénarios de longue duréeVideo conferencing, long duration scenarios
    Visioconférence, 100 BalancedVideoAndPhoto, 120Videoconferencing,100 BalancedVideoAndPhoto,120 1128x6361128x636 15, 3015,30 64,6964.69 Vidéoconférence, scénarios de longue duréeVideo conferencing, long duration scenarios
    Visioconférence, 100 BalancedVideoAndPhoto, 120Videoconferencing,100 BalancedVideoAndPhoto,120 960 x 540960x540 15, 3015,30 64,6964.69 Vidéoconférence, scénarios de longue duréeVideo conferencing, long duration scenarios
    Visioconférence, 100 BalancedVideoAndPhoto, 120Videoconferencing,100 BalancedVideoAndPhoto,120 760x428760x428 15, 3015,30 64,6964.69 Vidéoconférence, scénarios de longue duréeVideo conferencing, long duration scenarios
    Visioconférence, 100 BalancedVideoAndPhoto, 120Videoconferencing,100 BalancedVideoAndPhoto,120 640 x 360640x360 15, 3015,30 64,6964.69 Vidéoconférence, scénarios de longue duréeVideo conferencing, long duration scenarios
    Visioconférence, 100 BalancedVideoAndPhoto, 120Videoconferencing,100 BalancedVideoAndPhoto,120 500x282500x282 15, 3015,30 64,6964.69 Vidéoconférence, scénarios de longue duréeVideo conferencing, long duration scenarios
    Visioconférence, 100 BalancedVideoAndPhoto, 120Videoconferencing,100 BalancedVideoAndPhoto,120 424x240424x240 15, 3015,30 64,6964.69 Vidéoconférence, scénarios de longue duréeVideo conferencing, long duration scenarios

Notes

Les clients peuvent tirer parti de la capture de la réalité mixte pour prendre des vidéos ou des photos de votre application, notamment des hologrammes et une stabilisation vidéo.Customers can leverage mixed reality capture to take videos or photos of your app, which include holograms and video stabilization.

En tant que développeur, vous devez tenir compte de certaines considérations lors de la création de votre application si vous souhaitez qu’elle apparaisse aussi bonne que possible quand un client capture du contenu.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. Vous pouvez également activer (et personnaliser) la capture de la réalité mixte à partir de directement dans votre application.You can also enable (and customize) mixed reality capture from directly within your app. En savoir plus sur la capture de la réalité mixte pour les développeurs.Learn more at mixed reality capture for developers.

Localisation de l’appareil photo de l’appareil dans le mondeLocating the Device Camera in the World

Lorsque HoloLens prend des photos et des vidéos, les images capturées incluent l’emplacement de la caméra dans le monde et le modèle d’objectif de l’appareil photo.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. Cela permet aux applications de connaître la position de la caméra dans le monde réel pour les scénarios de création d’images augmentés.This allows applications to reason about the position of the camera in the real world for augmented imaging scenarios. Les développeurs peuvent déployer de manière créative leurs propres scénarios à l’aide de leur traitement d’image préféré ou de leurs bibliothèques de vision d’ordinateur personnalisées.Developers can creatively roll their own scenarios using their favorite image processing or custom computer vision libraries.

La « caméra » dans la documentation HoloLens peut faire référence à la « caméra de jeu virtuelle » (le frustum rendu de l’application à)."Camera" elsewhere in HoloLens documentation may refer to the "virtual game camera" (the frustum the app renders to). Sauf indication contraire, « Camera » sur cette page fait référence à la caméra de couleurs RVB réelle.Unless denoted otherwise, "camera" on this page refers to the real-world RGB color camera.

Utilisation de UnityUsing Unity

Pour passer des « CameraIntrinsics » et « CameraCoordinateSystem » à votre système de coordonnées de l’application/du monde, suivez les instructions de l’article appareil photo localisable dans 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 est automatiquement fourni par la classe PhotoCaptureFrame. vous n’avez donc pas à vous soucier des transformations CameraCoordinateSystem décrites ci-dessous.CameraToWorldMatrix is automatically provided by PhotoCaptureFrame class, and so you don't need to worry about the CameraCoordinateSystem transforms discussed below.

Utilisation de MediaFrameReferenceUsing MediaFrameReference

Ces instructions s’appliquent si you’r utilise la classe MediaFrameReference pour lire des images d’image à partir de l’appareil photo.These instructions apply if you'r using the MediaFrameReference class to read image frames from the camera.

Chaque image (qu’il s’agisse d’une photo ou d’une vidéo) comprend un SpatialCoordinateSystem enraciné à l’appareil photo au moment de la capture, qui est accessible à l’aide de la propriété CoordinateSystem de votre MediaFrameReference.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. Chaque frame contient une description du modèle d’objectif de l’appareil photo, qui se trouve dans la propriété CameraIntrinsics .Each frame contains a description of the camera lens model, which can be found in the CameraIntrinsics property. Ensemble, ces transformations définissent pour chaque pixel un rayon dans l’espace 3D représentant le chemin emprunté par les photons qui ont produit le pixel.Together, these transforms define for each pixel a ray in 3D space representing the path taken by the photons that produced the pixel. Ces rayons peuvent être liés à d’autres contenus dans l’application en obtenant la transformation du système de coordonnées du cadre vers un autre système de coordonnées (par exemple, à partir d’une image stationnaire de référence).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).

Chaque frame d’image fournit les éléments suivants :Each image frame provides the following:

L' exemple HolographicFaceTracking illustre la manière assez simple d’interroger la transformation entre le système de coordonnées de l’appareil photo et vos propres systèmes de coordonnées de l’application.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.

Utilisation de Media FoundationUsing Media Foundation

Si vous utilisez Media Foundation directement pour lire des images d’images à partir de l’appareil photo, vous pouvez utiliser l’attribut MFSampleExtension_CameraExtrinsics de chaque frame et MFSampleExtension_PinholeCameraIntrinsics attribut pour rechercher des frames de caméra par rapport aux autres systèmes de coordonnées de votre application, comme illustré dans cet exemple de code :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 };
};

Erreur de distorsionDistortion Error

Sur HoloLens, les flux vidéo et d’images fixes ne sont pas déformés dans le pipeline de traitement des images du système avant que les frames ne soient mis à disposition de l’application (le flux de préversion contient les images déformées d’origine).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). Étant donné que seules les CameraIntrinsics sont disponibles, les applications doivent supposer que les images d’images représentent une caméra Pinhole parfaite.Because only the CameraIntrinsics are made available, applications must assume image frames represent a perfect pinhole camera.

Sur HoloLens (première génération), la fonction d’intorsion dans le processeur d’images peut toujours provoquer une erreur pouvant atteindre 10 pixels lors de l’utilisation de CameraIntrinsics dans les métadonnées de frame.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. Dans de nombreux cas d’utilisation, cette erreur n’a pas d’importance, mais si vous alignez des hologrammes sur des affiches/marqueurs réels, par exemple, et que vous remarquez une <décalage de 10 px (environ 11 mm pour les hologrammes positionnés sur 2 mètres), cette erreur de distorsion peut en être la cause.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.

Scénarios d’utilisation d’appareil photo localisablesLocatable Camera Usage Scenarios

Afficher une photo ou une vidéo dans le monde où elle a été capturéeShow a photo or video in the world where it was captured

Les cadres de l’appareil photo sont fournis avec une transformation « caméra à toute la vie », qui peut être utilisée pour indiquer exactement où se trouvait l’appareil lorsque l’image a été prise.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. Par exemple, vous pouvez positionner une petite icône holographique à cet emplacement (CameraToWorld. MultiplyPoint (Vector3. Zero)) et même dessiner une petite flèche dans la direction vers laquelle l’appareil photo était dirigée (CameraToWorld. MultiplyVector (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)).

Étiquette/modèle/affiche/suivi d’objetTag / Pattern / Poster / Object Tracking

De nombreuses applications de réalité mixte utilisent une image ou un modèle visuel identifiable pour créer un point de suivi dans l’espace.Many mixed reality applications use a recognizable image or visual pattern to create a trackable point in space. Il est ensuite utilisé pour restituer des objets par rapport à ce point ou créer un emplacement connu.This is then used to render objects relative to that point or create a known location. Certaines utilisations de HoloLens incluent la recherche d’un objet réel marqué avec des appariés (par exemple, un moniteur TV avec un code QR), le placement d’hologrammes sur des personnes fiduciaires et le couplage visuel avec des appareils non-HoloLens tels que des tablettes qui ont été configurés pour communiquer avec HoloLens via 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.

Vous aurez besoin de quelques éléments pour reconnaître un modèle visuel et placer un objet dans l’espace universel des applications :You'll need a few things to recognize a visual pattern and place an object in the applications world space:

  1. Boîte à outils de reconnaissance de modèle d’image, telle que le code QR, les balises AR, le Finder de visages, les traceurs de cercle, la reconnaissance optique, etc.An image pattern recognition toolkit, such as QR code, AR tags, face finder, circle trackers, OCR etc.
  2. Collecter les trames d’image au moment de l’exécution et les transmettre à la couche de reconnaissanceCollect image frames at runtime, and pass them to the recognition layer
  3. Déprojetez leurs emplacements d’images dans des positions universelles ou des rayons de monde probables.Unproject their image locations back into world positions, or likely world rays.
  4. Positionner vos modèles virtuels sur ces emplacements mondiauxPosition your virtual models over these world locations

Liens importants de traitement d’images :Some important image-processing links:

Le maintien d’une fréquence d’images d’application interactive est essentiel, en particulier lors du traitement des algorithmes de reconnaissance d’images à long terme.Keeping an interactive application frame-rate is critical, especially when dealing with long-running image recognition algorithms. Pour cette raison, nous utilisons généralement le modèle suivant :For this reason, we commonly use the following pattern:

  1. Thread principal : gère l’objet CameraMain Thread: manages the camera object
  2. Thread principal : demande de nouveaux frames (Async)Main Thread: requests new frames (async)
  3. Thread principal : passer de nouveaux frames au thread de suiviMain Thread: pass new frames to tracking thread
  4. Thread de suivi : traite l’image pour collecter des points clésTracking Thread: processes image to collect key points
  5. Thread principal : déplace le modèle virtuel pour trouver les points clés trouvésMain Thread: moves virtual model to match found key points
  6. Thread principal : répéter à l’étape 2Main Thread: repeat from step 2

Certains systèmes de marqueurs d’images ne fournissent qu’un seul emplacement de pixel (les autres fournissent la transformation complète, auquel cas cette section n’est pas nécessaire), qui équivaut à un rayon d’emplacements possibles.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. Pour atteindre un emplacement 3D unique, nous pouvons ensuite tirer parti de plusieurs rayons et trouver le résultat final en fonction de leur intersection approximative.To get to a single 3d location, we can then leverage multiple rays and find the final result by their approximate intersection. Pour ce faire, procédez comme suit :To do this, you'll need to:

  1. Obtenir une boucle qui collecte plusieurs images d’appareil photoGet a loop going collecting multiple camera images
  2. Rechercher les points de fonctionnalités associés et leurs rayons mondiauxFind the associated feature points, and their world rays
  3. Lorsque vous disposez d’un dictionnaire de fonctionnalités, chacun avec plusieurs rayons de monde, vous pouvez utiliser le code suivant pour résoudre l’intersection de ces rayons :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);
 }

À partir de deux ou plusieurs emplacements d’étiquette suivis, vous pouvez positionner une scène modélisée pour l’adapter au scénario actuel de l’utilisateur.Given two or more tracked tag locations, you can position a modeled scene to fit the user's current scenario. Si vous ne pouvez pas supposer la gravité, vous aurez besoin de trois emplacements de balises.If you can't assume gravity, then you'll need three tag locations. Dans de nombreux cas, nous utilisons un modèle de couleurs dans lequel les blancs représentent les emplacements de balises suivis en temps réel et les sphères bleues représentent les emplacements de balise modélisés.In many cases, we use a color scheme where white spheres represent real-time tracked tag locations, and blue spheres represent modeled tag locations. Cela permet à l’utilisateur de mesurer visuellement la qualité d’alignement.This allows the user to visually gauge the alignment quality. Nous supposons l’installation suivante dans toutes nos applications :We assume the following setup in all our applications:

  • Deux ou plusieurs emplacements de balise modélisésTwo or more modeled tag locations
  • Un « espace d’étalonnage », qui, dans la scène, est le parent des balisesOne 'calibration space', which in the scene is the parent of the tags
  • Identificateur de la fonctionnalité de l’appareil photoCamera feature identifier
  • Comportement, qui déplace l’espace d’étalonnage pour aligner les balises modélisées avec les balises en temps réel (nous sommes prudents de déplacer l’espace parent, pas les marqueurs modélisés eux-mêmes, car d’autres connexions sont des positions relatives à eux).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;

Suivre ou identifier des objets/visages à l’aide de voyants ou d’autres bibliothèques de reconnaissanceTrack or Identify Tagged Stationary or Moving real-world objects/faces using LEDs or other recognizer libraries

Exemples :Examples:

  • Robots industriels avec del (ou codes QR pour des objets en déplacement plus lents)Industrial robots with LEDs (or QR codes for slower moving objects)
  • Identifier et reconnaître des objets dans la salleIdentify and recognize objects in the room
  • Identifiez et reconnaissez des personnes dans la salle, par exemple en plaçant des cartes de contact holographiques sur des visagesIdentify and recognize people in the room, for example placing holographic contact cards over faces

Voir aussiSee also