Lavorare con Azure Kinect Developer Kit

Microsoft ha annunciato i suoi moduli fotocamera Azure Kinect insieme a HoloLens 2 all'inizio del 2019. Entrambi i dispositivi utilizzano lo stesso modulo fotocamera a realtà mista, utilizzando un sensore di profondità del tempo di volo per mappare gli oggetti intorno alla fotocamera. Ma dove HoloLens è un dispositivo indossabile di realtà mista, i moduli Kinect di Azure hanno lo scopo di fornire applicazioni di machine learning ospitate in Azure con sensori connessi che possono essere montati ovunque in un'area di lavoro.

Azure Kinect è un discendente diretto dei moduli Kinect di seconda generazione forniti con Xbox One, ma invece di fornire input reali per i giochi, è destinato agli utenti e alle applicazioni aziendali. Destinato a funzionare con i servizi cognitivi di Azure, il primo kit per sviluppatori Kinect di Azure è stato distribuito alla fine del 2019 negli Stati Uniti, aggiungendo diversi altri paesi all'inizio del 2020.

Apertura della scatola

Il kit per sviluppatori Kinect Azure da $ 399 è una piccola unità bianca con due obiettivi per fotocamera, uno per una fotocamera RGB grandangolare e uno per il sensore di profondità Kinect e una serie di microfoni. Ha un sensore di orientamento, che consente di utilizzare la fotocamera per costruire complesse immagini 3-D di ambienti, pronte per l'uso nella realtà mista. È possibile collegare più dispositivi insieme per scansioni 3D rapide o per fornire la copertura di un'intera stanza, utilizzando il sensore di orientamento per comprendere la posizione del dispositivo.

Insieme all'unità videocamera, si ottiene un alimentatore, una chiave a brugola per rimuovere il coperchio delle porte di concatenamento e un cavo USB per il collegamento a un PC di sviluppo. Consiglierei di acquistare un treppiede da scrivania o un altro tipo di supporto, poiché il supporto in plastica in dotazione è piuttosto piccolo e non funziona con la maggior parte delle scrivanie o dei monitor. Nella confezione non è presente alcun software, solo un collegamento alla documentazione in linea da cui è possibile scaricare l'SDK del dispositivo.

Prima di iniziare, è necessario aggiornare il firmware del dispositivo. Viene fornito con l'SDK e include uno strumento di installazione dalla riga di comando. Quando si esegue il programma di aggiornamento, prima controlla lo stato corrente del firmware prima di installare il firmware della fotocamera e del dispositivo e quindi si riavvia. Una volta riavviata la telecamera, utilizzare lo stesso strumento per verificare che l'aggiornamento sia stato installato correttamente. Se si verifica un problema con un'installazione, è possibile utilizzare il ripristino hardware della fotocamera (nascosto sotto il supporto del treppiede) per ripristinare l'immagine di fabbrica originale.

Percepire il mondo

Con l'SDK installato puoi accedere ai sensori del dispositivo dal tuo codice. Sono disponibili tre SDK: uno per l'accesso di basso livello a tutti i sensori della videocamera, un altro per utilizzare le familiari funzionalità di rilevamento del corpo Kinect e uno per collegare l'array di microfoni della videocamera ai servizi vocali di Azure. Un'app Kinect Viewer precostruita mostra le visualizzazioni disponibili della telecamera e trasmette i dati dai sensori del dispositivo. È possibile accedere alla telecamera RGB grandangolare, a una vista della telecamera di profondità e all'immagine dalla telecamera a infrarossi del sensore di profondità. Gli SDK sono disponibili sia per Windows che per Linux, in particolare la versione Ubuntu 18.04 LTS di Canonical, e possono essere scaricati direttamente da Microsoft o da GitHub.

È una buona idea passare un po 'di tempo a giocare con Kinect Viewer. Ti consente di vedere come funzionano le diverse modalità della telecamera di profondità, aiutandoti a scegliere un campo visivo stretto o ampio. È possibile visualizzare i dati dai sensori di posizione, sia dall'accelerometro e dal giroscopio, sia dal gruppo di microfoni. Con Azure Kinect Developer Kit connesso a un PC di sviluppo e funzionante, puoi iniziare a scrivere codice per esso. È possibile utilizzare un'app di registrazione della riga di comando per acquisire i dati per la riproduzione nel visualizzatore, memorizzando le informazioni sulla profondità in un file in formato MKV (Matroska Video).

Realizza la tua prima applicazione di rilevamento della profondità

Microsoft fornisce codice di esempio per la creazione di una semplice applicazione C da utilizzare con Azure Kinect Development Kit. È necessaria una sola libreria e questa fornisce gli oggetti ei metodi necessari per lavorare con la fotocamera. Qualsiasi applicazione deve prima controllare quante telecamere sono collegate al PC host prima di configurare i flussi di dati del dispositivo. I dispositivi sono identificati dal loro numero di serie, quindi puoi utilizzarlo per indirizzare una telecamera specifica quando lavori con più telecamere collegate allo stesso PC o concatenate insieme.

