Fotocamera individuabileLocatable camera

HoloLens include una fotocamera riguardante il mondo montata sulla parte anteriore del dispositivo, che consente alle app di visualizzare i dati visualizzati dall'utente.HoloLens includes a world-facing camera mounted on the front of the device, which enables apps to see what the user sees. Gli sviluppatori possono accedere e controllare la fotocamera, proprio come per le fotocamere a colori su smartphone, portatili o desktop.Developers have access to and control of the camera, just as they would for color cameras on smartphones, portables, or desktops. Le stesse API Windows Media Capture e Windows Media Foundation che funzionano su lavoro per dispositivi mobili e desktop in HoloLens.The same universal windows media capture and windows media foundation APIs that work on mobile and desktop work on HoloLens. Unity ha eseguito il wrapper di queste API Windows per astrarre le funzionalità di utilizzo della fotocamera in HoloLens.Unity has wrapped these windows APIs to abstract camera usage features on HoloLens. Le attività di funzionalità includono l'esecuzione di foto e video regolari (con o senza ologrammi) e l'individuazione della posizione della fotocamera in e della prospettiva sulla scena.Feature tasks include taking regular photos and videos (with or without holograms) and locating the camera's position in and perspective on the scene.

Informazioni sulla fotocamera del dispositivoDevice camera information

HoloLens (prima generazione)HoloLens (first-generation)

  • Fotocamera fissa foto/video (PV) con bilanciamento del carico automatico, esposizione automatica e pipeline per l'elaborazione di immagini complete.Fixed focus photo/video (PV) camera with auto white balance, auto exposure, and full image-processing pipeline.

  • Il LED per la privacy bianca per il mondo si illuminerà ogni volta che la fotocamera è attivaWhite Privacy LED facing the world will illuminate whenever the camera is active

  • La videocamera supporta le modalità seguenti (tutte le modalità sono 16:9 proporzioni) a 30, 24, 20, 15 e 5 fps:The camera supports the following modes (all modes are 16:9 aspect ratio) at 30, 24, 20, 15, and 5 fps:

    VideoVideo AnteprimaPreview AncoraStill Campo di visualizzazione orizzontale (H-FOV)Horizontal Field of View (H-FOV) Utilizzo suggeritoSuggested usage
    1280x7201280x720 1280x7201280x720 1280x7201280x720 45 deg45 deg (modalità predefinita con stabilizzazione video)(default mode with video stabilization)
    N/DN/A N/DN/A 2048x11522048x1152 67 deg67 deg Immagine ancora a risoluzione massimaHighest resolution still image
    1408x7921408x792 1408x7921408x792 1408x7921408x792 48 deg48 deg Risoluzione Overscan (riempimento) prima della stabilizzazione del videoOverscan (padding) resolution before video stabilization
    1344x7561344x756 1344x7561344x756 1344x7561344x756 67 deg67 deg Modalità video FOV grande con overscanLarge FOV video mode with overscan
    896x504896x504 896x504896x504 896x504896x504 48 deg48 deg Modalità a basso consumo/bassa risoluzione per le attività di elaborazione di immaginiLow power / Low-resolution mode for image-processing tasks

