L'API di profondità raw fornisce dati di profondità per un'immagine della fotocamera con una precisione superiore rispetto ai dati completi dell'API di profondità, ma non copre sempre tutti i pixel. Le immagini di profondità non elaborate, insieme alle relative immagini di affidabilità corrispondenti, possono anche essere ulteriormente elaborate, consentendo alle app di utilizzare solo i dati sulla profondità con un'accuratezza sufficiente per il loro singolo caso d'uso.
Compatibilità dei dispositivi
La profondità non elaborata è disponibile su tutti i dispositivi che supportano l'API Depth. L'API di profondità non elaborata, come l'API di profondità completa, non richiede un sensore di profondità hardware supportato, ad esempio un sensore di tempo di volo (ToF). Tuttavia, sia l'API di profondità non elaborata sia l'API di profondità completa utilizzano tutti i sensori hardware supportati di cui un dispositivo potrebbe essere dotato.
API di profondità non elaborata e API di profondità completa
L'API Raw Depth fornisce stime della profondità con una maggiore precisione, ma le immagini con profondità non elaborata potrebbero non includere le stime della profondità per tutti i pixel dell'immagine della fotocamera. Al contrario, l'API Depth completa fornisce la profondità stimata per ogni pixel, ma i dati sulla profondità per pixel potrebbero essere meno accurati a causa della spianatura e dell'interpolazione delle stime della profondità. Il formato e le dimensioni delle immagini di profondità sono gli stessi in entrambe le API. Solo i contenuti sono diversi.
La tabella seguente illustra le differenze tra l'API di profondità non elaborata e l'API di profondità completa utilizzando un'immagine di una sedia e un tavolo in una cucina.
API | Resi | Immagine della fotocamera | Immagine in 3D | Immagine di attendibilità |
---|---|---|---|---|
API Raw Depth |
|
|||
API Full Depth |
|
N/D |
Immagini "con fiducia"
Nelle immagini di affidabilità restituite dall'API Raw Depth, i pixel più chiari hanno valori di affidabilità più elevati, con i pixel bianchi che rappresentano l'affidabilità totale e i pixel neri che rappresentano l'assenza di affidabilità. In generale, le regioni dell'immagine della fotocamera con più texture, come un albero, avranno una maggiore affidabilità della profondità non elaborata rispetto alle regioni senza texture, come una parete vuota. Le superfici senza texture di solito generano un'affidabilità pari a zero.
Se il dispositivo di destinazione è dotato di un sensore di profondità hardware supportato, la confidenza nelle aree dell'immagine sufficientemente vicine alla fotocamera sarà probabilmente più elevata, anche su superfici senza texture.
Costo calcolo
Il costo di calcolo dell'API Depth Raw è circa la metà del costo di calcolo dell'API Depth completa.
Casi d'uso
Con l'API di profondità Raw, puoi ottenere immagini di profondità che forniscono una rappresentazione più dettagliata della geometria degli oggetti nella scena. I dati di profondità non elaborati possono essere utili per creare esperienze AR in cui sono necessarie una maggiore precisione e un maggior dettaglio della profondità per le attività di comprensione della geometria. Ecco alcuni casi d'uso:
- Ricostruzione 3D
- Misurazione
- Rilevamento delle forme
Prerequisiti
Prima di procedere, assicurati di conoscere i concetti fondamentali dell'AR e come configurare una sessione ARCore.
Attiva profondità
In una nuova sessione ARCore, controlla se il dispositivo di un utente supporta la funzionalità Profondità. Non tutti i dispositivi compatibili con ARCore supportano l'API Depth a causa di limitazioni della potenza di elaborazione. Per risparmiare risorse, la profondità è disattivata per impostazione predefinita su ARCore. Attiva la modalità di profondità per consentire alla tua app di utilizzare l'API Depth.
var occlusionManager = // Typically acquired from the Camera game object.
// Check whether the user's device supports the Depth API.
if (occlusionManager.descriptor?.supportsEnvironmentDepthImage)
{
// If depth mode is available on the user's device, perform
// the steps you want here.
}
Acquisisci l'immagine di profondità non elaborata più recente
Chiama AROcclusionManager.TryAcquireEnvironmentDepthCpuImage()
e utilizza AROcclusionManager.environmentDepthTemporalSmoothingRequested
per acquisire l'immagine di profondità non elaborata più recente sulla CPU.
Acquisisci l'immagine di attendibilità della profondità non elaborata più recente
Chiama AROcclusionManager.TryAcquireEnvironmentDepthConfidenceCpuImage()
e utilizza AROcclusionManager.environmentDepthTemporalSmoothingRequested
per acquisire l'immagine di attendibilità sulla CPU.
// Attempt to get the latest environment depth image.
if (occlusionManager && occlusionManager.TryAcquireEnvironmentDepthConfidenceCpuImage(out XRCpuImage image))
{
using (image)
{
UpdateRawImage(m_RawEnvironmentDepthConfidenceImage, image);
}
}
else
{
m_RawEnvironmentDepthConfidenceImage.enabled = false;
}