Il kit per sviluppatori Kinect di Azure fornisce solo dati in streaming, quindi le applicazioni devono configurare la velocità dei dati in frame al secondo, insieme ai formati e alle risoluzioni dei colori dell'immagine. Dopo aver creato un oggetto di configurazione, puoi aprire una connessione utilizzando il tuo oggetto di configurazione, pronto per lo streaming dei dati. Quando hai finito di leggere un flusso di dati, interrompi e chiudi il dispositivo.

Le immagini vengono acquisite in un oggetto di acquisizione, con un'immagine di profondità, un'immagine IR e un'immagine a colori per ogni singola immagine, presa dal flusso del dispositivo. Una volta acquisita, puoi estrarre le singole immagini pronte per l'uso nella tua applicazione. Gli oggetti immagine possono essere consegnati alle API di visione artificiale di Azure, pronti per il riconoscimento di oggetti o il rilevamento di anomalie. Un esempio utilizzato da Microsoft nelle sue dimostrazioni è un'applicazione che utilizza video acquisiti per rilevare quando un lavoratore in una fabbrica si avvicina troppo a macchinari in funzione; un altro rileva qualcuno che fuma vicino a una pompa di benzina.

Un processo simile fornisce dati dai sensori di posizione e movimento. Poiché i dati di movimento vengono acquisiti a una velocità superiore rispetto ai dati di immagine, è necessario implementare una qualche forma di sincronizzazione nel codice per evitare la perdita di dati. I dati audio vengono acquisiti utilizzando API Windows standard, comprese quelle usate dai servizi vocali di Azure.

Sebbene l'hardware di Azure Kinect acquisisca molti dati, le funzioni dell'SDK aiutano a trasformarli in un formato utilizzabile; ad esempio, aggiungendo dati di profondità a un'immagine RGB per produrre immagini RGB-D che vengono trasformate nel punto di vista della telecamera RGB (e viceversa). Poiché i due sensori sono sfalsati, è necessario deformare una mesh dell'immagine per unire i punti di vista delle due telecamere, utilizzando la GPU del PC. Un'altra trasformazione genera una nuvola di punti, che consente di ottenere dati di profondità per ogni pixel nella cattura. Un'opzione utile nell'SDK è la capacità di acquisire video e flussi di dati in un file in formato Matroska. Questo approccio consente ai dispositivi con larghezza di banda limitata di inviare in batch i dati e fornirli, ad esempio, ai dispositivi Azure Stack Edge con contenitori di servizi cognitivi per l'elaborazione in batch.

Body tracking uno scheletro digitale

L'hardware Kinect originale ha introdotto il monitoraggio del corpo, con un modello scheletrico che potrebbe essere utilizzato per valutare rapidamente la postura e i gesti. Lo stesso approccio continua nell'SDK Azure Kinect Body Tracking, che utilizza la tecnologia di elaborazione parallela della GPU CUDA di Nvidia per lavorare con i dati di immagine 3-D dal sensore di profondità del dispositivo. Un'app di esempio in bundle mostra alcune delle funzionalità dell'SDK, inclusa la possibilità di monitorare più di una persona alla volta. 

Body Tracking SDK si basa su Azure Kinect SDK, utilizzandolo per configurare e connettersi a un dispositivo. I dati dell'immagine acquisita vengono elaborati dal tracker, memorizzando i dati in una struttura dati del frame del corpo. Contiene una raccolta di strutture scheletriche per i corpi identificati, una mappa indice 2D per aiutare a visualizzare i dati, insieme alle immagini 2D e 3D sottostanti utilizzate per costruire i dati di tracciamento. Ogni frame può essere utilizzato per costruire animazioni o per fornire informazioni a strumenti di apprendimento automatico che possono aiutare a elaborare le posizioni tracciate in relazione a una mappa della stanza o alle posizioni ideali.

I servizi cognitivi di Azure sono un potente strumento per l'elaborazione dei dati e l'aggiunta di Azure Kinect consente di utilizzarli in un'ampia gamma di scenari industriali e aziendali. Concentrandosi sul riconoscimento delle immagini 3-D sul posto di lavoro, Microsoft sta tentando di mostrare come il riconoscimento delle immagini può essere utilizzato per ridurre i rischi e migliorare la sicurezza. C'è anche la possibilità di utilizzare una serie di dispositivi come un rapido sistema di acquisizione volumetrica, che può aiutare a creare ambienti di realtà mista e fornire dati di origine per CAD e altri strumenti di progettazione. Il risultato è un dispositivo flessibile che, con un piccolo codice, diventa un dispositivo di rilevamento molto potente.