HoloLens 2HoloLens 2

  • Fotocamera con messa a fuoco automatica foto/video (PV) con bilanciamento del carico automatico, esposizione automatica e pipeline per l'elaborazione di immagini complete.Auto-focus photo/video (PV) camera with auto white balance, auto exposure, and full image-processing pipeline.

  • Il LED per la privacy bianca per il mondo si illuminerà ogni volta che la fotocamera è attiva.White Privacy LED facing the world will illuminate whenever the camera is active.

  • HoloLens 2 supporta diversi profili fotocamera.HoloLens 2 supports different camera profiles. Informazioni su come individuare e selezionare le funzionalità della fotocamera.Learn how to discover and select camera capabilities.

  • La videocamera supporta i profili e le risoluzioni seguenti (tutte le modalità video sono 16:9 proporzioni):The camera supports the following profiles and resolutions (all video modes are 16:9 aspect ratio):

    ProfiloProfile VideoVideo AnteprimaPreview AncoraStill Frequenza fotogrammiFrame rates Campo di visualizzazione orizzontale (H-FOV)Horizontal Field of View (H-FOV) Utilizzo suggeritoSuggested usage
    Legacy, 0 BalancedVideoAndPhoto, 100Legacy,0 BalancedVideoAndPhoto,100 2272x12782272x1278 2272x12782272x1278 15,3015.30 64,6964.69 Registrazione video di alta qualitàHigh-quality video recording
    Legacy, 0 BalancedVideoAndPhoto, 100Legacy,0 BalancedVideoAndPhoto,100 896x504896x504 896x504896x504 15,3015.30 64,6964.69 Flusso di anteprima per acquisizione foto di alta qualitàPreview stream for high-quality photo capture
    Legacy, 0 BalancedVideoAndPhoto, 100Legacy,0 BalancedVideoAndPhoto,100 3904x21963904x2196 64,6964.69 Acquisizione foto di alta qualitàHigh-quality photo capture
    BalancedVideoAndPhoto, 120BalancedVideoAndPhoto, 120 1952x11001952x1100 1952x11001952x1100 1952x11001952x1100 15,3015.30 64,6964.69 Scenari a lunga durataLong duration scenarios
    BalancedVideoAndPhoto, 120BalancedVideoAndPhoto, 120 1504x8461504x846 1504x8461504x846 15,3015.30 64,6964.69 Scenari a lunga durataLong duration scenarios
    Videoconferenza, 100VideoConferencing,100 1952x11001952x1100 1952x11001952x1100 1952x11001952x1100 15, 30, 6015,30,60 64,6964.69 Conferenze video, scenari con lunga durataVideo conferencing, long duration scenarios
    Videoconferenza, 100Videoconferencing,100 1504x8461504x846 1504x8461504x846 5, 15, 30, 605,15,30,60 64,6964.69 Conferenze video, scenari con lunga durataVideo conferencing, long duration scenarios
    Videoconferenza, 100 BalancedVideoAndPhoto, 120Videoconferencing,100 BalancedVideoAndPhoto,120 1920x10801920x1080 1920x10801920x1080 1920x10801920x1080 15, 3015,30 64,6964.69 Conferenze video, scenari con lunga durataVideo conferencing, long duration scenarios
    Videoconferenza, 100 BalancedVideoAndPhoto, 120Videoconferencing,100 BalancedVideoAndPhoto,120 1280x7201280x720 1280x7201280x720 1280x7201280x720 15, 3015,30 64,6964.69 Conferenze video, scenari con lunga durataVideo conferencing, long duration scenarios
    Videoconferenza, 100 BalancedVideoAndPhoto, 120Videoconferencing,100 BalancedVideoAndPhoto,120 1128x6361128x636 15, 3015,30 64,6964.69 Conferenze video, scenari con lunga durataVideo conferencing, long duration scenarios
    Videoconferenza, 100 BalancedVideoAndPhoto, 120Videoconferencing,100 BalancedVideoAndPhoto,120 960x540960x540 15, 3015,30 64,6964.69 Conferenze video, scenari con lunga durataVideo conferencing, long duration scenarios
    Videoconferenza, 100 BalancedVideoAndPhoto, 120Videoconferencing,100 BalancedVideoAndPhoto,120 760x428760x428 15, 3015,30 64,6964.69 Conferenze video, scenari con lunga durataVideo conferencing, long duration scenarios
    Videoconferenza, 100 BalancedVideoAndPhoto, 120Videoconferencing,100 BalancedVideoAndPhoto,120 640x360640x360 15, 3015,30 64,6964.69 Conferenze video, scenari con lunga durataVideo conferencing, long duration scenarios
    Videoconferenza, 100 BalancedVideoAndPhoto, 120Videoconferencing,100 BalancedVideoAndPhoto,120 500x282500x282 15, 3015,30 64,6964.69 Conferenze video, scenari con lunga durataVideo conferencing, long duration scenarios
    Videoconferenza, 100 BalancedVideoAndPhoto, 120Videoconferencing,100 BalancedVideoAndPhoto,120 424x240424x240 15, 3015,30 64,6964.69 Conferenze video, scenari con lunga durataVideo conferencing, long duration scenarios

Nota

I clienti possono sfruttare la funzionalità di acquisizione di realtà mista per scattare video o foto dell'app, tra cui ologrammi e stabilizzazione video.Customers can leverage mixed reality capture to take videos or photos of your app, which include holograms and video stabilization.

In qualità di sviluppatore, è necessario tenere conto di quando si crea l'app se si vuole che l'app risulti più adatta possibile quando un cliente acquisisce il contenuto.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. È anche possibile abilitare e personalizzare l'acquisizione di realtà mista direttamente dall'interno dell'app.You can also enable (and customize) mixed reality capture from directly within your app. Scopri di più su acquisizione di realtà mista per gli sviluppatori.Learn more at mixed reality capture for developers.

Individuazione della fotocamera del dispositivo nel mondoLocating the Device Camera in the World

Quando HoloLens acquisisce foto e video, i frame acquisiti includono il percorso della fotocamera nel mondo e il modello di obiettivo della fotocamera.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. Questo consente alle applicazioni di ragionare sulla posizione della fotocamera nel mondo reale per gli scenari di creazione di immagini potenziati.This allows applications to reason about the position of the camera in the real world for augmented imaging scenarios. Gli sviluppatori possono eseguire il Rolling dei propri scenari in modo creativo usando l'elaborazione di immagini preferite o librerie personalizzate per la visione del computer.Developers can creatively roll their own scenarios using their favorite image processing or custom computer vision libraries.

"La fotocamera" altrove nella documentazione di HoloLens può riferirsi alla "fotocamera virtuale del gioco" (tronco a cui viene eseguito il rendering dell'app)."Camera" elsewhere in HoloLens documentation may refer to the "virtual game camera" (the frustum the app renders to). Se non indicato diversamente, "camera" in questa pagina si riferisce alla fotocamera a colori RGB del mondo reale.Unless denoted otherwise, "camera" on this page refers to the real-world RGB color camera.

Uso di UnityUsing Unity

Per passare da "CameraIntrinsics" e "CameraCoordinateSystem" al sistema di coordinate dell'applicazione o del mondo, seguire le istruzioni riportate nell'articolo sulla fotocamera di locatable in 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 viene fornito automaticamente dalla classe PhotoCaptureFrame e pertanto non è necessario preoccuparsi delle trasformazioni CameraCoordinateSystem descritte di seguito.CameraToWorldMatrix is automatically provided by PhotoCaptureFrame class, and so you don't need to worry about the CameraCoordinateSystem transforms discussed below.

Uso di MediaFrameReferenceUsing MediaFrameReference

Queste istruzioni si applicano se you ' r usa la classe MediaFrameReference per leggere i frame immagine dalla fotocamera.These instructions apply if you'r using the MediaFrameReference class to read image frames from the camera.

Ogni fotogramma immagine (foto o video) include un SpatialCoordinateSystem radice alla fotocamera al momento dell'acquisizione, a cui è possibile accedere usando la proprietà CoordinateSystem di 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. Ogni frame contiene una descrizione del modello di obiettivo della fotocamera, che è possibile trovare nella proprietà CameraIntrinsics .Each frame contains a description of the camera lens model, which can be found in the CameraIntrinsics property. Insieme, queste trasformazioni definiscono per ogni pixel un raggio nello spazio 3D che rappresenta il percorso utilizzato dai fotoni che hanno prodotto il pixel.Together, these transforms define for each pixel a ray in 3D space representing the path taken by the photons that produced the pixel. Questi raggi possono essere correlati ad altro contenuto nell'app ottenendo la trasformazione dal sistema di coordinate del frame a un altro sistema di coordinate, ad esempio da un frame di riferimentofisso.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).

Ogni frame di immagini offre quanto segue:Each image frame provides the following:

Nell' esempio HolographicFaceTracking viene illustrato il modo piuttosto semplice per eseguire una query per la trasformazione tra il sistema di coordinate della fotocamera e i sistemi di coordinate dell'applicazione.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.

Utilizzo di Media FoundationUsing Media Foundation

Se si usa direttamente Media Foundation per leggere i frame di immagini dalla fotocamera, è possibile usare l' attributo MFSampleExtension_CameraExtrinsics di ogni frame e MFSampleExtension_PinholeCameraIntrinsics attributo per individuare i frame della fotocamera rispetto agli altri sistemi di coordinate dell'applicazione, come illustrato nel codice di esempio seguente: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 };
};

Errore di distorsioneDistortion Error

In HoloLens il video e i flussi di immagini ancora non sono distorti nella pipeline di elaborazione delle immagini del sistema prima che i frame siano resi disponibili per l'applicazione (il flusso di anteprima contiene i frame distorti originali).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). Poiché vengono resi disponibili solo i CameraIntrinsics, le applicazioni devono presupporre che i fotogrammi immagine rappresentino una fotocamera pinhole perfetta.Because only the CameraIntrinsics are made available, applications must assume image frames represent a perfect pinhole camera.

In HoloLens (prima generazione) la funzione di disdistorsione nel processore di immagini può comunque lasciare un errore fino a 10 pixel quando si usa il CameraIntrinsics nei metadati del 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. In molti casi d'uso, questo errore non è rilevante, ma se si allineano gli ologrammi a manifesti/marcatori reali, ad esempio, si nota un offset <10 px (circa 11 mm per gli ologrammi posizionati a 2 metri), questo errore di distorsione potrebbe essere causato.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.

Scenari di utilizzo della fotocamera locatableLocatable Camera Usage Scenarios

Mostra una foto o un video nel mondo in cui è stato acquisitoShow a photo or video in the world where it was captured

I frame della fotocamera del dispositivo presentano una trasformazione "da fotocamera a mondo", che può essere usata per visualizzare esattamente il punto in cui si trovava il dispositivo quando l'immagine è stata acquisita.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. Ad esempio, è possibile posizionare una piccola icona olografica in questa posizione (CameraToWorld. MultiplyPoint (Vector3. zero)) e persino creare una piccola freccia nella direzione della fotocamera (CameraToWorld. MultiplyVector (Vector3. avanti)).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)).

Rilevamento di Tag/modelli/poster/oggettiTag / Pattern / Poster / Object Tracking

Molte applicazioni di realtà mista usano un'immagine riconoscibile o un modello visivo per creare un punto di rilevamento nello spazio.Many mixed reality applications use a recognizable image or visual pattern to create a trackable point in space. Questa operazione viene quindi utilizzata per eseguire il rendering degli oggetti relativi a tale punto o creare un percorso noto.This is then used to render objects relative to that point or create a known location. Alcuni usi per HoloLens includono la ricerca di un oggetto reale con tag fiducials (ad esempio, un monitor TV con codice a matrice), il posizionamento di ologrammi su fiducials e l'associazione visiva di dispositivi non HoloLens come i tablet che sono stati configurati per comunicare con HoloLens tramite 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.

Sono necessari alcuni elementi per riconoscere un modello visivo e inserire un oggetto nello spazio globale delle applicazioni:You'll need a few things to recognize a visual pattern and place an object in the applications world space:

  1. Un toolkit di riconoscimento delle immagini, ad esempio codice a matrice, tag AR, ricerca viso, Tracker Circle, OCR e così via.An image pattern recognition toolkit, such as QR code, AR tags, face finder, circle trackers, OCR etc.
  2. Raccogliere i frame dell'immagine in fase di esecuzione e passarli al livello di riconoscimentoCollect image frames at runtime, and pass them to the recognition layer
  3. Riportare i percorsi delle immagini nelle posizioni internazionali o nei possibili raggi internazionali.Unproject their image locations back into world positions, or likely world rays.
  4. Posizionare i modelli virtuali in queste posizioni internazionaliPosition your virtual models over these world locations

Alcuni importanti collegamenti per l'elaborazione di immagini:Some important image-processing links:

Mantenere una frequenza dei fotogrammi dell'applicazione interattiva è fondamentale, soprattutto quando si gestiscono algoritmi di riconoscimento delle immagini con esecuzione prolungata.Keeping an interactive application frame-rate is critical, especially when dealing with long-running image recognition algorithms. Per questo motivo, viene comunemente usato il modello seguente:For this reason, we commonly use the following pattern:

  1. Thread principale: gestisce l'oggetto fotocameraMain Thread: manages the camera object
  2. Thread principale: richieste nuovi frame (asincrono)Main Thread: requests new frames (async)
  3. Thread principale: passa nuovi frame al thread di rilevamentoMain Thread: pass new frames to tracking thread
  4. Thread di rilevamento: elabora l'immagine per raccogliere punti chiaveTracking Thread: processes image to collect key points
  5. Thread principale: sposta il modello virtuale in modo che corrisponda ai punti chiave trovatiMain Thread: moves virtual model to match found key points
  6. Thread principale: ripetere il passaggio 2Main Thread: repeat from step 2

Alcuni sistemi di marcatori di immagini forniscono solo una posizione in un singolo pixel (altri forniscono la trasformazione completa, nel qual caso questa sezione non sarà necessaria), che corrisponde a un raggio di posizioni possibili.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. Per accedere a una singola posizione 3D, è possibile sfruttare più raggi e trovare il risultato finale in base all'intersezione approssimativa.To get to a single 3d location, we can then leverage multiple rays and find the final result by their approximate intersection. A tale scopo è necessario:To do this, you'll need to:

  1. Ottenere un ciclo per la raccolta di più immagini della fotocameraGet a loop going collecting multiple camera images
  2. Individuare i punti di funzionalità associati e i relativi raggi internazionaliFind the associated feature points, and their world rays
  3. Quando si dispone di un dizionario di funzionalità, ognuna con più raggi internazionali, è possibile usare il codice seguente per risolvere l'intersezione dei raggi: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);
 }

Date due o più posizioni dei tag rilevati, è possibile posizionare una scena modellata in modo da adattarsi allo scenario corrente dell'utente.Given two or more tracked tag locations, you can position a modeled scene to fit the user's current scenario. Se non è possibile presupporre gravità, saranno necessari tre percorsi di tag.If you can't assume gravity, then you'll need three tag locations. In molti casi viene usata una combinazione di colori in cui le sfere bianche rappresentano posizioni dei tag rilevati in tempo reale e le sfere blu rappresentano i percorsi dei tag modellati.In many cases, we use a color scheme where white spheres represent real-time tracked tag locations, and blue spheres represent modeled tag locations. Ciò consente all'utente di misurare visivamente la qualità dell'allineamento.This allows the user to visually gauge the alignment quality. Si presuppone che la configurazione seguente sia in tutte le applicazioni:We assume the following setup in all our applications:

  • Due o più percorsi di tag modellatiTwo or more modeled tag locations
  • Uno "spazio di calibrazione", che nella scena è l'elemento padre dei tagOne 'calibration space', which in the scene is the parent of the tags
  • Identificatore funzionalità fotocameraCamera feature identifier
  • Comportamento, che consente di spostare lo spazio di calibrazione per allineare i tag modellati con i tag in tempo reale (è necessario spostare lo spazio padre, non i marcatori modellati, perché altre connessioni sono posizioni relative a esse).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;

Tenere traccia o identificare gli oggetti o i visi del mondo reale con tag con i LED o altre librerie di riconoscimentoTrack or Identify Tagged Stationary or Moving real-world objects/faces using LEDs or other recognizer libraries

Esempi:Examples:

  • Robot industriali con LED (o codici a matrice per oggetti mobili più lenti)Industrial robots with LEDs (or QR codes for slower moving objects)
  • Identificare e riconoscere gli oggetti nella chat roomIdentify and recognize objects in the room
  • Identificare e riconoscere persone nella stanza, ad esempio inserendo schede di contatto olografiche sui visiIdentify and recognize people in the room, for example placing holographic contact cards over faces

Vedere ancheSee also